Machine Learning第六讲[应用机器学习的建议] --(四)处理不平衡类

来源:互联网 发布:淘宝联盟导购id 编辑:程序博客网 时间:2024/05/16 05:03

内容来自Andrew老师课程Machine Learning的第六章内容的Handling Skewed Classes部分。


一、Error Matrics for Skewed Classes(不平衡类的错误衡量指标)

在癌症预测模型中,如果有一个logistic回归模型h(x),(若某人得了癌症,则y=1,否则y=0),在某一个预测模型中,发现在测试集上有1%的错误率,即有99%的正确率,那这个模型是否性能很好呢?

假设这样一种情况:在测试集中总共只有0.50%的病人得了癌症(正负样本数量相差特别大的样本叫做倾斜类),看下面的代码:
function y = predictcancer(x)       y=0;    %ignore x!return 
即若把这个测试集的假设函数取y=0,即所有人都没有得癌症,那么针对这个模型,错误率为0.50%,正确率为99.5%,单看这个数字,貌似是比较好的情况,因为它有很高的正确率和很低的错误率。但是根据实际情况我们知道,这个模型的效果是很差的,因为得癌症的病人,这个模型一个都预测不了。

思考:若有一个预测实例,原来有99.2%的accuracy(0.8%的error),现在经过某种变化之后有99.5%的accuracy(0.5%的error),这到底算不算是对预测效果的一个提升呢?
其实不然,因为可能在改进之后,我将预测模型变为y=0,这时候accuracy变高,但是并不能说明预测性能变好。(因为这个模型总是将预测值预测为0,这并不是很好的预测)

通过上面的实例可知,使用accuracy和error来判断模型的好坏是不合适的,因此下面引入了Precision(查准率)和Recall(召回率)。

一般情况下,我们将稀有类(所占比例较少的类)表示成y=1,即在上述癌症预测模型中,将得癌症的病人记作y=1。

对于一个二元分类问题,称少数类为P(Positive),即正类,多数类为N(Negative),即负类,那么根据实际类别和预测类别,其混淆矩阵(confusion matric)如下:


则,Precision的含义便是在我们预测出来患癌症的病人中,有多少比例是真正患癌症的,其公式如下:

Recall的含义是在所有患有癌症的病人中,有多少比例使我们能预测出来的,其公式如下:

结合之前的例子,若预测模型为y=0,则TP=0,于是recall=0,因此可以判断y=0并不是很好的预测模型。

二、Trading Off Precision and Recall(Precision和Recall之间的权衡)

在logistic回归模型中:,若,我们将其预测为1,若,我们将其预测为0。

1、假设我们考虑:只有我们非常确信一个人患有癌症时,我们才可以告诉告诉他们患了癌症,因为如果不是非常肯定就告诉病人患了癌症,这将会引起病人的恐慌。
为了解决上面的问题,我们可以通过改变算法,即若,将其预测为1,若,将其预测为0,甚至我们可以将0.7改为更大的数字,如0.9,这种算法使得Precision变高,Recall变低。

2、假设我们考虑:只要病人有可能患了癌症,我们就告诉他患了癌症,换句话说,防止有些人患了癌症而没有预测出来,因为如果病人患了癌症,但是我们没有告诉他们,可能会耽误他们的治疗。
为了解决上面的问题,我们可以通过改变算法,即若,将其预测为1,若,将其预测为0,甚至我们可以将0.3改为更小的数字,如0.1,这种算法使得Precision变低,Recall变高。

一般的方法我们是当,将其预测为1,threshold和Precision以及Recall之间的关系如下图:

从上图可以看出,在threshold比较大的情况下,Precision比较大,Recall比较小;在threshold比较小的情况下,Precision比较小,Recall比较大。

为了保持Precision和Recall之间的相对平衡,引入F1 Score即F Score的概念。

先看下面的分析,我们应该怎样保持Precision和Recall的平衡呢?下面有3种算法,对应不同的Precison和Recall值

1、为了保持两者的平衡,第一个我们考虑的算法可能就是取Precision和Recall的平均值,即,其值如上图所示,那为什么我们使用F1 Score而不使用Average的算法呢?考虑下面因素:
(1)若预测函数y=1,则threshold较低,Precision较低,Recall较高。
(2)若预测函数y=0,则threshold较高,Precision较高,Recall较低。
若使用平均值,则上述两种情况值差不多,而且Average说明了Algorithm3是一个不错的模型,但是其实Algorithm3的预测模型是y=1,因此它不是一个很好的算法。

2、因此我们使用F1 Socre,(通常情况下,F1∈(0,1)),这个算法也会考虑Precision和Recall的平均值,但是如果P和R较低,则会给一个更高的权重。
(1)若P=0或R=0,则F1 Score = 0;若P=1,R=1,则F1 Score = 1。
(2)若想要得到一个较高的F1 Score,则P和R都要很接近于1.
一般F1 Score越高,我们认为分类器越好。


在平常实践中,自动选择临界值的较好方法便是试试不同的threshold,在交叉验证集上看看哪一个threshold能够得到最高的F值。




0 0
原创粉丝点击