如何获得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)