我想澄清一个困扰我的问题。
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
时如何做数学。或者我可以吗?
mse = cross_val_score(model, x, y, cv=3, scoring=...)
cross_val_score()
将提供的数据划分为训练折叠和验证折叠。它在训练折叠上训练model
,并在验证折叠上对其进行评分。重复 cv=3
次,这样你就得到 3 分。您可以对这些分数进行平均以获得最终数字。
因此,如果数据集包含 9 个样本,则机制将是:
model
上训练 [4,5,6,7,8,9]
,对样本 1-3model
上训练 [1,2,3,7,8,9]
,对样本 4-6model
上训练 [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"
会执行类似的操作。