手记

一次10分钟 学机器学习 - 零番 / by 涤纶王


它被称为世界上最有潜力的技术之一,可以说它是一种传奇,由它所驱动的公司高达几百亿美金,它当初是怎样从默默无闻走到现在的巅峰的? 它又为何毅然被所有的开发者所痴迷?是骗局?是玄学?还是真的牛逼?请关注涤纶王的<<10分钟学机器学习>>,解读它背后的故事与原理!

本文系列为快餐教程,适合时间紧迫想快速上手学习的朋友,如果想真正的系统的全面的学懂这个的,建议还是老老实实的去翻阅各种教材课本。但是,注意关键词,系统的全面的,并不代表你阅读本文系列就只会皮毛啥都不会浪费光阴浪费金,我还是会尽最大可能浓缩最核心和实用的内容给大家,并且每篇后面会附上课后阅读内容,以便感兴趣的朋友加深理解。

什么是机器学习 WTF IS MACHINE LEARNING?

所谓机器学习,就是把我们所准备好的训练集,通过让机器进行分析,学习,采用的一定的方法,包括对参数的调整等,创造出一个模型,或者学习机,可以用到生活中解决实际的问题

所训练出的模型应该具有泛化(generalization)的技能,能够找到数据中的客观规律,并且应用于从来没有见过的数据集。

如果所得到的模型不能对没有见过的数据进行准确的或者相对准确的预测,只能预测用于训练或者见过的数据的话,那么就叫机械学习,对见过的东西进行死记硬背,并不叫机器学习。

举例子:

当我们发现家里墙上有很多凸起来的地方的时候,我们想到应该做一个东西能够把所有凸起来的地方弄平的工具,于是发明了锤子。小明发明的锤子,不仅能够砸平之前见过的墙上那些凸起来的地方,在遇到桌子上,地上有凸起来的地方的时候,也能砸平,所以小明的锤子具有泛化的能力,是个好锤子。小刚的锤子只能砸平墙上的,其他地方的都咋不了了,那就不具备泛化的能力,是个坏锤子。

总之,用公式大概表达这个概念

y = f(x)

y 就是你的预测结果, f()就是这个黑盒子,学习机,模型,x就是你用于预测的东西的特征

举例子:

x 是胡子 f()是模型 y 输出为男人 (当然女人也有可能有胡子,但这个就是属于例外的一些细节特征,不用做泛化,在做机器学习的时候,需要尽量的忽略个体特征,下面会讲到)

实践案例 Application Examples

你的邮箱中的邮件是有用的还是垃圾邮件?

这个人是公是母?

这个男得是渣男还是高富帅?

这是一个热狗还是一块煎饼?

根据小明的上学期的表现,他下学期应该考多少分?

ETC

监督学习 Supervised Learning

监督学习很好理解,就是人需要指定特征的学习,就叫做监督学习。就好比说,我说,男人有:胡子,胸毛,大块肌肉(或啤酒肚),贫乳,下体突兀这几个特征,然后用他们来训练这个模型。这个训练出来的模型,就会在预测的时候寻找这些个特征,来预测是否是一个男人。监督学习又分为以下几类:

二元分类

只有两个类的分类,当category C == 2 的时候,就叫做二元分类。就例如本王所爱提到的男人与女人的问题,这就是一个二元分类的问题。其特征就是预测的结果非黑即白,非0即1.

多元分类

顾名思义,有多个类别的分类,当category > 2的时候。比如是牡丹花还是玫瑰花还是菊花?

回归

回归的意思,其实不用太纠结。大家可以看到,二元分类和多元分类的类别都是离散的独立的,也就是各自不影响的,比如说这个人是男人不影响另一个人是否是男人。

而回归呢,它所表达的分类标准是连续的,continuous的,就比如预测股市的走向, sat或者托福分数的走向,它是有关联的。而回归又分为好多种,这个等专门讲回归的章节再谈。一般来讲所输入的特征x 和预测的结果y 都为实数,Xi ∈ R, Yi ∈ R

非监督学习

非监督学习也是相当流行和实用的一种,很多人都认为这种方式更接近于人学习东西的方式。这个时候人类不需要指定某些特征,而是让机器自己去探索发现,归纳总结,简而言之就是近似于放任不管任其发展。

就比如一个人,你不需要给他说猫有两只耳朵,两只眼睛,一个鼻子,和猫所独有的形状与大小,当人看多了足够的猫,自动就把这些猫归为一类了,就算不知道是叫做猫,那也大概会知道他们属于同一类别。

