![]() 只区分 0 或 1。 它的行代表真实的类别,列代表预测的类别。 以第一行为例,真正的类别标签是 0, 有 8 个实例被预测为了 0,有 2 个实例被预测为了 1。 也就是说,在这 10 个真实标签为 0 实例中,有 8 个被正确分类,有 2 个被错误分类。 第二行这 10 个真实标签为 1 的实例中,3 个预测错了,7个预测对了。 https://cloud.tencent.com/developer/article/1935919 https://zhuanlan.zhihu.com/p/436195289 |
![]() |
召回率(Recall): 召回率衡量了分类模型 正确预测为正例的样本数量 占 所有实际正例样本数量的比例。 ![]() 计算公式为: 召回率 = TP / (TP + FN), 其中 TP表示真正例(True Positive), FN表示假反例(False Negative)。 召回率越高,表示模型能够更好地捕捉到正例样本。 |
查准率(Precision): 查准率衡量了分类模型预测为正例的样本中真正为正例的比例。 ![]() 计算公式为: 查准率 = TP / (TP + FP), 其中 TP表示真正例(True Positive), FP表示假正例(False Positive)。 查准率越高,表示模型预测为正例的样本中真正为正例的比例越高。 |
F-度量(F-Measure): F-度量综合考虑了召回率和查准率,是召回率和查准率的调和平均值。 ![]() 计算公式为: F-度量 = 2 * (查准率 * 召回率) / (查准率 + 召回率)。 F-度量综合了召回率和查准率的优势,能够更全面地评估分类模型的性能。 |
|
sklearn from sklearn.metrics import confusion_matrix # 输出混淆矩阵 print("Confusion Matrix:") confusion_matrix(y_test, pred) Confusion Matrix: array([[5494, 0], [ 2, 47]]) pandas pd.crosstab(y_test, pred, rownames=['Actual'], colnames=['Predicted']) ![]() |
|
|
|
|
预测正确的数量占总数的比例 import numpy as np np.random.seed(73) y_pred=np.random.randint(low=0,high=2,size=(10)) y_test=np.random.randint(low=0,high=2,size=(10)) acc = (y_pred==y_test).mean() acc = np.round(acc,decimals=4) acc 等价于 == 转化为 true/false后的均值 --------------------------------------------------------------------- |
|
|
|
|
from sklearn.metrics import accuracy_score,roc_auc_score, confusion_matrix, classification_report, roc_curve, auc,f1_scor # 预测测试集 y_pred = model.predict(X_test) y_pred array([1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0]) roc_auc_score(y_test, y_pred) # 0.9464461185718965 |
from sklearn.metrics import accuracy_score,roc_auc_score, confusion_matrix, classification_report, roc_curve, auc,f1_score y_scores = model.predict_proba(X_test)[:, 1] # 获取预测为恶性的概率 fpr, tpr, thresholds = roc_curve(y_test, y_scores) roc_auc = auc(fpr, tpr) roc_auc # 0.9977071732721913 |
分析差异的原因 阈值选择: 第一种方法依赖于一个固定的阈值(通常是0.5)来将概率转换为分类标签。 这个阈值可能不是最优的,导致分类性能不是最佳的。 信息利用: 第二种方法利用了完整的概率分布信息, 通过计算不同阈值下的FPR和TPR来绘制ROC曲线,并计算AUC。 这种方法通常更准确地反映了模型的性能。 哪种方法更准确? 在大多数情况下, 第二种方法(使用概率预测和 roc_curve、auc 函数)更准确地反映了模型的性能。 这是因为这种方法没有将概率预测简单地二值化为分类标签, 而是利用了模型输出的全部信息。 可能的解释 第一种方法可能由于选择了不合适的阈值(例如默认的0.5)而导致AUC值较低。 第二种方法通过考虑所有可能的阈值来全面评估模型性能,因此通常更可靠。 |
|
|
精确率 准确率 召回率 auc F1 值 |
|
|
|
|