66

【干货笔记】吴恩达教你应用机器学习技巧

 6 years ago
source link: http://mp.weixin.qq.com/s/dhroDk4QbIUV2dQxxzNQjA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【干货笔记】吴恩达教你应用机器学习技巧

Original 圣蕾 机器学习算法与自然语言处理 2018-01-22 16:00 Posted on

点击上方“蓝字”,选择“置顶公众号”

原创干货文章第一时间送达!

推荐阅读时间:8min~15min

主要内容:机器学习的实用技巧

在目前数据集中拟合得非常好的算法不一定在新数据集中也能work,极有可能发生了overfitting,所以需要一个评估的方法来判断这个算法是否在新的数据集中可行。

Evaluating a Learning Algorithm

首先第一步要做的,就是将目前已有的数据集随机打乱,然后分成training set和test set,一般70%的training set,30%作为test set。随即打乱是为了保持training set和test set的类别分布均匀。

然后根据training set中的错误J(theta)来更新模型;

最后使用test set中的错误J(theta)来评价模型。错误越小越好。

test set error反映出一个模型的范化能力。

Linear Regression的步骤:

Image

Logistic Regression以及one-to-rest的多分类的步骤:

Image

如果有多个模型,需要从中挑选出一个最好的模型,如下图:

Image

模型中的权值theta和偏置b都是由J_train(theta,b)来决定的,即theta和bare fit to training set。 如果现在使用J_test(theta,b)来选择模型的话(就是选择d = degree of polynomial),则d will be fit to test set。

这样的话,如果继续使用J_test(theta,b)评估模型的泛化能力有可能是得模型在d过拟合。 为解决这一问题,现在我们把原有数据集分成3分:training set 60%, validation set 20% & test set 20%。 首先,用J_train(θ,b)来决定权值theta和偏置b; 接着,用J_valid(theta,b)来选择模型,即选择d = degree of polynomial; 最后,用J_test(θ,b)来评估模型的泛化能力。

Bias vs. Variance

Image

high bias的意思是:拟合程度不够,J_train(theta)、J_valid(theta)和J_test(theta)都大 high variance的意思是:过拟合,范化能力不够,J_train(theta)小了,但是J_valid(theta)和J_test(theta)都大 可以通过观察J_train(theta),J_valid(theta)和J_test(theta)来判断模型什么时候过拟合。 如下图:

Image

和上面选择模型(就是选择d = degree of polynomial)一样,我们用J_valid(theta)来选择λ:

Image

再来看看扩大dataset对模型性能提升的帮助。 首先是,扩大dataset对J_train(theta)和J_valid(theta)的影响:

Image

接着是,当模型确定,而且模型面临high bias的情况下,扩大dataset对_train(theta)和J_valid(theta)的影响:

Image

发现,扩大dataset对于提升拟合能力的帮助并不大。 接着是,当模型确定,而且模型面临high variance的情况下,扩大dataset对_train(theta)和J_valid(theta)的影响:

Image

发现,扩大dataset对于提升范化能力是有帮助的。 对于神经网络来说,越深神经元越多,越有可能overfitting,这就是为什么深度学习需要大量的数据了:

Image

Precision & Recall

对于那种“倾斜的数据集(skewed dataset)”,所谓“倾斜”的意思是说,各类别的数据量相差很大。单纯地使用“准确率accuracy”是没法判断模型的好坏的,比如下面的例子:

健康的人有99个(y=0),得癌症的病人有1个(y=1)。我们用一个特别糟糕的模型,永远都输出y=0,就是让所有的病人都是健康的。

这个时候我们的“准确率”accuracy=99%,判断对了99个,判断错了1个,但是很明显地这个模型相当糟糕。

因此需要一种很好的评测方法,来把这些“作弊的”模型给揪出来。

先来了解一下真假阳阴性:

Image

接着引入两个新的术语“查准率precision”和“召回率recall”:

Image

解释一下,“查准率”就是说,所有被查出来得了癌症的人中,有多少个是真的癌症病人;“召回率”就是说,所有得了癌症的病人中,有多少个被查出来得癌症。

按照我们刚才的做法,recall = 0/1=0,所以这不是一个好模型。

拥有高查准率或者高召回率的模型是一个好模型。

注意:我们是对稀有类别使用的查准率或者召回率,而且我们会将这个“稀有类别”设置成y=1!!!

总结,在skewed dataset中,不能使用准确率accuracy来评判模型,而应该使用查准率或者召回率对模型在“稀有类别”上的performance进行评估。

 F1 score

我们希望对于某个模型而言,在precision越高的情况下,recall也会越高,但是有些情况下这两者是矛盾的,现在来考虑下面情况。

第一种情况:当且仅当非常确信他得癌症了,才确诊他得了癌症,即:

Image

这个时候,就是要“高的查准率”,结果导致了“低的召回率”。

第二种情况:只要怀疑他得了癌症,就确诊他得了癌症,即:

Image

这个时候,就是要“高的召回率”,结果导致了“低的准确率”。

这种情况下precision和recall的关系图如下:

Image

从这张图中看,precision很高的时候,recall就很低,反之。在某些应用中,我们就是需要这种precision和recall反相关的模型,但是有的情况下,我们也需要precision和recall同样好的模型,但是什么样的precision和recall才是同样好的呢?

我们需要一个标准可以综合这二者指标的评估指标,用于综合反映整体的指标,其中一种标准就是F1 score:

Image

看下面一个例子中,F1 score就反映了整体的指标,当precision和recall差不多好的时候,F1也是最好的:

Image

比如,当precision或者recall中有一个特别差的时候,F1会特别低: 
precision=0 or recall = 0, then F1=0

当precision和recall都特别好的时候,F1也会特别好: 
precision=1 and recall=1, then F1=1

总结一下,不同的应用下会有不同的评判标准,有的时候希望Precision比较高,有的时候希望Recall比较高,还有的时候希望他俩的综合指标F1比较高,这就需要自己根据具体的应用来选定了。

Image

欢迎关注公众号学习交流~         

Image

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK