分类模型指标:ROC与AUC

ROC与AUC定义

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。

相关理论

  • TPR (True Positive Rate):真实的正例中,被预测正确的比例
    TPR = TP/(TP+FN)
  • FPR(False Positive Rate):真实的反例中,被预测正确的比例
    FPR=FP/(TN+FP)
  • thresholds(截断点):正反类别的判断标准
  • 截断点与精确率、召回率的关系
    – 截断点越小,越容易被判断为正类,实际为正类的个数不变,预测为正类的个数增加。
    – 精确率越小(分子不变,分母变大)
    – 召回率越大(分母不变,分子变大)。

sklearn方式实现

from sklearn import datasets
import matplotlib.pyplot as plt
# 数据准备
digits = datasets.load_digits()
X = digits.data
y = digits.target.copy()
y[digits.target == 9] = 1
y[digits.target != 9] = 0

# 数据划分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)

# 逻辑回归
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
decision_scores = log_reg.decision_function(X_test)

# 截断点与精确率、召回率的关系
from sklearn.metrics import precision_recall_curve
precisions, recalls, thresholds = precision_recall_curve(y_test, decision_scores)  # 参数1 真值  参数2 score值
plt.plot(thresholds, precisions[:-1],color='red',label='precisions')  # thresholds少一个值, 所以这里要抛去一个值
plt.plot(thresholds, recalls[:-1],color='blue',label='recalls')
plt.xlabel("thresholds")
plt.legend()
plt.show()

# 分类模型指标:ROC与AUC
from sklearn.metrics import roc_curve
fprs,tprs,thresholds = roc_curve(y_test,decision_scores)
from sklearn.metrics import roc_auc_score
roc_score = roc_auc_score(y_test,decision_scores)
print(roc_score)

plt.plot(fprs,tprs)
plt.xlabel("fprs")
plt.ylabel("tprs")
plt.show()

你可能感兴趣的:(机器学习)