交叉验证中的准确性和混淆矩阵
Accuracy and Confusion Matrix in Cross Validation
我正在使用 scikitlearn 训练模型来解决二元分类问题,我希望执行 5 折交叉验证。
作为指标,我想获得 5 倍的平均准确度和混淆矩阵。
因此,使用 cross_validate
我可以将多个指标传递给 scoring
参数。
根据这个 link,我可以 def
一个函数,returns 混淆矩阵在每个折叠处。在那段代码中,它使用 X
通过 .predict(X)
预测一些输出。但是不应该使用测试集 x_test
来代替吗?而且,由于在每次折叠时,都会从 cross_validate
获得不同的测试集,我不明白我们如何才能将 X
传递给 confusion_matrix_scorer()
和 .predict()
。另一个问题,这里是 clf = svm
对吧?
Docs 声明可召集得分手应满足
It can be called with parameters (estimator, X, y), where estimator is the model that should be evaluated, X is validation data, and y is the ground truth target for X (in the supervised case) or None (in the unsupervised case).
调用时cross_validate, the cv folds are first generated and passed to independent fitting processes. Inside these processes, the test dataset is passed to a private _score
method. From the source code
test_scores = _score(estimator, X_test, y_test, scorer, error_score)
使用定义的参数调用输入 scorrer (estimator, X, y)
source code
scores = scorer(estimator, X_test, y_test)
如果您想同时获得平均准确度和混淆矩阵,您可以通过 dictionary
return 这些分数
示例代码
from sklearn.metrics import accuracy_score, confusion_matrix
def confusion_matrix_scorer(clf, X, y):
y_pred = clf.predict(X)
cm = confusion_matrix(y, y_pred)
acc = accuracy_score(y, y_pred)
return {
'acc': acc,
'tn': cm[0, 0],
'fp': cm[0, 1],
'fn': cm[1, 0],
'tp': cm[1, 1]
}
我正在使用 scikitlearn 训练模型来解决二元分类问题,我希望执行 5 折交叉验证。
作为指标,我想获得 5 倍的平均准确度和混淆矩阵。
因此,使用 cross_validate
我可以将多个指标传递给 scoring
参数。
根据这个 link,我可以 def
一个函数,returns 混淆矩阵在每个折叠处。在那段代码中,它使用 X
通过 .predict(X)
预测一些输出。但是不应该使用测试集 x_test
来代替吗?而且,由于在每次折叠时,都会从 cross_validate
获得不同的测试集,我不明白我们如何才能将 X
传递给 confusion_matrix_scorer()
和 .predict()
。另一个问题,这里是 clf = svm
对吧?
Docs 声明可召集得分手应满足
It can be called with parameters (estimator, X, y), where estimator is the model that should be evaluated, X is validation data, and y is the ground truth target for X (in the supervised case) or None (in the unsupervised case).
调用时cross_validate, the cv folds are first generated and passed to independent fitting processes. Inside these processes, the test dataset is passed to a private _score
method. From the source code
test_scores = _score(estimator, X_test, y_test, scorer, error_score)
使用定义的参数调用输入 scorrer (estimator, X, y)
source code
scores = scorer(estimator, X_test, y_test)
如果您想同时获得平均准确度和混淆矩阵,您可以通过 dictionary
return 这些分数示例代码
from sklearn.metrics import accuracy_score, confusion_matrix
def confusion_matrix_scorer(clf, X, y):
y_pred = clf.predict(X)
cm = confusion_matrix(y, y_pred)
acc = accuracy_score(y, y_pred)
return {
'acc': acc,
'tn': cm[0, 0],
'fp': cm[0, 1],
'fn': cm[1, 0],
'tp': cm[1, 1]
}