【scikit-learn】教師あり学習:高次元データの予測-4【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月15日

スパース性

※グラフの作成はこちら

特長量1つ目と2つ目のみでAIモデルを作成し可視化

ノート:糖尿病データセットの学習データは10の特長量を持ちます。10次元のデータは可視化できないので直感的に理解するのは難しいです。※原文の空白のスペースという訳の意味が不明でした。。。

以下のコードで1つ目と2つ目の特長量に対しての回帰係数を表示できます。

ols.coef_
#array([305.05479721,  10.44934916])

回帰係数を比較してみると、1つ目の方が大きく予測したい値に関わっていることがわかります。(少し増加するだけで、値の変化が大きくなるため)
特長量が多くて起こる次元の呪いを避けるために、有効な特長量のみ選択し、2つ目の特長量のようなあまり結果に関係しない特長量を切り捨てる手法があります。リッジ回帰と呼ばれる手法では、特長量を切り捨てることはせず全体の特長量の回帰係数を小さくします。ラッソ回帰と呼ばれる手法では、回帰係数を0にする特長量をいくつか用意し次元の呪いを回避します。このような手法を特にスパースと呼んだりします。

以下のコードでは実際にラッソ回帰で、糖尿病患者データのAIモデルを作成しています。結果をみると、1つ目の特長量と6つ目の特長量の回帰係数が0になっており、結果には影響が少ないことがわかります。

regr = linear_model.Lasso()
scores = [regr.set_params(alpha=alpha)
               .fit(diabetes_X_train, diabetes_y_train)
               .score(diabetes_X_test, diabetes_y_test)
           for alpha in alphas]
best_alpha = alphas[scores.index(max(scores))]
regr.alpha = best_alpha
regr.fit(diabetes_X_train, diabetes_y_train)
#Lasso(alpha=0.025118864315095794)
print(regr.coef_)
#[   0.         -212.4...   517.2...  313.7... -160.8...
#   -0.         -187.1...   69.3...  508.6...   71.8... ]

同じ問題に対する複数のアプローチ方法

ある問題に対して、どのアルゴリズムがフィットするかはわかりません。
データセットが大規模な場合は、リッジ回帰も使用することができます。scikit-learnでは大規模なデータセットでもラッソ回帰が使用できるようなオブジェクトも提供しています。ラッソ回帰は特に特長量の数に対してデータの数が少ない問題に対して有効です。