非监督学习一般采用的方法有聚类clustering,降维(非降维打击,三体粉切勿高潮)Dimensional Reduction 等等,这个等讲到非监督学习的时候会逐一教给大家。

模型的评估与检测

在挑选模型的时候,我们要避免所用两种模型,一种是欠拟和(underfit)还有一种是过拟合(overfit)

Underfit: 意思是你所训练出来的模型,并不具备这个种类应该具有并用作训练的所有或大部分特征,所以不具备准确预测的能力。就好比你本来应该知道男人有毛,DIAO,肌肉等特征,结果你说,男人有头发,男人有眼睛鼻子,那么女人也有,这就是属于欠拟和的一种。解决办法有决策树扩展分支(讲决策树时会讲到),增加训练轮数等,比较好客服。

Overfit: 意思是你所训练出来的模型,又过度包含了太多个体细节上的东西,比如有一个训练样本的男人脸上有颗痣,那模型说,喔,有痣的就是男人。这就GG了。哪儿有那么多脸上有痣的男人,一点也不泛化。但是过拟合不太好客服,只能尽量的去减少它所产生的影响。具体为什么不太好克服,有兴趣的朋友请看课后阅读。

以上这些情况都会造成泛化误差,以导致结果不准。

数据集的准备

这是一个看似简单,实则很困难的活。第一,要训练出可靠的模型,你的训练样本的量要足够,这对于谷歌,FB这样的大公司来说轻而易举,但对于个体户来说,准备样本还是非常苦逼的。这里来说说训练集的基本准备。第二,还要精心的划分和标注你的数据集,这是非常考验你体力的时候,稍有不慎,则被掏空。

一般来说,当我们有了一个数据集D,我们要有训练的部分S,也要有测试的部分T(因为你想知道训练的结果怎样,这个模型到底好不好),而一般来说要求S是要与T mutually exclusive的,也就是没有交集的,互斥的。T中包含的得是S中完全没有出现过的样本,因为我们之前提到过,你的模型必须在从未见过的样本上表现出色,那才是真的陈独秀。

这就有了下面几种准备和划分数据集的办法:

留出法 hold out

按一定比例对你的数据集进行划分,一般是2/3 - 4/5作为训练集S,其余的作为测试集T。这种方法有一个注意的地方,就是你的训练集S中各种类别的比例,要基本与你测试集对等。也就是说,如果训练集中,有10条狗,10只猫,那你的测试集中也得有10条狗,10只猫,不然就会出现误差,导致结果不准。

优点:逻辑简单,好操作

缺点:单词结果不可靠,一般采用多次随机划分,用所有得到的结果取平均值

交叉验证法 Cross Validation

这个方法简单的讲,就是我把一块大披萨切成N块,每一次我都留一块出来作为测试集T,用其余的N-1块的并集来作为训练集S,这样下去,每一块披萨都有作为测试集T的一次机会,然后最后取每次结果加起来后的平均值作为结果。

特点:稳定性与效果取决于N的取值,如何取N呢?玄学,但最常用的是10。

留一法 Leave One Out LOO

这是上面交叉验证法的一个进阶,假设我们有N个样本,那么现在每一个划分都是1/N,也就是其中的一个为一组,这里就有N组。每一次只留一个用作测试,其余的用来训练,这样十分满足我们的一个宗旨,就是越来越多的样本训练越好,这跟直接用数据集N训练出的模型相似。

优点:结果精准暴力

缺点:数据集如过很大,你要训练N次,那会是许多个不眠夜(你家有超级计算机和超级显卡除外),然后再加上中间还有不同的算法调参,GGGGG。

这里介绍一个概念,没有免费的午餐 No Free Lunch.

在机器学习中,永远没有说一个算法或者一个模型最好,只是说某种模型或者方法更适合某种情况,他有可能在这儿表现的好,在另外一个情况就不适用了,而另一个你看来在这儿很鸡肋的,却在某一个方面很厉害。所以说,上面所说的几种方法,并不是说你非得用哪种最好,而是具体分析你当时数据集的情况,和你的problem,来选择最适合的。

自助法 Bootstrapping

简单而负责的讲,就是每次随机选择,总有一部分会始终不被选到,可以作为测试集,而另一部分就可以作为训练集。

优点:数据集小,难以划分的时候很有用

缺点:影响了数据的分布,会导致误差



作者:涤纶王


1人推荐
随时随地看视频
慕课网APP