机器学习是一门能够让编程计算机从数据中学习的计算机科学(或艺术)。
机器学习系统的种类:
- 监督式学习、无监督式学习、半监督式学习和强化学习
- 在线学习和批量学习
- 基于实例的学习和基于模型的学习
最重要的监督式学习的算法:
- 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
- 半监督学习:通常是大量未标记数据和少量的标记数据。
- 强化学习:它的学习系统(在其语境中称为智能体)能够观察环境,做出选择,执行操作,并获得回报(reward),或者是以负面回报的形式获得惩罚。必须自行学习什么是最好的策略,从而随着时间的推移获得最大的回报。
- 批量学习:在批量学习中,系统无法进行增量学习——即必须使用所有可用数据进行训练。如果希望批量学习系统学习新数据,需要在完整数据集(不仅仅是新数据,还要包裹旧数据)的基础上重新训练一个新版本的系统,然后停用旧版本,用新系统取而代之。
- 在线学习:循序渐进第给系统提供训练数据,逐步积累学习成果。这种提供数据的方式可以是单独的,也可以采用小批量(mini-batches)的小组数据来进行训练。整个过程通常是离线完成的,在线学习很容易让人产生误解,可以将其视为增量学习。
泛化的主要方法有两种:基于实例的学习和基于模型的学习。
- 基于实例的学习:系统先完全记住学习示例,然后通过某种相似度度量方式将其泛化到新的实例。
- 基于模型的学习:从一组示例集中实现泛化的另一种方法是构建这种示例的模型,然后使用该模型进行预测。
典型的机器学习项目过程:
- 学习数据
- 选择模型
- 使用训练数据进行训练(即前面学习算法搜索模型参数值,从而使损失函数最小化的过程)
- 应用模型对新示例进行预测(称为推断),祈祷模型的泛化结果不错。
为了很好地实现泛化,至关重要的一点,对于将要泛化的新示例来说,训练数据一定要非常有代表性。
一个成功的机器学习项目,关键部分是提取出一组好的用来训练的特征及,这个过程叫做特征工程。
- 特征选择:从现有特征中选择最有用的特征进行训练。
- 特征提取:将现有特征进行整合,产生更有用的特征(正如前文提到的,将为算法可以提供帮助)。
- 通过收集新数据创造新特征。
当模型相对于训练数据的熟练个噪声都过于复杂时,会产生过拟合。可能的解决方案如下:
- 简化模型:可以选择较少参数的模型(例如,选择线性模型而不是高阶多项式模型),可以减少训练数据中的属性数量,又或者是约束模型。
- 收集更多的训练数据。
- 减少训练数据中的噪声(例如,修复数据错误和消除异常值)。
通过约束模型使其更简单,并降低过拟合的风险,成为正则化。
在学习时,应用正则化的程度可以通过一个超参数来控制。超参数是学习算法(不是模型)的参数,因此,本身不受算法的影响,必须在训练之前设置好,并在训练模型期间保持不变。
欠拟合与过拟合相反,对于下层的数据结构,可能设置的模型太过简单。解决这个问题的主要方式有:
- 选择一个带有更多参数、更强大的模型。
- 给学习算法提供更好的特征及(特征工程)。
- 减少模型中的约数(例如,减少正则化超参数)。
练习
1.如何定义机器学习?
- 机器学习是一门能够让编程计算机从数据中学习的计算机科学。
2.机器学习在哪些问题上表现突出?是否能提出四种类型?
机器学习非常利于:
- 不存在已知算法解决方案的复杂问题;
- 需要大量手动调整或是规则列表超长的问题;
- 创建可以适应环境波动的系统;
- 帮助人类学习(例如数据挖掘)。
3.什么是被标记的训练数据集?
- 被标记的训练集是指包含每个实例所期望的解决方案的训练集。
4.最常见的两种监督式学习任务是什么?
- 回归和分类。
5.举出四种常见的无监督式学习任务。
- 聚类、可视化、降维和关联规则学习。
6.要让一个机器人在各种未知的地形中行走,会使用什么类型的机器学习算法?
- 强化学习可能更适合复杂的一系列机器学习人类的行走动作。
7.要将顾客分成多个组,会使用什么类型的算法?
- 不知道分组的情况下,选择聚类算法;
- 知道具体的群组,选择分类算法。
8.垃圾邮件检测的问题是监督式学习还是无监督式学习?
- 典型的监督式学习问题:将邮件和它们的标签(垃圾邮件或非垃圾邮件)一起提供给算法。
9.什么是在线学习系统?
- 在线学习系统可以进行增量学习,与批量学习系统正好相反。使得它能够快速适应不断变化的数据和自动化系统,并且能够在大量的数据上进行训练。
10.什么是核外学习?
- 核外算法可以处理计算机主内存无法应对的大量数据。它将数据分割成小批量,然后使用在线学习计数从这些小批量中学习。
11.什么类型的学习算法依赖相似度来做出检测?
- 基于实例的学习系统。
12.模型参数与学习算法的超参数之间有什么区别?
- 模型有一个或多个参数,这些参数决定了模型对新的给定实例做出怎样的预测(例如,线性模型的斜率)。学习算法试图找到这些参数的最佳值,使得该模型能够很好地泛化至新实例。
- 超参数是学习算法本身的参数,不是模型的参数(例如,正则化参数)
13.基于模型的学习算法搜索的是什么?最常使用的策略是什么?它们如何做出预测?
- 基于模型的学习算法搜索使模型泛化最佳的模型参数值。
- 通常通过使损失函数最小化来训练这样的系统,损失函数衡量的是系统对训练数据的预测有多坏。
- 学习算法最后找到的参数值就是最终得到的预测函数,只需将实例提供给这个预测函数即可进行预测。
14.机器学习的四个主要挑战?
- 数据缺乏;
- 数据质量差;
- 数据不具有代表性;
- 特征不具信息量;
- 模型过于简单对训练数据欠拟合;
- 模型过于复杂对训练数据过拟合。
15.如果你的模型在训练数据上表现很好,但是应用在新的实例上的泛化结果却不好,是怎么回事?能提出三种可能的结局方案么?
- 过度拟合训练数据(在训练数据上运气太好)。可能的解决方案有:获取更多数据;简化模型(选择更简单的算法、减少使用的参数或特征数量、对模型进行正则化);减少训练数据中的噪声。
16.什么是测试集,为什么要使用测试集?
- 在模型启动至生产环境之前,使用测试集来估算模型在新实例上的泛化误差。
17.验证集的目的是什么?
- 验证集用来比较不同模型,可用来选择最佳模型和调整超参数。
18.如果使用测试集调整超参数会出现什么问题?
- 有过拟合的风险,最后测量的泛化误差过于乐观,导致最后的模型性能低于预期。
19.什么是交叉验证?为什么比验证集更好?
- 通过交叉验证计数,可以不需要单独的验证集实现模型比较(用于模型选择和调整超参数),节省了宝贵的训练数据。