美文网首页
一、机器学习概览

一、机器学习概览

作者: 全村的卡密 | 来源:发表于2019-07-24 14:32 被阅读0次

机器学习


机器学习系统的类型

机器学习有多种类型,可以根据如下规则进行分类:

  • 是否在人类监督下进行训练(supervised, unsuper‐vised, semisupervised, and Reinforcement Learning)
  • 是否可以动态渐进学习 (online versus batchlearning(批量学习))
  • 它们是否只是通过简单地比较新的数据点和已知的数据点,还是在训练数据中进行模式识别,以建立一个预测模型,就像科学家所做的那样(基于实例学习vs 基于模型学习 (instance-based versus model-based learning)
    规则并不仅限于以上的,你可以将他们进行组合。例如,一个先进的垃圾邮件过滤器可以使用神经网络模型动态进行学习,用垃圾邮件和普通邮件进行训练。这就让它成了一个在线、基于模型、监督学习系统。

attribute(属性): is a data type,如,里程。
feature(特征): 通常是属性加上它的值,如,里程='15000'

监督学习:
在监督学习中,用来训练算法的训练数据包含了答案,称为标签
Here are some of the most important supervised learning:algorithms (covered in thisbook):
•k-Nearest Neighbors (K近邻算法)
•Linear Regression(线性回归)
•Logistic Regression (逻辑回归)
•Support Vector Machines (SVMs) (支持向量机)
•Decision Trees and Random Forests (决策树和随机森林)
•Neural networks (神经网络)

非监督学习
在非监督学习中,训练数据是没有加标签的。

下面是一些最重要的非监督学习算法(我们会在第 8 章介绍降维):

  • 聚类(Clustering)
    K 均值(k-Means)
    层次聚类分析(Hierarchical Cluster Analysis,HCA)
    期望最大值(Expectation Maximization)

  • 可视化和降维(Visualization and dimensionality reduction)
    主成分分析(Principal Component Analysis,PCA)
    核主成分分析(Kernel PCA)
    局部线性嵌入(Locally-Linear Embedding,LLE)
    t-分布邻域嵌入算法(t-distributed Stochastic Neighbor Embedding,t-SNE)

  • 关联性规则学习(Association rule learning)
    Apriori 算法
    Eclat 算法


降维(dimensionality reduction):降维的目的是简化数据、但是不能失去大部分信息。做法之一是合并若干相关的特征。例如,汽车的里程数与车龄高度相关,降维算法就会将它们合并成一个,表示汽车的磨损。这叫做特征提取。

提示:在用训练集训练机器学习算法(比如监督学习算法)时,最好对训练集进行降维。这样可以运行的更快,占用的硬盘和内存空间更少,有些情况下性能也更好。

你想运行一个聚类算法,检测相似访客的分组
可视化算法也是极佳的非监督学习案例
另一个重要的非监督任务是异常检测(anomaly detection) —— 例如,检测异常的信用卡转账以防欺诈,检测制造缺陷,或者在训练之前自动从训练数据集去除异常值。异常检测的系统使用正常值训练的,当它碰到一个新实例,它可以判断这个新实例是像正常值还是异常值
另一个常见的非监督任务是关联规则学习,它的目标是挖掘大量数据以发现属性间有趣的关系。例如,假设你拥有一个超市。在销售日志上运行关联规则,可能发现买了烧烤酱和薯片的人也会买牛排。因此,你可以将这些商品放在一起。

半监督学习
一些算法可以处理部分带标签的训练数据,通常是大量不带标签数据加上小部分带标签数据。这称作半监督学习。
多数半监督学习算法是非监督和监督算法的结合。例如,深度信念网络(deep belief networks)是基于被称为互相叠加的受限玻尔兹曼机(restricted Boltzmann machines,RBM)的非监督组件。RBM 是先用非监督方法进行训练,再用监督学习方法对整个系统进行微调。

强化学习
强化学习非常不同。学习系统在这里被称为智能体(agent),可以对环境进行观察、选择和执行动作,并获得奖励作为回报(负奖励是惩罚)。然后它必须自己学习哪个是最佳方法(称为策略,policy),以得到长久的最大奖励。策略决定了智能体在给定情况下应该采取的行动。

批量学习
在批量学习中,系统不能进行持续学习:必须用所有可用数据进行训练。这通常会占用大量时间和计算资源,所以一般是线下做的。首先是进行训练,然后部署在生产环境且停止学习,它只是使用已经学到的策略。这称为离线学习。
如果你想让一个批量学习系统明白新数据(例如垃圾邮件的新类型),就需要从头训练一个系统的新版本,使用全部数据集(不仅有新数据也有老数据),然后停掉老系统,换上新系统。
幸运的是,训练、评估、部署一套机器学习的系统的整个过程可以自动进行(见图 1-3),所以即便是批量学习也可以适应改变。只要有需要,就可以方便地更新数据、训练一个新版本。
这个方法很简单,通常可以满足需求,但是用全部数据集进行训练会花费大量时间,所以一般是每 24 小时或每周训练一个新系统。如果系统需要快速适应变化的数据(比如,预测股价变化),就需要一个响应更及时的方案。
另外,用全部数据训练需要大量计算资源(CPU、内存空间、磁盘空间、磁盘 I/O、网络 I/O 等等)。如果你有大量数据,并让系统每天自动从头开始训练,就会开销很大。如果数据量巨大,甚至无法使用批量学习算法。
最后,如果你的系统需要自动学习,但是资源有限(比如,一台智能手机或火星车),携带大量训练数据、每天花费数小时的大量资源进行训练是不实际的。
幸运的是,对于上面这些情况,还有一个更佳的方案可以进行持续学习

在线学习
在在线学习中,是用数据实例持续地进行训练,可以一次一个或一次几个实例(称为小批量)。每个学习步骤都很快且廉价,所以系统可以动态地学习收到的最新数据.
在线学习很适合系统接收连续流的数据(比如,股票价格),且需要自动对改变作出调整。如果计算资源有限,在线学习是一个不错的方案:一旦在线学习系统学习了新的数据实例,它就不再需要这些数据了,所以扔掉这些数据(除非你想滚回到之前的一个状态,再次使用数据)。这样可以节省大量的空间。

在线学习算法也适用于在超大数据集(一台计算机不足以用于存储它)上训练系统(这称作核外学习,out-of-core learning)。算法每次只加载部分数据,用这些数据进行训练,然后重复这个过程,直到使用完所有数据(见图 1-14)。

在线学习系统的一个重要参数是,它们可以多快地适应数据的改变:这被称为学习速率。如果你设定一个高学习速率,系统就可以快速适应新数据,但是也会快速忘记老数据(你可不想让垃圾邮件过滤器只标记最新的垃圾邮件种类)。相反的,如果你设定的学习速率低,系统的惰性就会强:即,它学的更慢,但对新数据中的噪声或没有代表性的数据点结果不那么敏感。

在线学习的挑战之一是,如果坏数据被用来进行训练,系统的性能就会逐渐下滑。如果这是一个部署的系统,用户就会注意到。例如,坏数据可能来自失灵的传感器或机器人,或某人向搜索引擎传入垃圾信息以提高搜索排名。要减小这种风险,你需要密集监测,如果检测到性能下降,要快速关闭(或是滚回到一个之前的状态)。你可能还要监测输入数据,对反常数据做出反应(比如,使用异常检测算法)。

实例学习
也许最简单的学习形式就是用记忆学习。如果用这种方法做一个垃圾邮件检测器,只需标记所有和用户标记的垃圾邮件相同的邮件。

模型学习
另一种从样本集进行归纳的方法是建立这些样本的模型,然后使用这个模型进行预测。


总结一下:
研究数据
选择模型
用训练数据进行训练(即,学习算法搜寻模型参数值,使代价函数最小)
最后,使用模型对新案例进行预测(这称作推断),但愿这个模型推广效果不差

机器学习的主要挑战

简而言之,因为你的主要任务是选择一个学习算法并用一些数据进行训练,会导致错误的两件事就是“错误的算法”和“错误的数据”。

错误的数据

  • 训练数据量不足
    在一篇 2001 年发表的著名论文中,微软研究员 Michele Banko 和 Eric Brill 展示了不同的机器学习算法,包括非常简单的算法,一旦有了大量数据进行训练,在进行去除语言歧义的测试中几乎有相同的性能

  • 没有代表性的训练数据
    如果样本太小,就会有样本噪声(即,会有一定概率包含没有代表性的数据),但是即使是非常大的样本也可能没有代表性,如果取样方法错误的话。这叫做样本偏差。

  • 低质量数据
    很明显,如果训练集中的错误、异常值和噪声(错误测量引入的)太多,系统检测出潜在规律的难度就会变大,性能就会降低。花费时间对训练数据进行清理是十分重要的。事实上,大多数据科学家的一大部分时间是做清洗工作的。例如:
    如果一些实例是明显的异常值,最好删掉它们或尝试手工修改错误;
    如果一些实例缺少特征(比如,你的5%的顾客没有说明年龄),你必须决定是否忽略这个属性、忽略这些实例、填入缺失值(比如,年龄中位数),或者训练一个含有这个特征的模型和一个不含有这个特征的模型,等等。

  • 不相关的特征

  • 俗语说:如果进来的是垃圾,那么出去的也是垃圾。你的系统只有在训练数据包含足够相关特征、非相关特征不多的情况下,才能进行学习。机器学习项目成功的关键之一是用好的特征进行训练。这个过程称作特征工程,包括:
    特征选择:在所有存在的特征中选取最有用的特征进行训练。
    特征提取:组合存在的特征,生成一个更有用的特征(如前面看到的,可以使用降维算法)。
    收集新数据创建新特征。

算法出错

(overfitting)拟合训练数据:

  • 过拟合:意思是说,模型在训练数据上表现很好,但是推广效果不好。
    • 过拟合发生在相对于训练数据的量和噪声,模型过于复杂的情况。可能的解决方案有
    • 简化模型,可以通过选择一个参数更少的模型(比如使用线性模型,而不是高阶多项式模型)、减少训练数据的属性数、或限制一下模型
      收集更多的训练数据
    • 减小训练数据的噪声(比如,修改数据错误和去除异常值)

限定一个模型以让它更简单并且降低过拟合的风险被称作正则化(regularization)。

(Underfitting)欠拟合训练数据
欠拟合是和过拟合相对的:当你的模型过于简单时就会发生。例如,生活满意度的线性模型倾向于欠拟合;现实要比这个模型复杂的多,所以预测很难准确,即使在训练样本上也很难准确。

解决这个问题的选项包括:

  • 选择一个更强大的模型,带有更多参数 -
  • 用更好的特征训练学习算法(特征工程)
  • 减小对模型的限制(比如,减小正则化超参数)

回顾

机器学习是让机器通过学习数据对某些任务做得更好,而不使用确定的代码规则。
有许多不同类型的机器学习系统:监督或非监督,批量或在线,基于实例或基于模型,等等。
在机器学习项目中,我们从训练集中收集数据,然后对学习算法进行训练。如果算法是基于模型的,就调节一些参数,让模型拟合到训练集(即,对训练集本身作出好的预测),然后希望它对新样本也能有好预测。如果算法是基于实例的,就是用记忆学习样本,然后用相似度推广到新实例。
如果训练集太小、数据没有代表性、含有噪声、或掺有不相关的特征(垃圾进,垃圾出),系统的性能不会好。最后,模型不能太简单(会发生欠拟合)或太复杂(会发生过拟合)。

测试和验证
将你的数据分成两个集合:训练集和测试集。正如它们的名字,用训练集进行训练,用测试集进行测试。对新样本的错误率称作推广错误(或样本外错误),通过模型对测试集的评估,你可以预估这个错误。这个值可以告诉你,你的模型对新样本的性能。

如果训练错误率低(即,你的模型在训练集上错误不多),但是推广错误率高,意味着模型对训练数据过拟合。

将你的数据分成两个集合:训练集和测试集。 and by evaluating your model on the test set, you get an estimation of this error.
如果训练错误率低(即,你的模型在训练集上错误不多),但是推广错误率高,意味着模型对训练数据过拟合。

超参与参数的区别:
https://blog.csdn.net/weixin_43061687/article/details/82711430

第一章问答: https://blog.csdn.net/weixin_34399060/article/details/88022567
建议看英文,翻译不太好。

相关文章

网友评论

      本文标题:一、机器学习概览

      本文链接:https://www.haomeiwen.com/subject/icyxrctx.html