【python】回归评价指标体系

场景

经常会遇到对回归问题的评估问题,如何评估回归问题优劣本文整理了sklearn中关于回归问题的评估方法。

一些方法

1、mean_squared_error(MSE 常用)

简称MSE,即均方误差,计算公式为:
M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 M S E =\frac{1}{n}\sum_{i=1}^{n}{(y_i-\hat{y_i})^2} MSE=n1i=1n(yiyi^)2
一般使用RMSE进行评估(这个回归分析模型中最常用的评估方法):
M S E = 1 n ∑ i = 1 n ( y i − y i ^ ) 2 M S E =\sqrt{\frac{1}{n}\sum_{i=1}^{n}{(y_i-\hat{y_i})^2}} MSE=n1i=1n(yiyi^)2

2、mean_squared_log_error

计算公式为:
M S L E = 1 n ∑ i = 1 n ( l o g ( y i + 1 ) − l o g ( y i ^ + 1 ) ) 2 M S L E =\frac{1}{n}\sum_{i=1}^{n}\left( log(y_i+1)-log(\hat{y_i}+1) \right)^2 MSLE=n1i=1n(log(yi+1)log(yi^+1))2

3、median_absolute_error

计算公式为:
m e d i a n ( ∣ y i − y i ^ ∣ ) median({|y_i-\hat{y_i}|}) median(yiyi^)

4、mean_absolute_error(MAE)

计算公式为:
1 n ∑ i = 1 n ∣ y i − y i ^ ∣ \frac{1}{n}\sum_{i=1}^{n}{|y_i-\hat{y_i}|} n1i=1nyiyi^

5、explained_variance_score

解释方差的得分,计算公式为:
1 − v a r ( y − y ^ ) v a r ( y ) 1-\frac{var(y-\hat{y})}{var(y)} 1var(y)var(yy^)

6、r2_score

计算公式为:
R 2 ( y , y ^ ) = 1 − ∑ i = 0 n ( y i − y i ^ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2(y,\hat{y})=1-\frac{\sum_{i=0}^{n}{(y_i-\hat{y_i})^2}}{\sum_{i=1}^{n}{(y_i-\bar{y})^2}} R2(y,y^)=1i=1n(yiyˉ)2i=0n(yiyi^)2

其中 y ˉ = 1 n ∑ i = 1 n y i 其中\bar{y}=\frac{1}{n}\sum_{i=1}^{n}y_i 其中yˉ=n1i=1nyi

7. score

score method of classifiers

Scikit-learn中的每个估计器或模型在对数据进行训练后都有一个方法,通常是 .score(X_train, y_train)

当您调用逻辑递归,随机森林分类器等分类器时,该方法默认计算准确性评分(准确性为#correct_preds/#all_preds)。默认情况下,该方法不需要实际的预测。因此,当您call时:score score

clf.score(X_test, y_test)

它使用引擎盖下进行预测,并使用这些预测来计算准确性分数。可以将其视为计算准确性的简写,因为它是一个如此常见的指标。它还被实现以避免像这样涉及更多步骤的计算准确性:X_test score

from sklearn.metrics import accuracy score

preds = clf.predict(X_test)

accuracy_score(y_test, preds)

使用时,您需要现成的预测,即该函数不会使用引擎盖下的测试集生成预测。accuracy_score

对于分类器,两者都是相同的 - 它们只是计算相同事物的不同方式。accuracy_scorescore

score method of regressors

当在回归量上调用时,默认情况下计算决定系数 - R2。与分类器一样,该方法只是计算R2的简写,因为它通常用于评估回归量的性能。score score

reg.score(X_test, y_test)

如您所见,您只需将测试集传递给即可完成。但是,还有另一种计算R2的方法,即:score

from sklearn.metrics import r2_score

preds = reg.predict(X_test)

r2_score(y_test, preds)

与简单的 不同,它需要现成的预测 - 它不会在引擎盖下计算它们。score r2_score

所以,结论是和回归量是相同的 - 它们只是计算决定系数的不同方法。r2_score score

实现

import numpy as np
import pandas as pd
from deepforest import CascadeForestRegressor
from sklearn import datasets  # 导入库
from sklearn.metrics import explained_variance_score
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_squared_log_error
from sklearn.metrics import median_absolute_error
from sklearn.metrics import r2_score
# 1、抽取训练集合测试集
from sklearn.model_selection import train_test_split

data_diabetes = datasets.load_diabetes()  # 导入糖尿病数据

data = data_diabetes['data']
target = data_diabetes['target']
feature_names = data_diabetes['feature_names']

# 现在三个数据都是numpy的一维数据形式,将她们组合成dataframe,可以更直观地观察数据
df = pd.DataFrame(data, columns=feature_names)
df.head()  # 查看前几行数据

X_train, X_test, y_train, y_test = train_test_split(data, target, train_size=0.8)

model = CascadeForestRegressor(random_state=1)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

mse = mean_squared_error(y_test, y_pred)
score = model.score(X_train, y_train)
msle = mean_squared_log_error(y_test, y_pred)
mdae = median_absolute_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
evs = explained_variance_score(y_test, y_pred)
r2__score = r2_score(y_test, y_pred)

print("\nscore: ", score)

print('\nMSE为:', mse)
print('\nMSE为(直接计算):', np.mean((y_test - y_pred) ** 2))
print('\nRMSE为:', np.sqrt(mean_squared_error(y_test, y_pred)))

print("\nMSLE为:", msle)
print("\nMSLE为(直接计算):", np.mean((np.log(y_test + 1) - np.log(y_pred + 1)) ** 2))

print("\nMDAE为:", mdae)
print("\nMDAE为(直接计算):", np.median(np.abs(y_test - y_pred)))

print("\nMAE为:", mae)
print("\nMAE为(直接计算):", np.mean(np.abs(y_test - y_pred)))

print("\nEVS为:", evs)
print("\nEVS为(直接计算):", 1 - np.var(y_test - y_pred) / np.var(y_test))

print("\nR方_socre为:", r2__score)
print("\nR方_socre为(直接计算):", 1 - (np.sum((y_test - y_pred) ** 2)) / np.sum((y_test - np.mean(y_test)) ** 2))
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰之光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值