python 召回率_python sklearn中分类问题的评估方法

在Python中的sklearn中的metrics中有很多对于模型评估方法的选项,本篇文章主要介绍其中关于分类算法的模型评估,主要是记录有哪些方法,这些方法的数学含义,及如何用这种方法来评估模型。

在计算之前需要导入相应的函数库

#导入相应的函数库

from sklearn.metrics import accuracy_score

from sklearn.metrics import precision_score

from sklearn.metrics import confusion_matrix

from sklearn.metrics import classification_report

from sklearn.metrics import cohen_kappa_score

from sklearn.metrics import f1_score

from sklearn.ensemble import RandomForestClassifier

from sklearn import datasets

from sklearn.model_selection import train_test_split

#建模分析

iris = datasets.load_iris()

x_train,x_test,y_train,y_test = train_test_split(iris['data'],iris['target'],random_state=41)

forest_clf = RandomForestClassifier(random_state=41)

forest_clf.fit(x_train,y_train)

y_pred = forest_clf.predict(x_test)

1、accuracy_score 与 precision_score

accuracy_score准确率,顾名思义就是分类结果中正确分类的数据比总数目(不论是两个还是多类);

precision_score 这个有时人们也称为其准确率,但是它有另外一个名称查全率,这个就是有正例和负例的区别了(一般来说正例就是我们所关注的那个类别), 这个的准确定义为:

equation?tex=%E6%9F%A5%E5%87%86%E7%8E%87+P+%3D%5Cfrac%7BTP%28%E7%9C%9F%E6%AD%A3%E4%BE%8B%29%7D%7BTP%28%E7%9C%9F%E6%AD%A3%E4%BE%8B%29%2BFP%28%E5%81%87%E6%AD%A3%E4%BE%8B%29%7D (即预测结果中正例所占比例)

这是对于两类的问题,对于多类的问题呢?同样也是可以计算的,这里就引入的宏平均和微平均的问题了,宏平均(先对每一个类统计指标值,然后在对所有类求算术平均值),微平均(是对数据集中的每一个实例不分类别进行统计建立全局混淆矩阵,然后计算相应指标),更多关于这个评价指标的问题请参考:谈谈评价指标中的宏平均和微平均 - robert_ai - 博客园

print('分类准确率为:',accuracy_score(y_test,y_pred))

print('宏平均准确率:',precision_score(y_test,y_pred,average='macro'))

print('微平均准确率:',precision_score(y_test,y_pred,average='micro'))

#结果

#分类准确率为: 0.921052631579

#宏平均准确率: 0.944444444444

#微平均准确率: 0.921052631579

2、confusion_matrix

confusion_matrix混淆矩阵,从混淆矩阵中能够更加直观的看出有多少类别被分错了,分错到哪些类别中了。上述预测的混淆矩阵(通过label可以指定类别并返回相应的混淆矩阵)为:

print('混淆矩阵为:\n',confusion_matrix(y_test,y_pred,labels=[0,1,2]))

#结果

#

#混淆矩阵为:

[[10 0 0]

[ 0 15 0]

[ 0 3 10]]

3、recall_score

召回率也是模型评估中常用的方法,其定义如下:

equation?tex=%E5%8F%AC%E5%9B%9E%E7%8E%87recall+R%3D%5Cfrac%7BTP%28%E7%9C%9F%E6%AD%A3%E4%BE%8B%29%7D%7BTP%28%E7%9C%9F%E6%AD%A3%E4%BE%8B%29%2BFN%28%E5%81%87%E8%B4%9F%E4%BE%8B%29%7D (即真实正例中最后预测为正例所占的比例)

同样对于召回率也是有微平均和宏平均的概念。

print('宏平均召回率为:',recall_score(y_test,y_pred,average='macro'))

print('微平均召回率为:',recall_score(y_test,y_pred,average='micro'))

#结果为:

#宏平均召回率为: 0.923076923077

#微平均召回率为: 0.921052631579

4、f1_score与fbeta_score

F1值作为准确率和召回率的组合,常作为模型选择的指标。其定义为:

equation?tex=f1%E5%80%BC%3D%5Cfrac%7B2%2A%E5%87%86%E7%A1%AE%E7%8E%87%2A%E5%8F%AC%E5%9B%9E%E7%8E%87%7D%7B%E5%87%86%E7%A1%AE%E7%8E%87%2B%E5%8F%AC%E5%9B%9E%E7%8E%87%7D (即准确率和召回率的调和平均数)

print('宏平均f1值为:',f1_score(y_test,y_pred,average='macro'))

print('微平均f1值为:',f1_score(y_test,y_pred,average='micro'))

#结果

#宏平均f1值为: 0.926218708827

#微平均f1值为: 0.921052631579

F_beta是F1值的一般形式:

equation?tex=F_%7B%5Cbeta%7D%3D%5Cfrac%7B%281%2B%5Cbeta%5E2%29%2A%E6%9F%A5%E5%85%A8%E7%8E%87%2A%E5%8F%AC%E5%9B%9E%E7%8E%87%7D%7B%28%5Cbeta%5E2%2A%E6%9F%A5%E5%85%A8%E7%8E%87%29%2B%E5%8F%AC%E5%9B%9E%E7%8E%87%7D

print('宏平均F_beta值为:',fbeta_score(y_test,y_pred,beta=0.5,average='macro'))

print('微平均F_beta值为:',fbeta_score(y_test,y_pred,beta=0.5,average='micro'))

#宏平均F_beta值为: 0.935155063977

#微平均F_beta值为: 0.921052631579

5、分类综合报告

分类综合报告是对上述的一个综合,里面覆盖了查全率、召回率、f值、分类个数等。

print('分类报告:\n',classification_report(y_test,y_pred))

#分类报告:

precision recall f1-score support

0 1.00 1.00 1.00 10

1 0.83 1.00 0.91 15

2 1.00 0.77 0.87 13

avg / total 0.93 0.92 0.92 38

6、cohen_kappa_score

cohen_kappa得分是一个介于(-1, 1)之间的数. score>0.8意味着好的分类;0或更低意味着不好(实际是随机标签)。

print('cohen_kappa得分为:',cohen_kappa_score(y_test,y_pred))

#cohen_kappa得分为: 0.879237288136

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值