.. со стохастическим градиентным спуском
Этот код строит простую модель линейной регрессии, основанную на методе стохастического градиентного спуска, для прогнозирования роста сына с учетом роста отца. Здесь мы будем использовать 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()