在介绍支持向量机之前呢,首先得先认识一下混淆矩阵,什么叫混淆矩阵呢。
1.混淆矩阵及其用法
一般来说,如果我们是进行数据分类的话,混淆矩阵是我们常用的一个工具
混淆矩阵是除了ROC曲线和AUC之外的另一个判断分类好坏程度的方法。
以下有几个概念需要先说明:
TP(True Positive): 真实为1,预测也为1
FN(False Negative): 真实为1,预测为0
FP(False Positive): 真实为0,预测为1
TN(True Negative): 真实为0,预测也为0
将这四个指标一起呈现在表格中,就能得到如下这样一个矩阵,我们称它为混淆矩阵(Confusion Matrix):
针对混淆矩阵
1.准确率(Accuracy)—— 针对整个模型的
2.精确率(Precision)
3.灵敏度(Sensitivity):就是召回率(Recall)
4.特异度(Specificity)
一般来说评价一个分类模型的好坏我们只取其中的三个指标,分别是准确率、灵敏度 、特异度三个指标。
准确率:所有判断正确的结果占总观测值的比重。
灵敏度:在真实值为正的所有结果中,模型预测为正的比重。
特异度:在真实值为负的所有结果中,模型预测为负的比重。
一般来说只有当这三个指标同时较大时才算模型预测分类良好。
代码实现:
python中可以利用svm中的混淆矩阵confusion_matrix来实现
但是python 中confusion_matrix生成的混淆矩阵跟上图生成的稍有差异
可以看出python的很多指标跟传统指标有很大的差异的:
所以我们可以采取如下代码
from sklearn.metrics import confusion_matrix #从svm输出混淆矩阵
a=confusion_matrix(y_true=你的真实值,y_pred=你的预测值)
tn,fp,fn,tp=a.ravel() #将混淆矩阵的四个值输出给四个值
正确率=(tp+tn)/(tp+tn+fp+fn)
灵敏度=tp/(tp+fn)
特异度=tn/(tn+fp)
print("模型的正确率为:"+str(正确率))
print("模型的灵敏度为:"+str(灵敏度))
print("模型的特异度为:"+str(特异度))
当然我们也可以利用pandas画出混淆矩阵
import pandas as pd
pd.crosstab(test_pork["y"],result,rownames=["y_true"],colnames=["y_pred"])
#上面的四个参数分别是真实值,预测值,行名,列名