目录
监督式/无监督式学习
根据训练期间接受的监督数量和监督类型, 可以将机器学习系统分为以下四个主要类别: 监督式学习、 无监督式学习、 半监督式学习和强化学习。
监督式学习
在监督式学习中,所有数据被打了标签或标记。
分类任务是一个典型的监督式学习任务。垃圾邮件过滤器就是个很好的例子:通过大量的电子邮件示例及其所属的类别(垃圾邮件或是常规邮件)进行训练,然后学习如何对新邮件进行分类。
还有典型的任务,是通过预测变量,也就是一组给定的特征(里程、使用年限、品牌等)来预测一个目标数值,例如汽车的价格。这种类型的任务称为回归任务,如下图要训练这样一个系统,需
要提供大量的汽车示例,包括它们的预测变量和标签(也就是它们的价格)
值得注意的是, 一些回归算法也可以用于分类任务, 反之亦然。例如, 逻辑回归就被广泛地用于分类, 因为它可以输出“属于某个给定类别的概率”的值(例如, 20%的概率是垃圾邮件) 。
这里是一些最重要的监督式学习的算法:
- K-近邻算法(k-Nearest Neighbors)
- 线性回归(Linear Regression)
- 逻辑回归(Logistic Regression)
- 支持向量机(Support Vector Machines, SVM)
- 决策树和随机森林(Decision Trees and Random Forests)
- 神经网络(Neural networks)
无监督式学习
顾名思义, 无监督式学习的训练数据都是未经标记的 ,如下图所示。 系统会在没有老师的情况下进行学习。
无监督式学习的未标记训练集
这里有一些最重要的无监督式学习的算法
- 聚类算法
- k-平均算法(k-Means)
- 分层聚类分析(Hierarchical Cluster Analysis, HCA)
- 最大期望算法(Expectation Maximization)
- 可视化和降维
- 主成分分析(PCA)
- 核主成分分析(Kernel PCA)
- 局部线性嵌入(LLE)
- t-分布随机近临嵌入(t-SNE)
- 关联规则学习
- Apriori
- Eclat
例如, 假设你现在拥有大量的自己博客访客的数据。 你想通过一个聚类算法来检测相似访客的分组(见图1-8) 。 你不大可能告诉这个算法每个访客属于哪个分组——希望算法自己去寻找这种关联, 而
无须你的帮助。 比如, 它可能会注意到40%的访客是喜欢漫画的男性, 并且通常在夜晚阅读你的博客, 20%的访客是年轻的科幻爱好者, 通常在周末访问, 等等。 如果你使用的是层次聚类的算法, 它还可以将每组细分为更小的组。 这可能有助于你针对不同的分组来发布博客内容。
聚类
可视化算法:可视化算法也是无监督式学习算法的好例子: 你提供大量复杂的、 未标记的数据, 得到轻松绘制而成的2D或3D的数据呈现作为输出 。 这些算法会尽其所能地保留尽量多的结构(例如,
尝试保持让输入的单独集群在可视化中不会被重叠), 以便于你理解这些数据是怎么组织的, 甚至识别出一些未知的模式。
一个使用t-SNE算法的可视化示例,突显了各种语义簇
降维:与之相关的另一种任务是降维,降维的目的是在不丢失太多信息的前提下简化数据。方法之一是将多个相关特征合并为一个。例如,汽车的里程与其使用年限存在很大的相关性,所以降维算法会将它们合并成一个代表汽车磨损的特征。这个过程叫作特征提取。
异常检测:另一个很重要的无监督式任务是异常检测——例如,检测异常信用卡交易从而防止欺诈,捕捉制造缺陷,或者是在提供数据给一种机器学习算法之前,自动从数据集中移除异常值。系统用正常实例进行
训练, 然后当看到新的实例时, 它就可以判断出这个新实例看上去是正常还是异常。
异常检测
关联规则学习:关联规则学习也是一个常见的无监督式任务,其目的是挖掘大量数据, 发现属性之间的有趣联系。 比如, 假设你开了一家超
市, 在销售日志上运行关联规则之后发现买烧烤酱和薯片的人也倾向于购买牛排。 那么, 你可能会将这几样商品摆放得更近一些。
半监督式学习
有些算法可以处理部分标记的训练数据——通常是大量未标记数据和少量的标记数据, 这称为半监督式学习。
有些照片托管服务(例如Google相册) 就是很好的例子。 一旦你将所有的家庭照片上传到服务器后, 它会自动识别出人物A出现在照片1、 5和11中, 人物B出现在照片2、 5和7中。 这是算法中无监督的
部分(聚类) 。 现在系统需要你做的只是, 告诉它这些人都是谁。 给每个人一个标签[之后, 它就可以给每张照片中的每个人命名, 这对于搜索图片非常重要。
半监督式学习
大多数半监督式学习算法是无监督式和监督式算法的结合。例如深度信念网络(DBN),它基于一种互相堆叠的无监督式组件,这个组件叫作受限玻尔兹曼机(RBM)。受限玻尔兹曼机以无监督的
方式进行训练,然后使用监督式学习对整个系统进行微调。
强化学习
强化学习则是一个非常与众不同的“巨兽”。它的学习系统(在其语境中称为智能体)能够观察环境,做出选择,执行操作,并获得回报(reward),或者是以负面回报的形式获得惩罚,所以
它必须自行学习什么是最好的策略(policy),从而随着时间推移获得最大的回报。策略代表智能体在特定情况下应该选择的操作。
例如, 许多机器人通过强化学习算法来学习如何行走。DeepMind的AlphaGo项目也是一个强化学习的好例子。 2016年3月,AlphaGo在围棋比赛中击败世界冠军李世石而声名鹊起。 通过分析数
百万场比赛, 然后自己跟自己下棋, 它学到了制胜策略。 要注意, 在跟世界冠军对弈的时候, AlphaGo处于关闭学习状态, 它只是应用它所学到的策略而已。
批量学习
在批量学习中,系统无法进行增量学习——即必须使用所有可用数据进行训练。这需要大量时间和计算资源,所以通常情形下,都是离线完成的。离线学习就是先训练系统,然后将其投入生产环境,这
时学习过程停止,它只是将其所学到的应用出来。
如果希望批量学习系统学习新数据(例如新型垃圾邮件),你需要在完整数据集(不仅仅是新数据,还要包括旧数据)的基础上重新训练一个新版本的系统,然后停用旧系统,用新系统取而代之。
幸运的是,整个训练、评估和启动机器学习系统的过程可以很轻易地实现自动化,所以即使是批量学习系统也能够适应变化。只是需要不断地更新数据,并根据需要频繁地训练新版本的系统。
在线学习
这个解决方法比较简单,通常情况下也都能正常工作,只是每次都使用全套数据集进行训练可能需要花上好几个小时,所以,你很有可能会选择每天甚至每周训练一次新系统。
此外, 使用完整数据训练需要耗费大量的计算资源(CPU、 内存空间、 磁盘空间、 磁盘I/O、 网络I/O等) 。 如果你的数据量非常大,并且每天从零开始自动执行训练系统, 那最终你将为此花费大量的金钱。 而假如你面对的是海量数据, 甚至可能无法再应用批量学习算法。
在线学习
在在线学习中, 你可以循序渐进地给系统提供训练数据, 逐步积累学习成果。 这种提供数据的方式可以是单独的, 也可以采用小批量(mini-batches) 的小组数据来进行训练。 每一步学习都很快速并且便宜, 所以系统就可以根据飞速写入的最新数据进行学习
使用在线学习处理超大数据集
- 对于这类系统——需要接收持续的数据流(例如股票价格) 同时对数据流的变化做出快速或自主的反应, 使用在线学习系统是一个非常好的方式。 如果你的计算资源有限, 在线学习系统同样也是一个很好的选择: 新的数据实例一旦经过系统的学习, 就不再需要, 你可以将其丢弃(除非你想要回滚到前一个状态, 再“重新学习”数据) , 这可以节省大量的空间。
- 对于超大数据集——超出一台计算机的主存储器的数据, 在线学习算法也同样适用(这称为核外学习) 。 算法每次只加载部分数据,并针对这部分数据进行训练, 然后不断重复这个过程, 直到完成所有数据的训练 。整个过程通常是离线完成的(也就是不在live系统上),因此在线学习这个名字很容易让人产生误解。我们可以将其视为增量学习
在线学习系统的一个重要参数是其适应不断变化的数据的速度,这就是所谓的学习率。如果设置的学习率很高,那么系统将会迅速适应新数据,但同时也会很快忘记旧数据(你肯定不希望垃圾邮件过滤器只对最新显示的邮件进行标记)。反过来,如果学习率很低,系统会有更高的惰性,也就是说,学习会更缓慢,同时也会对新数据中的噪声或者非典型数据点的序列更不敏感。
在线学习面临的一个重大挑战是,如果给系统输入不良数据,系统的性能将会逐渐下降。现在某些实时系统的客户说不定已经注意到了这个现象。不良数据的来源可能是,例如,机器上发生故障的传感器,或者是有人对搜索引擎恶意刷屏以提高搜索结果排名等。为了降低这种风险,你需要密切监控你的系统,一旦检测到性能下降,要及时中断学习(可能还需要恢复到之前的工作状态)。当然,同时你还需要监控输入数据, 并对异常数据做出响应(例如, 使用异常检测算法) 。
参考:《基于Scilt-Learn和TensorFlow》
转载:https://blog.csdn.net/A496608119/article/details/115749446