单个输入的模型得分
Posted
技术标签:
【中文标题】单个输入的模型得分【英文标题】:Model score for a single input 【发布时间】:2021-06-20 18:05:48 【问题描述】:我有一个随机森林模型,我只想预测单个输入的分数。
计算分数的代码:
x_small=X_valid.head(1)
y_small=y_valid.head(1)
Ypredict = Pickled_LR_Model.predict(x_small)
print(Ypredict)
small_score = Pickled_LR_Model.score(x_small, y_small)
print("Test score: 0:.2f %".format(100 * small_score))
我得到的错误:
UndefinedMetricWarning: R^2 score is not well-defined with less than two samples.
错误是不言自明的。有没有一种方法可以预测单个输入的模型分数或任何其他相关分数。 ? 我当前的模型将托管在一个烧瓶应用程序中,其中输入将只是一条记录。
【问题讨论】:
【参考方案1】:正如错误所说,R-squared 对单个预测没有很好的定义;事实上,对单个预测进行评分通常也没有多大意义。
尽管如此,如果您出于其他(例如编程)原因必须这样做,您可以使用其他性能指标进行回归,例如 RMSE 或 MAE(根据定义,它们对于单个预测是相等的) :
from sklearn.metrics import mean_squared_error, mean_absolute_error
# dummy data - must be single-element arrays, otherwise it throws error
y_true = [3]
y_pred = [2.5]
# RMSE:
mean_squared_error(y_true, y_pred, squared=False)
# 0.5
# MAE:
mean_absolute_error(y_true, y_pred)
# 0.5
FWIW、RMSE 和 MAE 在这种 预测 设置中比 R 平方更有意义;详情请看scikit-learn & statsmodels - which R-squared is correct?自己回答的最后部分
请注意,这些数量应按原样表示,而不是 以百分比形式(同样,为 单个 预测计算任何百分比数量没有任何意义);您可能已经注意到,在单一预测的特殊情况下,它们具有非常自然的解释,即它们只是预测和基本事实之间的差异(此处为 0.5
)。
明确这一点后,您当然可以通过简单地获取预测和基本事实之间的差异来使您的代码更高效:
import numpy as np
np.array(y_true) - np.array(y_pred) # won't work with simple Python lists
# array([0.5])
请放心,您实际计算的是 RMSE/MAE,而不是临时计算的。
【讨论】:
【参考方案2】:我假设您正在使用随机森林回归器。如果是这种情况,您可以计算预测值和实际值之间的差异(如果有实际值)。
例如:
# Option 1 - observed error
print('Test score: ', round(Ypredict - y_small.item(), 2)
# Option 2 - observer error proportion
print('Test score: ', round((Ypredict - y_small.item()) / y_small.item(), 2))
您可以使用许多其他指标来衡量回归器的性能。 You can find some of them here(查看 3.3.1.1 部分中的回归。常见情况:预定义值)。
【讨论】:
为什么是round
?这与我的回答中已经建议的内容有何本质不同?
我们不知道y_small
或Ypredict
中的小数点,所以也可以。至于您的答案,您建议使用 MAE 和 MSE。我没有平方也没有将差值转换为绝对值。我还建议将错误作为基本事实的一部分。顺便说一句,你为什么没有投票结束这个问题?我已经看到你在这样的问题上做了很多次。
您应该已经看到我也提出了差异,只是在证明在单一预测的特殊情况下它与 RMSE 和 MAE 的使用基本相同之后不是临时解决方案。现在,如果您认为round
和比例证明了一个单独的答案是合理的(在重复现有答案的一部分之后),那就这样吧......
...您不喜欢编辑,直接转到感兴趣的部分;我知道了。关于“诸如此类的问题”部分,我建议您仔细阅读。
确实,这是一个概念问题(“我想了解 if [...]”),没有任何真正的编程问题,加上推荐请求(同样,关于方法)。以上是关于单个输入的模型得分的主要内容,如果未能解决你的问题,请参考以下文章