分类学习统计分析指标

原文链接:http://blog.csdn.net/dream_angel_z/article/details/50867951

1.引言

  分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,我们需要根据特定的任务进行算法的选择,如何选择分类,如何评价一个分类算法的好坏,正确率确实是一个很好很直观的评价指标,但是有时候正确率高并不能代表一个算法就好。比如某个地区某天地震的预测,假设我们有一堆的特征作为地震分类的属性,类别只有两个:0:不发生地震、1:发生地震。一个不加思考的分类器,对每一个测试用例都将类别划分为0,那那么它就可能达到99%的正确率,但真的地震来临时,这个分类器毫无察觉,这个分类带来的损失是巨大的。为什么99%的正确率的分类器却不是我们想要的,因为这里数据分布不均衡,类别1的数据太少,完全错分类别1依然可以达到很高的正确率却忽视了我们关注的东西。接下来详细介绍一下分类算法的评价指标。

2.评价指标

(1)几个常用的术语

这里首先介绍几个常见的模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negtive)分别是:
a.True positives(TP):  被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);
b.False positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
c.False negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
d.True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。


  图是这四个术语的混淆矩阵,我只知道FP叫伪阳率,其他的怎么称呼就不详了。注意P=TP+FN表示实际为正例的样本个数,我曾经误以为实际为正例的样本数应该为TP+FP,这里只要记住True、False描述的是分类器是否判断正确,Positive、Negative是分类器的分类结果。如果正例计为1、负例计为-1,即positive=1、negtive=-1,用1表示True,-1表示False,那么实际的类标=TF*PN,TF为true或false,PN为positive或negtive。例如True positives(TP)的实际类标=1*1=1为正例,False positives(FP)的实际类标=(-1)*1=-1为负例,False negatives(FN)的实际类标=(-1)*(-1)=1为正例,True negatives(TN)的实际类标=1*(-1)=-1为负例。
(2)评价指标
a.正确率(accuracy)
正确率是我们最常见的评价指标,accuracy = (TP+TN)/(P+N),这个很容易理解,就是被分对的样本数除以所有的样本数,通常来说,正确率越高,分类器越好;
b.错误率(error rate)
错误率则与正确率相反,描述被分类器错分的比例,error_rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 -  error rate;
c.灵敏度(sensitive)
sensitive = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力;
d.特效度(specificity)
specificity = TN/N,表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力;
e.精度(precision)
精度是精确性的度量,表示被分为正例的示例中实际为正例的比例,precision=TP/(TP+FP);
f.召回率(recall)
召回率是覆盖面的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率与灵敏度是一样的。

g.F1_SCORE = 2*recall*precision/(recall+precision)
实际当中,我们往往希望得到的precision和recall都比较高,比如当FN和FP等于0的时候,他们的值都等于1。但是,它们往往在某种情况下是互斥的,比如这种情况,50个正样本,50个负样本,结果全部预测为正,那么它的precision为1而recall却为0.5.所以需要一种折衷的方式,因此就有了F1-score。
h.ROC曲线
ROC(receiver operating characteristic),平面的横坐标是false positive rate(FPR)假阳率,纵坐标是true positive rate(TPR)真阳率。ROC计算过程如下:
首先每个样本都需要有一个label值,并且还需要一个预测的score值(取值0到1);
然后按这个score对样本由大到小进行排序,假设这些数据位于表格中的一列,从上到下依次降序;
现在从上到下按照样本点的取值进行划分,位于分界点上面的我们把它归为预测为正样本,位于分界点下面的归为负样本;
分别计算出此时的TPR(Recall)=TP/P和FPR(1-SP)=FP/N,然后在图中绘制(FPR, TPR)点。
从上往下逐个样本计算,最后会得到一条光滑的曲线。



i.AUC
AUC(area under the curve)就是ROC曲线下方的面积,取值在0.5到1之间,因为随机猜测得到额AUC就是0.5。面积如下图所示,阴影部分即为AUC面积。


