最小二乗フィッティングで糖尿病の進行度予測
糖尿病のサンプルデータを使って最小二乗フィッティングしました。糖尿病のサンプルデータを使って最小二乗フィッティングしました。
理論
観測値はというモデルで表されるとします。モデルがの線形結合で表される時、と書けます。はの係数です。
次のような個の観測値の集合がある場合を考えます。
この集合からモデルに最も当てはまる係数を求めるには、モデルから求めた理論値と観測値を最小にします。理論値と観測値の二乗誤差の総和は、
と書けます。Jを最小にすればよいということが分かります。
(2)のを行列で表すと以下のようになります。
(2)のを最小にするということは、(3)の大きさを最小にすればいいですね。簡略化&理想的な場合を考えると、(3) と置いてこれを解けばよいということが分かります。
実装
scikit-learnのLinearRegression()を使います。[1]の例では、1次元の特徴量に限定してフィッティングしていますが、全特徴量を使ってフィッティングしました。Variance scoreはフィッテイングの良さを示す値で、データのばらつきをもとに計算します。[1]では0.47でしたが、全特徴量を使った場合0.59となり、よりよくフィッティング出来ています。
出力
Coefficients: [ 2.06069866e-04 -7.05675908e-02 4.14834780e-01 2.49574079e-01 -7.11907159e-01 4.82683572e-01 9.08289960e-02 1.50462309e-01 6.01524431e-01 6.48063127e-02] Mean squared error: 0.02 Variance score: 0.59
学習データ、テストデータをそれぞれプロットし求めたフィッティングを描画してみました。各特徴量に対する観測値の値です。プロット点はデータ、線は予測結果を表しています。各プロットのタイトルには求めた係数を表示しています。係数の大きさが大きいほど重要な特徴量と考えられるのです。ここで最も大きいものはという特徴量でしたが、プロット点を見ると観測値と相関がないように見えます。また、データの傾向に反して負の係数であるのが気になります。未解決です。
Fig1. 学習データのプロット、フィッテイング結果
Fig2. テストデータのプロット、フィッテイング結果
参考
[1]Linear Regression Example, https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py