糖尿病データで線形回帰モデル(diabetes linear regression)を構築!scikit-learnを使った予測分析入門

はじめに

この記事ではscikit-learnを使って、機械学習の入門用のデータとしてよく使われる糖尿病データから線形回帰モデルを構築する方法を紹介します。

糖尿病データセットの概要とscikit-learnの利用方法

糖尿病データセットは、糖尿病患者の血液中の特定のバイオマーカーの測定値と、1年後の疾患進行の測定値を含む、総数442件の観測値からなります。

scikit-learnは、Pythonの機械学習ライブラリで、機械学習アルゴリズムを簡単に実装できます。scikit-learnには、糖尿病データセットを含む多くのデータセットが用意されています。データセットを読み込むには、以下のようにします。

from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target

このコードでは、load_diabetes()関数を使って糖尿病データセットを読み込み、説明変数をX、目的変数をyに格納しています。

データの前処理と特徴量選択

データの前処理として、欠損値の処理やスケーリングが必要です。欠損値が含まれている場合は、scikit-learnのImputerクラスを使って補完することができます。

import numpy as np
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)

スケーリングは、説明変数の範囲を揃えるために行われます。線形回帰モデルでは、説明変数の範囲が大きく異なる場合、モデルの係数が不安定になる可能性があります。scikit-learnのStandardScalerクラスを使って、説明変数をスケーリングすることができます。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

特徴量選択は、説明変数の数を減らし、モデルの複雑さを抑えるために行われます。ここでは、Lasso回帰を使って、係数が0に近い説明変数を削除します。

from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.1)
lasso.fit(X_scaled, y)
X_selected = X_scaled[:, lasso.coef_ != 0]

このコードでは、Lasso回帰のalphaパラメータを0.1に設定し、fit()メソッドを使ってモデルを学習します。そして、coef_属性を使って、係数が0でない説明変数を選択します。

線形回帰モデルの構築と学習

線形回帰モデルは、説明変数と目的変数の間の線形関係をモデル化します。scikit-learnのLinearRegressionクラスを使って、線形回帰モデルを構築することができます。

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_selected, y)

このコードでは、LinearRegressionクラスを使って線形回帰モデルを構築し、fit()メソッドを使ってモデルを学習します。

モデルの評価指標と予測結果の解釈

モデルの評価指標として、平均二乗誤差(Mean Squared Error, MSE)と決定係数(Coefficient of Determination, R^2)を使います。

from sklearn.metrics import mean_squared_error, r2_score
y_pred = model.predict(X_selected)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)

このコードでは、predict()メソッドを使って、モデルから予測値を求めます。そして、mean_squared_error()関数とr2_score()関数を使って、MSEとR^2を計算します。
線形回帰モデルの係数と切片は、以下のようにして取得できます。

coefficients = model.coef_
intercept = model.intercept_

これらの係数を使って、説明変数と目的変数の間の線形関係を解釈することができます。例えば、以下のようなコードを使って、BMIと目的変数の関係を可視化することができます。

import matplotlib.pyplot as plt
plt.scatter(X_selected[:, 2], y)
plt.scatter(X_selected[:, 2], model.predict(X_selected), color='red')
plt.xlabel('BMI')
plt.ylabel('target')
plt.show()

このコードでは、scatter()関数を使って、BMIと目的変数の散布図を描画し、線形回帰モデルの予測値を散布図で描画しています。

まとめ

糖尿病データセットを使って、線形回帰モデルを構築する方法を紹介しました。データの前処理や特徴量選択、モデルの学習、評価指標の計算、予測結果の解釈など、機械学習の基本的な手順を実践することができました。
scikit-learnは、Pythonの機械学習ライブラリとして非常に有用であり、簡単に機械学習アルゴリズムを実装できます。今後も、scikit-learnを使って、様々な機械学習の問題に取り組んでいきましょう。