scikit-learnによる線形回帰
scikit-learnによる線形回帰
概要
サンプルデータセットに対し、scikit-learnの線形回帰(LinearRegression)を用いて回帰分析を行う。
環境
Python 3.6.3
scikit-learn 0.20.2
線形回帰
- データセット:make_regression()を使用
- データは訓練用データとテスト用データに分けて使用する
- 結果(学習結果)は、係数および切片となる
import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model from sklearn.datasets import make_regression # 回帰に使用するデータセットを生成 X, y = make_regression( n_samples=100, n_features=1, n_informative=1, bias=0.0, noise=20.0) # 訓練用データとテスト用データに分割 X_train, X_test = X[:80], X[-20:] y_train, y_test = y[:80], y[-20:] # LinearRegressionによる回帰 regr = linear_model.LinearRegression() regr.fit(X_train, y_train) # 重みを学習 print('Coefficients = ', regr.coef_) # 係数 print('Intercept = ', regr.intercept_) # 切片 X_pred = sorted(X_train) y_pred = regr.predict(X_pred) # モデルから予測
結果の出力(例)
Coefficients = [91.0507764] Intercept = -0.975756104957139
※train:訓練用データ
※test:テスト用データ
※predict:回帰直線(推測データ)
結果の評価
- 以下の評価尺度を算出する
- 決定係数
- 残差
- 平均二乗誤差
# 結果の評価 score_train = regr.score(X_train, y_train) # 決定係数 score_test = regr.score(X_test, y_test) print("Score train = ", score_train) print("Score test = ", score_test) y_test_pred = regr.predict(X_test) residual = y_test_pred - y_test # 残差 y_train_pred = regr.predict(X_train) mse_train = mean_squared_error(y_train, y_train_pred) # 平均二乗誤差 mse_test = mean_squared_error(y_test, y_test_pred) print('MSE train = ', mse_train) print('MSE test = ', mse_test) r2train = r2_score(y_train, y_train_pred) r2test = r2_score(y_test, y_test_pred) print('r^2 train = ', r2train) print('r^2 test = ', r2test)
結果の出力
Score train = 0.9411563698788179 Score test = 0.9547668252932158 MSE train = 383.8400680151228 MSE test = 285.09263899485285 r^2 train = 0.9411563698788179 r^2 test = 0.9547668252932158