1
0

regression_report関数を作ってみた

Last updated at Posted at 2024-05-06

classification_reportがあるのに対してregression_reportが無いのが不便なので作ってみました。
なお補正R2についてはこちらの記事を参考にしました。

関数

from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_squared_log_error
import numpy as np
def adjr2_score(y_test, y_pred, x):
    return 1 - (1 - r2_score(y_test, y_pred)) * (len(y_test) - 1) / (len(y_test) - len(x.columns) - 1)
def regression_report(y_test, y_pred, x):
    print("R2      : %f"%(r2_score(y_test, y_pred)))
    print("adjR2   : %f"%(adjr2_score(y_test, y_pred, x)))
    print("MSE     : %f"%(mean_squared_error(y_test, y_pred)))
    print("RMSE    : %f"%(np.sqrt(mean_squared_error(y_test, y_pred))))
    try:
        print("RMSLE   : %f"%(np.sqrt(mean_squared_log_error(y_test, y_pred, squared=False))))
    except:
        _ = 0
    print("MAE     : %f"%(mean_absolute_error(y_test, y_pred)))
    pass

使用例

import pandas as pd
import statsmodels.api as sm

df = pd.read_csv("boston.csv")

y = df["PRICE"]
x = sm.add_constant(df.drop("PRICE", axis=1))

model1 = sm.OLS(y, x).fit()
y_pred1 = model1.predict(x)
regression_report(y, y_pred1, x)
model1.summary()
R2      : 0.740643
adjR2   : 0.733248
MSE     : 21.894831
RMSE    : 4.679191
MAE     : 3.270863

image.png

ここで対数RMSEについては非負値のみしか扱えないためtry文を使っております。

参考文献

機械学習の評価指標とPythonでの実装【回帰編】 #Python - Qiita

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0