如何获得Python中多类分类问题的相邻精度分数?
我想计算真实类和相邻类的平均命中率百分比,并在交叉验证中实现它如何获得Python中多类分类问题的相邻精度分数?,python,scikit-learn,Python,Scikit Learn,我想计算真实类和相邻类的平均命中率百分比,并在交叉验证中实现它 #Example of my classification problem (in total 9 classes) y_true = [0, 0, 1, 5, 3, 4] y_pred = [0, 1, 0, 8, 6, 5] 常规的准确度将导致16,67(第一个预测是唯一正确的)。 然而,我希望得到“相邻精度”,在这种情况下为66,67%(前三个预测与最后一个预测是“正确的”) 公式如下: 其中Pi表示分类为i类的样本总数,g
#Example of my classification problem (in total 9 classes)
y_true = [0, 0, 1, 5, 3, 4]
y_pred = [0, 1, 0, 8, 6, 5]
常规的准确度将导致16,67(第一个预测是唯一正确的)。
然而,我希望得到“相邻精度”,在这种情况下为66,67%(前三个预测与最后一个预测是“正确的”)
公式如下:
其中Pi表示分类为i类的样本总数,g表示类别总数(=此处为9),n表示样本总数
我已经看过了,但它并没有特别的帮助,因为我想将这个评分度量合并到交叉验证函数中
这是我当前的代码:
scoringX = {'acc': 'accuracy',
'prec_macro': 'precision_macro',
'rec_macro': 'recall_macro',
'auc': 'roc_auc_ovr_weighted'}
cv_scores_rf = cross_validate(clf, X, y, cv=kcv, scoring = scoringX)
cv_predict_rf = cross_val_predict(clf, X, y, cv=kcv)
这是我理想的结局
scoringX = {'acc': 'accuracy',
'prec_macro': 'precision_macro',
'rec_macro': 'recall_macro',
'auc': 'roc_auc_ovr_weighted',
'adjacent_auc': make_scorer(custom_adjacent_accuracy_score)}
cv_scores_rf = cross_validate(clf, X, y, cv=kcv, scoring = scoringX)
cv_predict_rf = cross_val_predict(clf, X, y, cv=kcv)
提前谢谢 几个月前,我写了一篇关于如何用数学表示相邻精度的文章,经过一番思考后,我用了一个比你给出的公式简单一点的公式。(很遗憾,您必须跟随链接才能看到它;堆栈溢出不支持数学排版。)
如果我们将y\u true
和y\u pred
转换为numpy数组,则可以相当容易地实现此公式:
import numpy as np
y_true = np.array([0, 0, 1, 5, 3, 4])
y_pred = np.array([0, 1, 0, 8, 6, 5])
precise_accuracy = np.sum(y_pred == y_true) / len(y_pred)
adjacent_accuracy = np.sum(np.abs(y_pred - y_true) <= 1) / len(y_pred)
def custom_adjacent_accuracy_score(y_true, y_pred):
y_true = np.array(y_true)
y_pred = np.array(y_pred)
return np.sum(np.abs(y_pred - y_true) <= 1) / len(y_pred)