相关疑难解决方法(0)

如何计算scikit-learn cross_val_predict准确度分数?

使用下面代码中所示的k -fold 方法cross_val_predict(参见doc,v0.18)是否计算每次折叠的准确度并最终平均它们?

cv = KFold(len(labels), n_folds=20)
clf = SVC()
ypred = cross_val_predict(clf, td, labels, cv=cv)
accuracy = accuracy_score(labels, ypred)
print accuracy
Run Code Online (Sandbox Code Playgroud)

python scikit-learn cross-validation

18
推荐指数
2
解决办法
2万
查看次数

为什么 cross_val_predict 不适合测量泛化误差?

当我通过交叉验证训练 SVC 时,

y_pred = cross_val_predict(svc, X, y, cv=5, method='predict')
Run Code Online (Sandbox Code Playgroud)

cross_val_predict返回 X 中每个元素的一个类预测,因此y_pred.shape = (1000,)m=1000. 这是有道理的,因为cv=5SVC 在 X 的不同部分上进行了 5 次训练和验证。在这五次验证中,每一次都对五分之一的实例进行了预测 ( m/5 = 200)。随后,将 5 个向量(每个向量包含 200 个预测)合并为y_pred.

y_pred考虑到所有这些,我使用和 y计算 SVC 的整体精度是合理的。

score = accuracy_score(y, y_pred)
Run Code Online (Sandbox Code Playgroud)

但是(!)cross_val_predict声明的文档:

cross_val_predict 的结果可能与使用 cross_val_score 获得的结果不同,因为元素以不同的方式分组。函数 cross_val_score 取交叉验证折叠的平均值,而 cross_val_predict 只是简单地返回来自几个不同模型的标签(或概率)。因此,cross_val_predict 不是泛化误差的适当度量。

有人可以换句话解释一下,为什么cross_val_predict不适合测量泛化误差,例如 via accuracy_score(y, y_pred)


编辑:

我首先假设在cv=55 个验证中的每一个都会对 X 的所有实例进行预测。但这是错误的,每次验证仅对 X 的 1/5 实例进行预测。

python svm scikit-learn cross-validation

8
推荐指数
1
解决办法
669
查看次数

标签 统计

cross-validation ×2

python ×2

scikit-learn ×2

svm ×1