SK学习使用度量函数的不同方法

问题描述 投票:0回答:1

我想澄清一个困扰我的问题。

from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
from sklearn.ensemble import RandomForestRegressor
###
Rest of the preparation
###

mean_sqrd_error = cross_val_score(rfr,
                                  x,
                                  y,
                                  scoring = 'neg_mean_squared_error')
sqrd = mean_squared_error(y_test, y_pred)

这两个做同样的事情,而 cross_val_Score 只是自己做

model.predict()
吗? 如果我不能给他
cross_val_score
作为参数,sklearn 在使用
y_pred
时如何做数学。或者我可以吗?

python scikit-learn metrics
1个回答
0
投票
mse = cross_val_score(model, x, y, cv=3, scoring=...)

cross_val_score()
将提供的数据划分为训练折叠和验证折叠。它在训练折叠上训练
model
,并在验证折叠上对其进行评分。重复
cv=3
次,这样你就得到 3 分。您可以对这些分数进行平均以获得最终数字。

因此,如果数据集包含 9 个样本,则机制将是:

  • 第 1 次:在样本
    model
    上训练
    [4,5,6,7,8,9]
    ,对样本 1-3
  • 进行预测和评分
  • 第 2 折:在样本
    model
    上训练
    [1,2,3,7,8,9]
    ,对样本 4-6
  • 进行预测和评分
  • 第 3 折:在样本
    model
    上训练
    [1,2,3,4,5,6]
    ,对样本 7-9
  • 进行预测和评分

通过对某些样本进行训练,并对“未见过的”(未折叠)样本进行评分,这些分数可以让您更好地衡量模型在未见过的数据上的表现。

如果您在整个数据集上训练模型,然后在训练过的相同样本上对其进行评分,则分数将会有偏差,并且不能很好地衡量模型如何处理新数据。

您经常需要模型未经过训练的样本的分数和预测,这就是 cross_val_* 函数提供的功能。

cross_val_predict()
为您提供每次折叠的预测(折叠外预测),而
cross_val_score()
为您提供每次折叠的分数(折叠外分数)。

y_pred

与这些功能无关。对于每次折叠,他们在内部拟合一个“干净”模型,然后仅在保留的样本上预测/评分拟合模型。

mse = mean_squared_error(y_test, y_pred)

这只是一个通用的评分函数。它仅根据您提供的数据计算分数。 
y_pred

可以来自任何地方,简历或其他方式。

如果您想在自己的 CV 循环中使用该函数,代码将类似于:

fold_scores = [] for train_indices, val_indices in KFold(n_splits=3).split(X, y): fold_model = clone(model).fit(X[train_indices], y[train_indices]) score = mean_squared_error(y[val_indices], fold_model.predict(y[val_indices])) fold_scores.append(score)

当您提供
sklearn
时,

scoring="neg_mean_squared_error"
会执行类似的操作。
    

© www.soinside.com 2019 - 2024. All rights reserved.