目录
一、什么是机器学习
二、为什么要使用机器学习
三、机器学习系统的种类
3.1 监督/无监督学习
3.2 半监督学习
3.3 强化学习
3.4 批量学习与线上学习
3.5 基于实例学习与基于模型的学习
四、机器学习的主要挑战
4.1 训练数据的数量不足
4.2 数据的不合理有效性
4.3 训练数据不具代表性
五、过拟合和欠拟合
六、测试和验证
6.1 测试集
6.2 交叉验证
七、没有免费午餐公理
八、总结
机器学习是一门能够让编程计算机从数据中学习的计算机科学(和艺术)。
工程化定义:
一个计算机程序在完成任务T之后,获得经验E,其表现效果为P,如果任务T的性能表现,也就是用以衡量的P,随着E的增加而增加,可以称之为机器学习。
(1)通过机器学习算法可以简化那些现有解决方案需要大量手动调整或者规则列表超长的问题的代码,并且提升执行表现;
(2)解决传统技术手段根本无法解决的复杂问题;
(3)在环境波动中适应新的数据;
(4)从复杂问题和海量数据中获得洞见。
标准:是否在人类的监督下训练。
(1)监督学习
重要的监督学习算法:
(2)无监督学习
聚类算法(比如,检测相似访客的分组)
可视化和降维(可视化,便于人理解数据怎么组织)(降维,用来做特征提取,减小数据所占空间,提高速度,有可能提高性能)
关联规则学习(发现数据属性间的联系:比如超市的商品)
学习系统,又称为智能体,能够观察环境,作出选择,执行操作,并获得回报,或者以负面回报的形式获得惩罚。
标准:是否能从导入的数据流进行持续学习。
(1)批量学习
必须使用所有的可用数据进行训练,一般采用离线学习的方式,即先训练系统,然后将其投入生产环境,这时候学习过程停止,只是将所学的应用处理。只是每次更新数据的时候,重新训练的成本较大。
(2)线上学习
又称为增量学习,持续接收数据流,并同时对数据流的变化做出快速或自主的反应,可以解决超大数据集的训练问题。需要指出的是,整个训练通常也是离线完成的,“在线学习”具有歧义性,称为增量学习更合适。
是将新的数据和已知的数据进行匹配,还是对训练数据进行模式检测,进而建立预测模型。根据如何泛化来分类。
(1)基于实例的学习
将所有的训练数据全部记住,然后根据某种相似度度量方式将其泛化到新的实例。
(2)基于模型的学习
构建符合训练数据特征的模型,然后根据模型来预测。
目前大部分机器学习算法都需要大量的数据才能正常工作(除非重用现有模型的某些部分)。
2001年,微软有研究员表明,截然不同的机器学习算法(包括最简单的算法)在自然语言歧义消除这个复杂问题的表现上,几乎完全一致
这些数据表明,和算法开发上,数据的建设尤为重要。
如果有部分数据缺失,则会是模型的预测不准确。
(1)过拟合
警告:过拟合发生在相对于训练数据的量和噪声,模型过于复杂的情况。可能的解决方案有:
(2)欠拟合
与过拟合相反,产生的原因是对于训练数据来说,模型过于简单,比如用线性模型预测幸福值,就属于拟合不足,因为实际情况显然比这要复杂的多。
解决方式:
了解一个模型对于新场景的泛化能力的唯一方法就是,让模型真实的取处理新场景。
做法之一是将模型部署到新场景,然后监控它的输出。但这样如果模型效果不好,用和肯定会抱怨,所以这显然不是最好的办法。
更好的选择是将数据分割成两部分:训练集和测试集。顾名思义,训练集用来训练模型,测试集用来测试模型,应对新场景的误差率称为泛化误差。通过测试集来评估模型,就可以得到对这个误差的评估。这个评估可以知道模型在处理新场景的能力如何。 如果训练误差很低(模型对于训练集很少出错),但是泛化误差很高,那说明模型对于训练数据存在过度拟合。
通常采用2/8定律,20%用于测试,80%用于训练。
评估一个模型,可以采用测试集,那么对于多个模型呢?(比如线性模型和多项式模型)
这时候,千万不要用测试集去验证,这样仍然会出现过拟合。正确的做法是交叉验证,通过将训练机分成若干个互补的子集,然后将多个模型,在这些子集的不同组合进行训练,再用剩下的子集进行验证,从而选定最好的模型,最后再用测试集来测试泛化误差。
模型是观察的简化,这个简化是丢弃了那些不大可能泛化到新实例上的多余细节。要确定舍弃什么数据、保留什么数据,必须要做假设。例如,线性模型的假设是数据基本上是线性的,实例和模型直线间的距离只是噪音,可以放心忽略。
1996年,David Wolpert提到,如果没有对数据做出假设,那么就没有理由更偏好于哪个模型,那么想要知道哪个模型最好的方式,就是对所有模型进行评估。但实际上是不可能的,所以需要对数据做出一些合理的假设。
例如,对于简单任务,你可能是用不同程度的正规化评估线性模型,对于复杂问题,你可能要评估几个神经网络模型。