はじめに
この実験では、線形回帰を使ってデータセットに最適にフィットする直線を描画する方法と、係数、二乗和残差、決定係数を計算する方法を示します。糖尿病データセットに対して線形回帰を行うために、scikit - learn ライブラリを使用します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
糖尿病データセットを読み込む
まず、scikit - learn から糖尿病データセットを読み込み、データセットから 1 つの特徴のみを選択します。
import numpy as np
from sklearn import datasets
## 糖尿病データセットを読み込む
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
## 1 つの特徴のみを使用する
diabetes_X = diabetes_X[:, np.newaxis, 2]
データセットを分割する
次に、データセットを訓練用とテスト用に分割します。データの 80%を訓練に、20%をテストに使用します。
## データを訓練用/テスト用に分割する
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
## ターゲットを訓練用/テスト用に分割する
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]
モデルを学習する
次に、線形回帰オブジェクトを作成し、訓練セットを使ってモデルを学習します。
from sklearn import linear_model
## 線形回帰オブジェクトを作成する
regr = linear_model.LinearRegression()
## 訓練セットを使ってモデルを学習する
regr.fit(diabetes_X_train, diabetes_y_train)
予測を行う
これで、学習済みのモデルを使ってテストセットに対する予測を行うことができます。
## テストセットを使って予測を行う
diabetes_y_pred = regr.predict(diabetes_X_test)
評価指標を計算する
係数、平均二乗誤差、決定係数を計算することができます。
from sklearn.metrics import mean_squared_error, r2_score
## 係数
print("Coefficients: \n", regr.coef_)
## 平均二乗誤差
print("Mean squared error: %.2f"
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
## 決定係数:1 は完全な予測
print("Coefficient of determination: %.2f"
% r2_score(diabetes_y_test, diabetes_y_pred))
結果を可視化する
最後に、予測値と実際の値をプロットして、モデルがデータにどの程度適合しているかを可視化します。
import matplotlib.pyplot as plt
## 出力をプロットする
plt.scatter(diabetes_X_test, diabetes_y_test, color="black")
plt.plot(diabetes_X_test, diabetes_y_pred, color="blue", linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
まとめ
この実験では、線形回帰を使ってデータセットに直線をフィットさせる方法と、係数、二乗和残差、決定係数を計算する方法を学びました。また、散布図を使って予測値と実際の値を可視化する方法も学びました。