混淆矩阵
机器学习中对于分类模型常用混淆矩阵来进行效果评价,混淆矩阵中存在多个评价指标,这些评价指标可以从不同角度来评价分类结果的优劣,以下内容通过简单的理论概述和案例展示来详细解释分类模型中混淆矩阵的评价指标及其用途。
以上四类判别结果展示在混淆矩阵上是一个两行两列的交叉矩阵,行分别代表实际的正例和负例,列分别代表预测的正例和负例。那么在以上矩阵中:四个象限分别代表四种判别结果:
左上角被称为真阳性(True Positive,TP):样本实际为正例,且模型预测结果为正例;
右上角被称为假阴性(False Negative,FN):样本实际为正例,但模型预测为负例;
左下角被称为假阳性(False Positive,FP):样本实际类别为负例,但模型预测为正例;
右下角被称为真阴性(True Negative,TN):样本实际类别为负例,且模型预测为负例。
混淆矩阵的四个象限有明显的规律,左上角至右下角的对角线上是预测正确(以T开头),另一条对角线则预测错误(以F开头),左侧上下象限是预测为真的类别(以P结尾),右侧上下象限为预测错误的类别(以N结尾)。
这样真个混淆矩阵看起来就清洗多了,围绕着混淆矩阵有几个比较重要的指标需要掌握。
ROC曲线、AUC指标
ROC的全名叫做Receiver Operating Characteristic,主要通过平面坐标系上的曲线来衡量分类模型结果好坏——ROC curve。横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。以上纵坐标的TPR即是上述的指标召回率,FPR则指代负样本中的错判率(假警报率),FPR = FP/(FP + TN) 。
典型的ROC曲线是一个位于坐标点(0,0)和(1,1)对角线上方的曲线,因为对角线代表着随机分类器的分类效果。ROC曲线只能通过图形来进行视觉判别,取法具体量化分类器的性能,于是AUC便出现了,它用来表示ROC曲线下的三角形面积大小,通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。
导入包
%clear %reset -f# In[*]import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svm, datasetsfrom sklearn.metrics import roc_curve, auc ###计算roc和aucfrom sklearn import cross_validation
划分训练集和测试集
# In[*]# Import some data to play withiris = datasets.load_iris() X = iris.data y = iris.target ##变为2分类X, y = X[y != 2], y[y != 2] # Add noisy features to make the problem harderrandom_state = np.random.RandomState(0) n_samples, n_features = X.shape X = np.c_[X, random_state.randn(n_samples, 200 * n_features)] # shuffle and split training and test setsX_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=.3,random_state=0)
建模(支持向量机)
# In[*]# Learn to predict each class against the othersvm = svm.SVC(kernel='linear', probability=True,random_state=random_state) ###通过decision_function()计算得到的y_score的值,用在roc_curve()函数中y_score = svm.fit(X_train, y_train).decision_function(X_test)
计算AUC以及绘图
# Compute ROC curve and ROC area for each classfpr,tpr,threshold = roc_curve(y_test, y_score) ###计算真正率和假正率roc_auc = auc(fpr,tpr) ###计算auc的值 # In[*]plt.figure() lw = 2 plt.figure(figsize=(10,10)) plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) ###假正率为横坐标,真正率为纵坐标做曲线plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic example') plt.legend(loc="lower right") plt.show()
作者:夜神moon
链接:https://www.jianshu.com/p/b654523fb92f
共同学习,写下你的评论
评论加载中...
作者其他优质文章