【scikit-learn】回帰分析の評価指標について

はるか
はるか
回帰分析の評価指標、わかりにくいかも。具体的にどう評価する?
ふゅか
ふゅか
確かに!でもScikit-learnなら簡単に計算できるの。例えばR²とかRMSEとかね!

1. Scikit-learnにおける回帰分析の評価指標

回帰分析は、数値データの予測や関係性の分析に利用される手法で、モデルの性能を評価するためには適切な評価指標を使用することが重要です。sklearn.metricsを活用すると、これらの指標を簡単に計算できます。

1.1. 利用例(線形回帰)

以下、線形回帰のコードを利用して、評価指標を動かしていきます。

from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# データの読み込み
iris = load_diabetes()
X,y = iris.data,iris.target

# データを訓練用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LinearRegression()

model.fit(X_train,y_train)

y_pred = model.predict(X_test)

2. 決定係数 (R²)

R²は、モデルがデータのばらつきをどれだけ説明できているかを示す指標です。だいたいの値は0から1の範囲を取り、1に近いほどモデルの予測精度が高いことを示します。ただし、値域は1以下の実数を返す関数です。

ふゅか
ふゅか
R²はモデルの説明力を示す指標なの。1に近いほど良いんだよね。
はるか
はるか
決定係数って呼ばれる。

2.1. 式

\[ R^2 = 1 – \frac{\sum (y – y_{\mathrm{pred}})^2}{\sum (y – \overline{y^2}) } \]

2.2. Scikit-learnでの実装例

from sklearn.metrics import r2_score

r2 = r2_score(y_test, y_pred)
print("R²:", r2)

3. 平均二乗誤差平方根 (RMSE)

RMSEは、予測誤差の平均的な大きさを測定する指標です。値が0に近く小さいほど、モデルの予測値が観測値に近いことを意味します。

3.1. 式

\[ RMSE = \sqrt{\frac{\sum (y – y_{\mathrm{pred}})^2}{n}} \]

はるか
はるか
RMSE、予測誤差の平均。
ふゅか
ふゅか
そうそう!平方根を取るから、単位が予測と同じになるんだよね!

3.2. Scikit-learnでの実装例:

from sklearn.metrics import mean_squared_error
import numpy as np

rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print("RMSE:", rmse)

4. 平均絶対誤差 (MAE)

MAEは、予測誤差の絶対値の平均を示します。RMSEと同様に、0に近いほど予測精度がいいと判定されます。

4.1. 式:

\[ MAE = \frac{\sum |y – y_{\mathrm{pred}}|}{n} \]

ふゅか
ふゅか
MAEもいいよね。これなら誤差の絶対値の平均で出せるから、分かりやすい。

4.2. Scikit-learnでの実装例:

from sklearn.metrics import mean_absolute_error

mae = mean_absolute_error(y_test, y_pred)
print("MAE:", mae)

5. 評価指標をまとめたコード

5.1. Scikit-learnのまとめコード例

以下は、主要な指標を一括で計算するコード例です。

from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
import numpy as np

# y_true: 実測値, y_pred: 予測値
def evaluate_regression(y_test, y_pred):
    r2 = r2_score(y_test, y_pred)
    rmse = np.sqrt(mean_squared_error(y_test, y_pred))
    mae = mean_absolute_error(y_test, y_pred)
    print(f"R²: {r2:.2f}")
    print(f"RMSE: {rmse:.2f}")
    print(f"MAE: {mae:.2f}")


evaluate_regression(y_test, y_pred)

Scikit-learnを活用することで、回帰モデルの評価が効率的に行えます。これらの指標を使用してモデルを適切に評価し、精度向上に役立てましょう。

PR