.. со стохастическим градиентным спуском

Этот код строит простую модель линейной регрессии, основанную на методе стохастического градиентного спуска, для прогнозирования роста сына с учетом роста отца. Здесь мы будем использовать SGDRegressor от scikit-learn.

Помните: стохастический градиентный спуск требует настройки таких гиперпараметров, как макс. количество итераций (max_iter), скорость обучения (eta0) и допуск (tol), чтобы добиться сходимости модели регрессии. Точность модели можно определить на основе таких показателей, как оценка R^2.

Шаг 1 — Импорт необходимых библиотек

импортировать numpy как np
импортировать pandas как pd
импортировать matplotlib.pyplot как plt
get_ipython().magic('matplotlib inline')
импортировать math
из sklearn. linear_model import SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

Шаг 2 — Чтение набора данных; разделить данные обучения/тестирования

набор данных = pd.read_csv('father_son_heights.csv')
набор данных.head()

x = набор данных['Отец'].values.reshape(-1,1)
y = набор данных['Сын'].values.reshape(-1,1)

x_train, x_test, y_train, y_test = train_test_split (x, y, test_size = 0,3, random_state = 0)

Шаг 3 — Построить модель; получить перехват и коэффициент

# Создать модель линейной регрессии и подобрать данные для обучения
sgd_reg = SGDRegressor( max_iter=500000, tol=0,0001, eta0=0,0001, Learning_rate='adaptive', n_iter_no_change=50000 )
sgd_reg.fit(x_train, у_поезд)

textstr = ''
textstr = textstr + 'Полученное значение коэффициента: ' + str(sgd_reg.coef_ )

textstr = textstr + '\nПолученное значение перехвата: ' + str(sgd_reg.intercept_ )
печать (текстовая строка)

Шаг 4 — Расчет точности модели

num_data = x.shape[0]
y_pred = sgd_reg.predict(x_test)

mse = среднеквадратическая_ошибка(y_test, y_pred)
rmse = math.sqrt(mse)
rse = mse*num_data
rse /= num_data-2
rse = math.sqrt(rse )
r2_score = sgd_reg.score(x,y)

print("RMSE: ", rmse)
print("RSE: ", rse)
print("R²: ", r2_score)

Шаг 5 — Постройте прогноз y против x

plt.scatter(x, y, color='g') # График рассеяния X и Y, как в шаге 3
plt.xlabel('Рост: отец')
plt.ylabel('Рост : сын)

x_ht_samples = np.linspace(x.min(), x.max(), num=50)
y_ht_prediction = sgd_reg.predict(x_ht_samples.reshape(-1,1))
plt.plot( x_ht_samples, y_ht_prediction, color='r', linewidth=3)
plt.show()