机器学习三种分类模型评价标准

分类模型的三种评价标准

分类模型有三种评价标准,分别是:混淆矩阵,ROC曲线和AUC面积

第一种标准:混淆矩阵

混淆矩阵:如下图
在这里插入图片描述

<1.>各个参数的含义:
N/P=negative/positive:表示猜结果为错误(negative)或猜结果为正确(positive)。
T/F=true/false:表示预测成功(True)或预测失败(False)。
TN:表示猜结果应该为错误(negative即0),预测成功(true),真正的结果也是0。
FP:表示猜结果应该为正确的(positive,即1),但是真正的结果却是0,即预测失败了(false)。
预测结果(P/N)放在后面,预测结果是否正确(F/T)放在前面。

<2.>混淆矩阵的的各个评价指标:
正确率ACCuracy:即预测结果成功/所有结果总数:=(TP+TN)/(TP+TN+FP+FN)。
精确率Prevision:即预测结果成功/积极预测总数=TP/(TP+FP)。

召回率recall/灵敏度Sensitivity:即positive预测结果成功/结果真正为正确的总数=TP/(TP+FN)。
特异度Specificity:negative预测成功/结果真正为错误的总数=TN/(TN+FP)。

F1 Score:精准率(prevision)和召回率(recall)的调和平均数:
F1 score=(2 * prevision * recall)/(previson + recall)
F1 score是衡量二分模型精确度的指标,兼顾了精确率和召回率。

这里用sklearn自带的鸢尾花的数据集演示一下混淆矩阵的用法

from sklearn import datasets#导入数据集
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix#导入混淆矩阵
from sklearn.metrics import precision_score,recall_score,f1_score#导入混淆矩阵的评价指标
#metrics衡量
df=datasets.load_iris()
X=df.data
y=df.target
#画分布散点图
plt.scatter(X[y==0,0],X[y==0,1],color='r')
plt.scatter(X[y==1,0],X[y==1,1],color='g')
#plt.scatter(X[y==2,0],X[y==2,1],color='b')
plt.show()
#由于鸢尾花有三种类型,但这里只做二分类,所有取y<2的数据
X=X[y<2]
y=y[y<2]
#划分数据
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
#建立逻辑分类模型
logic=LogisticRegression()
logic.fit(X_train,y_train)#数据填充
y_predict=logic.predict(X_test)#结果预测
logic_score=logic.score(X_test,y_test)#预测结果得分

print('预测分类值:',y_predict)
print('混淆矩阵:',confusion_matrix(y_test,y_predict))
print('精准率:',precision_score(y_test,y_predict))
print('召回率:',recall_score(y_test,y_predict))
print('f1_score:',f1_score(y_test,y_predict))

#输出结果如下:
预测分类值: [0 1 1 1 0 1 0 0 1 0 1 1 0 1 1 1 1 0 0 0]
混淆矩阵: 
[[ 9  0]
 [ 0 11]]
精准率: 1.0
召回率: 1.0
f1_score: 1.0

由于是标准数据且分类十分明显,所以精准率和召回率都是100%,说明预测的结果非常准确,f1_score得分为1.0即100分,说明这个分类模型准确无误。
散点图如下:
在这里插入图片描述
不同颜色的散点代表了不同种类的鸢尾花,通过散点的落点位置可以判断是属于哪一种鸢尾花。

ROC曲线与AUC面积

ROC曲线是根据混淆矩阵的评价标准组成的,横轴为FPR(false positive rate)=FP/(FP+TN),纵轴为TPR(True positive rate)=TP/(TP+FN)

from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score,recall_score,f1_score
#metrics衡量
df=datasets.load_iris()
X=df.data
y=df.target
plt.scatter(X[y==0,0],X[y==0,1],color='r')
plt.scatter(X[y==1,0],X[y==1,1],color='g')
#plt.scatter(X[y==2,0],X[y==2,1],color='b')
plt.show()
X=X[y<2]
y=y[y<2]
#划分数据
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
#建立逻辑分类模型
logic=LogisticRegression()
logic.fit(X_train,y_train)
y_predict=logic.predict(X_test)
logic_score=logic.score(X_test,y_test)

print('预测分类值:',y_predict)
print('混淆矩阵:',confusion_matrix(y_test,y_predict))
print('精准率:',precision_score(y_test,y_predict))
print('召回率:',recall_score(y_test,y_predict))
print('f1_score:',f1_score(y_test,y_predict))

from sklearn.metrics import roc_curve,roc_auc_score
decision_score=logic.decision_function(X_test)#点到超平面的距离,即点到决策边界的距离
print(decision_score)
fprs,tprs,thesholds=roc_curve(y_test,decision_score)
print(thesholds)#临界值

plt.plot(fprs,tprs)
plt.xlabel('False POsitive Rate')
plt.ylabel('True Positive Rate')
plt.show()

在这里插入图片描述

上面是鸢尾花的ROC曲线,这条曲线覆盖下的面积即AUC面积,可以用微积分得出,AUC面积越大,分类的精准度越高。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值