j.其他评价指标
计算速度:分类器训练和预测需要的时间;
鲁棒性:处理缺失值和异常值的能力;
可扩展性:处理大数据集的能力;
可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。
对于某个具体的分类器而言,我们不可能同时提高所有上面介绍的指标,当然,如果一个分类器能正确分对所有的实例,那么各项指标都已经达到最优,但这样的分类器往往不存在。比如我们开头说的地震预测,没有谁能准确预测地震的发生,但我们能容忍一定程度的误报,假设1000次预测中,有5次预测为发现地震,其中一次真的发生了地震,而其他4次为误报,那么正确率从原来的999/1000=99.9%下降到996/1000=99.6,但召回率从0/1=0%上升为1/1=100%,这样虽然谎报了几次地震,但真的地震来临时,我们没有错过,这样的分类器才是我们想要的,在一定正确率的前提下,我们要求分类器的召回率尽可能的高。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一种强大的编程语言,它可以用于进行各种统计分析。对于各地区美食的统计分析,Python也可以帮助我们进行数据处理和可视化。 首先,我们需要收集各地区的美食数据。可以通过网络爬虫技术获取相关信息,或者使用已有的数据集。然后,我们可以使用Python编写程序来处理这些数据,例如清洗、筛选和整理。 接下来,我们可以使用Python的数据分析库,如Pandas和NumPy,对美食数据进行分析。可以统计各地区的美食种类、数量和流行度。在Python中,我们可以使用相关函数和方法进行计数、排序和聚合操作。 如果我们想要对各地区美食的属性进行比较和分析,我们可以使用Python的统计库,如SciPy和StatsModels。可以计算各地区美食的平均值、方差和相关性等统计指标。这样可以帮助我们了解各地区美食的特点和差异。 最后,我们可以使用Python的数据可视化库,如Matplotlib和Seaborn,将分析结果可视化。可以绘制柱状图、饼图、地图和热力图等图表,以直观地展示各地区美食的统计数据。 综上所述,Python可以为各地区美食的统计分析提供强大的支持。它能够处理和分析数据,并通过可视化工具展示结果,帮助我们深入了解各地区的美食特点。通过运用Python的统计分析能力,我们可以在美食领域做出更准确的决策和预测。 ### 回答2: Python可以用来进行各地区美食的统计分析。首先,我们可以使用Python的爬虫功能来获取各地区美食的信息。通过抓取网络上的美食评论、菜谱等数据,可以得到不同地区的美食名称、口味特点、食材等信息。 接下来,我们可以使用Python的数据处理和分析库,如Pandas和NumPy,对获取到的数据进行清洗和整理。可以将美食数据进行分类,如按地区、菜系、食材等进行分类,以便后续的分析。 然后,可以使用Python的可视化工具,如Matplotlib和Seaborn,对美食数据进行可视化分析。可以绘制各地区美食数量的柱状图或饼图,以展示不同地区的美食分布情况。还可以通过制作热力图,来展示不同地区美食的热门程度。 此外,Python还可以进行更深入的统计分析。例如,可以使用Python的统计学库SciPy进行假设检验,来判断不同地区美食的口味是否存在显著差异。还可以使用Python的机器学习库,如Scikit-learn,进行预测分析,比如根据不同地区的美食特点来预测消费者对某种美食的喜好程度。 总之,Python作为一种功能强大的编程语言,可以进行各种各样的数据处理和分析任务,包括对各地区美食的统计分析。 ### 回答3: python各地区美食统计分析 美食是一个国家和地区的文化象征,不同地区之间的美食种类和特色可以展示出其独特的风土人情。使用Python进行各地区美食的统计分析可以帮助我们更好地了解各地的饮食文化,并为美食爱好者提供相关的参考和建议。 首先,我们可以通过调用网络爬虫来获取各地区的美食信息。Python提供了许多强大的网络爬虫库,如BeautifulSoup和Scrapy等,可以帮助我们从各个美食网站上抓取美食菜谱、推荐等相关信息。 其次,我们可以使用Python的数据分析库,如Pandas和NumPy等,对爬取到的数据进行清洗和整理。可以提取出美食的名称、地区、食材、制作方法等重要信息,并进行分类和汇总。 然后,我们可以利用Python的可视化库,如Matplotlib和Seaborn等,将统计结果呈现出来。可以使用柱状图、饼图等方式展示各地区美食的数量、类型分布等信息。同时,我们还可以利用地理信息系统库,如Folium,将美食在地图上进行可视化,更直观地展示各个地区的美食特色。 最后,我们可以进行一些统计分析,如计算各地区美食的平均评分、人气指数等。可以通过Python的统计库,如SciPy和StatsModels等,进行数据分析、回归分析等,探寻美食与地理、文化等因素之间的关联性。 总结来说,使用Python进行各地区美食的统计分析,可以帮助我们更全面地了解各地的美食文化,为美食爱好者提供相关的信息和参考。同时,结合数据分析和可视化技术,可以让我们更直观地呈现统计结果,从而更好地发现与探索美食领域的有趣现象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值