我有一个随机森林模型,我想仅对一个输入进行评分预测。
计算评分的代码如下:
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.
错误信息已经很清楚了。是否有办法预测单一输入的模型评分或其他相关评分?我当前的模型将托管在一个Flask应用程序中,输入将仅为单个记录。
回答:
正如错误信息所述,R平方对于单一预测没有明确定义;实际上,对单一预测进行评分通常也没有意义。
尽管如此,如果您出于其他原因(例如编程)必须这样做,您可以使用其他回归性能指标,比如RMSE或MAE(它们对于单一预测按定义是相等的):
from sklearn.metrics import mean_squared_error, mean_absolute_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
值得注意的是,在这种预测环境中,RMSE和MAE作为性能度量比R平方更有意义;有关详细信息,请参见scikit-learn & statsmodels – 哪个R平方是正确的?中的回答的最后一部分
请注意,这些数值应按原样呈现,不应作为百分比(再次强调,对于单一预测计算任何百分比数值都没有意义);您可能已经注意到,在单一预测的特殊情况下,它们有一个非常自然的解释,即它们只是预测与真实值之间的差异(这里是0.5
)。
既然已经澄清了这一点,您当然可以让您的代码更有效,只需计算预测与真实值之间的差异:
import numpy as npnp.array(y_true) - np.array(y_pred) # 对简单的Python列表不起作用# array([0.5])
这样您可以确信您计算的是RMSE/MAE,而不是其他临时方法。