RMSEの計算方法を調べると、scikit-learnでMSEを計算し、numpyでルートを取って算出する方法が紹介されています。これはscikit-learnでRMSEを直接算出できないため、と説明されていますが、最近のscikit-learnでは直接できるようになってるようでしたので、紹介します。
この記事でわかること
・scikit-learnでRMSEを直接算出する方法がわかる
MSEとRMSEについて
平均二乗誤差(Mean Squared Error, MSE)と相対平均二乗誤差(Relative Squared Error, RSE)は、モデルの予測性能を評価するための指標です。以下にそれぞれの計算方法について説明します。
平均2乗誤差(MSE)
MSEは、予測値と実際の観測値との差の平均の二乗を示します。以下はMSEの計算方法です。
- 各データポイントにおいて、予測値(ŷi)と実際の観測値(yi)の差を計算します。
- それらの差をすべて二乗します。
- これらの二乗誤差を合計します。
- 合計誤差をデータポイントの総数(n)で割って、MSEを計算します。
MSE = (1/n) * Σ(yi – ŷi)²
平均二乗誤差の平方根(RMSE)
RMSEは、MSEの平方根を取ったもので、誤差の平均の二乗の平方根を示します。以下はRMSEの計算方法です。
- MSEを計算します。
- MSEの平方根を取ります。
RMSE = √(MSE)
MSEとRMSEの違い
以下に2つの違いをまとめてみます。MSEもRMSEもどちらも予測値と実際の値の誤差を評価する指標です。RMSEの方が単位が観測値と同じため、直感的に理解しやすい特徴があります。
項目 | MSE | RMSE |
計算方法 | (1/n) * Σ(yi – ŷi)² | √(MSE) |
誤差の平均化 | 2乗平均 | 平方根を取った平均 |
単位 | 誤差の2乗 | 観測値と同じ |
目的 | モデルの性能評価 | モデルの性能評価 |
直感的な理解 | 理解しにくい | 理解しやすい |
最小値 | 0 | 0 |
最小値に近いほどよい | yes | yes |
scikit-learnでの計算方法
MSEはsklearn.metricsのmean_squared_errorで計算できます。
#インポート
from sklearn.metrics import mean_squared_error
import numpy as np
# サンプルデータを生成
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # 特徴量
y = np.array([2, 4, 5, 4, 5]) # 目標値
#mseの計算
mse=mean_squared_error(X,y)
mse
1.8
RMSEは上記のMSEの平方根を取れば良いため、numpyのnp.sqrtを用いて平方根を取る方法が今まで一般的に紹介されていました。
rmse=np.sqrt(mse)
1.3416407864998738
しかし、sklearn.metricsのmean_squared_errorでRMSEを直接計算できるようになっています。コードは以下の通り。引数として、squaredをFalseに指定します。
rmse=mean_squared_error(X,y,squared=False)
rmse
1.3416407864998738
コードが少なくて済みます。
以上、参考になれば幸いです。