【scikit-learn】教師あり学習:高次元データの予測-2【Python】

本ページでは以下のページを要約するとともに、個人的な解説も記載しています。独特な解釈をしている部分があるので、誤りなどの指摘はtwitterまでお願いします。

参考ページ
Supervised learning: predicting an output variable from high-dimensional observations — scikit-learn 1.1.2 documentation
https://scikit-learn.org/stable/tutorial/statistical_inference/supervised_learning.html
閲覧日:2022年10月12日

線形モデル: 回帰からスパースへ

糖尿病データセット

糖尿病データセットは、442 人の患者で測定された 10 の生理学的変数 (年齢、性別、体重、血圧) と、1 年後の疾患進行の指標で構成されています。

#後ろの20個のデータをテストデータとして分割
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test  = diabetes_X[-20:]
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test  = diabetes_y[-20:]

本課題は生理学的データから糖尿病の進行状況を予測するものです。

線形回帰

LinearRegressionは、目的変数として二乗誤差を最小とすることを目標に線形モデルのパラメータを調整します。
y=Xβ+ϵy = X\beta + \epsilon
X:データX: データ
y:予測値y: 予測値
β:係数\beta: 係数
ϵ:誤差ϵ:誤差

以下のグラフの描き方はこちら

from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)
#LinearRegression()
print(regr.coef_) 
#[   0.30349955 -237.63931533  510.53060544  327.73698041 -814.13170937
#  492.81458798  102.84845219  184.60648906  743.51961675   76.09517222]

# 平均二乗誤差
np.mean((regr.predict(diabetes_X_test) - diabetes_y_test)**2)
#2004.5...

#スコアを求めます。0~1の間の数値で、1は完璧に予測できていることを表し、0は全く予測できていなことを表します。
regr.score(diabetes_X_test, diabetes_y_test)
#0.585...