機械学習の勉強として、しばらくはscikit-learnで用意されたデータを使って様々な分析をおこなっていこうと思う。
さて、今回は「糖尿病患者の診療データ」を使った重回帰分析がテーマだ。
データセットの読み込み〜モデルの学習
コードを書くのも慣れてきたので一気にモデルの学習までおこなう。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | from sklearn.datasets import load_diabetes from sklearn.model_selection import train_test_split from sklearn import linear_model import pandas as pd diabetes = load_diabetes() c_name = [ 'age' , 'sex' , 'bmi' , 'map' , 'tc' , 'ldl' , 'hdl' , 'tch' , 'ltg' , 'glu' ] x = diabetes.data y = diabetes.target x_test, x_train, y_test, y_train = train_test_split(x, y, test_size = 0.2 , shuffle = True ) model = linear_model.LinearRegression() model.fit(x_train, y_train) |
たったこれだけのコードで重回帰分析の学習モデルが完成する。
では、まず学習済みモデルの回帰係数を確認してみよう。
1 2 3 4 5 6 7 8 9 | # 回帰係数 print (model.coef_) # 切片 print (model.intercept_) # 項目ごとの回帰係数 df_tmp = pd.DataFrame([model.coef_, c_name]).T df_tmp |

今回の学習結果では「bmi」の回帰係数が高く、目的変数(1年後の疾患進行状況)に大きく影響を与えることが分かった。
モデルの決定係数(精度)の確認
では次にモデルの決定係数を確認し、予測の精度を見てみよう。
1 2 3 4 5 | print (model.score(x_train, y_train)) print (model.score(x_test, y_test)) # 0.5857997450223474 # 0.4539700642000357 |
重回帰分析の決定係数の目安は50%なので、まずまずの結果だ。
実際にテストデータを一つ予測してみると次の結果が得られた。
1 2 3 4 5 6 7 8 | # 正解 print (y_test[ 0 ]) # 予測データ print (model.predict([x_test[ 0 ]])) # 93.0 # [95.78318084] |
正解データにかなり近い予測値が得られたので、今回の重回帰分析モデルは良くできていると言えよう。