accuracy_score 和 precision_score 可以相等吗?
Can accuracy_score and precision_score be equal?
我正在尝试使用 sklearn 库在 python 3 中构建逻辑回归模型。
让我们继续使用以下简短版本,
dv - 因变量
idv - 自变量
现在我有 idv1、idv2、idv3、idv4、idv5、idv6、idv7、idv8 和 idv9。
其中 idv6 到 idv9 是分类变量(idv6 和 idv7 有 3 个类别..其中 idv8 和 idv9 是布尔变量..是或不是变量 [0 或 1])
而 dv 又是一个布尔变量(是或否类型的变量)。
现在,我已经为最终模型数据的所有 idv6 到 idv9 创建了一个虚拟对象...即 idv6_c1、idv6_c2、idv_c3 并按照类似方式处理其余部分。 .like idv8_c1, idv8_c2 for idv8 & idv9.
现在,在拟合模型并找到预测值的指标后...
我说 accuracy_score of 76.7415479670124 % 和 precision_score 共 76.7415479670124 %
我使用 sklearn.metrics.accuracy_score 和 sklearn.metrics.precision_score 库进行了计算。
我想知道..这是正确的还是我遗漏了什么...?
这会发生吗??...准确度和精确度几乎等于小数点后 13 位???...我确定...我做错了什么...任何人都可以帮助我吗? ?
精度=真阳性/(真阳性+假阳性)
准确度 =(真阳性 + 真阴性)/(真阳性 + 假阳性 + 真阴性 + 假阴性)
因此,如果没有负面预测,这两个值将相等。
精度定义为相关检索结果的比例,由以下公式给出:(tp/tp+fp),而准确度是正确预测与输入样本总数的比率。
虽然不太可能,但当真阴性和假阴性的数量均为零时,精度等于准确度可能会发生。也就是说,您的系统不会将任何样本分类为阴性。
然而,您的问题可能与提到的微平均有关 here。
这里a link求解同分结果和更详细的原理
你只需要改变scikit-learn的参数。
average = macro
或 average = weighted
代码和结果是从上面的 link 复制的。 (https://simonhessner.de/why-are-precision-recall-and-f1-score-equal-when-using-micro-averaging-in-a-multi-class-problem/)
参考文献:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html
print("Precision (micro): %f" % precision_score(labels, predicitons, average='micro'))
print("Recall (micro): %f" % recall_score(labels, predicitons, average='micro'))
print("F1 score (micro): %f" % f1_score(labels, predicitons, average='micro'), end='\n\n')
print("Precision (macro): %f" % precision_score(labels, predicitons, average='macro'))
print("Recall (macro): %f" % recall_score(labels, predicitons, average='macro'))
print("F1 score (macro): %f" % f1_score(labels, predicitons, average='macro'), end='\n\n')
print("Precision (weighted): %f" % precision_score(labels, predicitons, average='weighted'))
print("Recall (weighted): %f" % recall_score(labels, predicitons, average='weighted'))
print("F1 score (weighted): %f" % f1_score(labels, predicitons, average='weighted'))
会得到这个结果:
Precision (micro): 0.444444
Recall (micro): 0.444444
F1 score (micro): 0.444444
Precision (macro): 0.366667
Recall (macro): 0.361111
F1 score (macro): 0.355556
Precision (weighted): 0.433333
Recall (weighted): 0.444444
F1 score (weighted): 0.429630
我正在尝试使用 sklearn 库在 python 3 中构建逻辑回归模型。
让我们继续使用以下简短版本,
dv - 因变量
idv - 自变量
现在我有 idv1、idv2、idv3、idv4、idv5、idv6、idv7、idv8 和 idv9。
其中 idv6 到 idv9 是分类变量(idv6 和 idv7 有 3 个类别..其中 idv8 和 idv9 是布尔变量..是或不是变量 [0 或 1])
而 dv 又是一个布尔变量(是或否类型的变量)。
现在,我已经为最终模型数据的所有 idv6 到 idv9 创建了一个虚拟对象...即 idv6_c1、idv6_c2、idv_c3 并按照类似方式处理其余部分。 .like idv8_c1, idv8_c2 for idv8 & idv9.
现在,在拟合模型并找到预测值的指标后...
我说 accuracy_score of 76.7415479670124 % 和 precision_score 共 76.7415479670124 %
我使用 sklearn.metrics.accuracy_score 和 sklearn.metrics.precision_score 库进行了计算。
我想知道..这是正确的还是我遗漏了什么...?
这会发生吗??...准确度和精确度几乎等于小数点后 13 位???...我确定...我做错了什么...任何人都可以帮助我吗? ?
精度=真阳性/(真阳性+假阳性)
准确度 =(真阳性 + 真阴性)/(真阳性 + 假阳性 + 真阴性 + 假阴性)
因此,如果没有负面预测,这两个值将相等。
精度定义为相关检索结果的比例,由以下公式给出:(tp/tp+fp),而准确度是正确预测与输入样本总数的比率。
虽然不太可能,但当真阴性和假阴性的数量均为零时,精度等于准确度可能会发生。也就是说,您的系统不会将任何样本分类为阴性。
然而,您的问题可能与提到的微平均有关 here。
这里a link求解同分结果和更详细的原理
你只需要改变scikit-learn的参数。
average = macro
或 average = weighted
代码和结果是从上面的 link 复制的。 (https://simonhessner.de/why-are-precision-recall-and-f1-score-equal-when-using-micro-averaging-in-a-multi-class-problem/)
参考文献:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html
print("Precision (micro): %f" % precision_score(labels, predicitons, average='micro'))
print("Recall (micro): %f" % recall_score(labels, predicitons, average='micro'))
print("F1 score (micro): %f" % f1_score(labels, predicitons, average='micro'), end='\n\n')
print("Precision (macro): %f" % precision_score(labels, predicitons, average='macro'))
print("Recall (macro): %f" % recall_score(labels, predicitons, average='macro'))
print("F1 score (macro): %f" % f1_score(labels, predicitons, average='macro'), end='\n\n')
print("Precision (weighted): %f" % precision_score(labels, predicitons, average='weighted'))
print("Recall (weighted): %f" % recall_score(labels, predicitons, average='weighted'))
print("F1 score (weighted): %f" % f1_score(labels, predicitons, average='weighted'))
会得到这个结果:
Precision (micro): 0.444444
Recall (micro): 0.444444
F1 score (micro): 0.444444
Precision (macro): 0.366667
Recall (macro): 0.361111
F1 score (macro): 0.355556
Precision (weighted): 0.433333
Recall (weighted): 0.444444
F1 score (weighted): 0.429630