Machine Learning – 框架学习(1)
什么是机器学习
需要进行大量手工调整或需要拥有长串规则才能解决的问题:机器学习算法通常可以简化代码、提高性能。
问题复杂,传统方法难以解决:最好的机器学习方法可以找到解决方案。
环境有波动:机器学习算法可以适应新数据。 自适应性
洞察复杂问题和大量数据。处理大量数据 建立模型分析数据
机器学习系统的类型
是否存在先验数据(人类监督): 监督, 半监督, 非监督, 强化学习
是否可以动态渐进学习:在线学习, 批量学习
是否只是简单地比较新的数据点和已知的数据点,或者在训练数据中进行模式识别,以建立一个预测模型:基于实例学习vs基于模型学习
机器学习系统往往是一个组合的系统:一个先进的垃圾邮件过滤器可以使用神经网络模型动态地进行学习,用垃圾邮件和普通邮件训练.即为: 在线,基于模型,监督学习系统
监督/非监督学习
监督学习: 训练算法的数据包含了答案
重要的监督学习算法有:
K近邻算法
线性回归
逻辑回归
支持向量机(SVM)
决策树和随机森林
神经网络
非监督学习: 训练算法的数据没有答案,标签
一些最重要的非监督学习算法:
聚类
K 均值
层次聚类分析(Hierarchical Cluster Analysis,HCA)
期望最大值
可视化和降维
主成分分析(Principal Component Analysis,PCA)
核主成分分析
局部线性嵌入(Locally-Linear Embedding,LLE)
t-分布邻域嵌入算法(t-distributed Stochastic Neighbor Embedding,t-SNE)
关联性规则学习
Apriori 算法
Eclat 算法
非监督学习的两个重要任务:
1. 发现数据中规律
2. 异常值检测
半监督学习 - 一些算法可以处理部分带标签的训练数据,通常是大量不带标签数据加上小部分带标签数据
多数半监督学习算法是非监督和监督算法的结合。例如,深度信念网络(deep belief networks)是基于被称为互相叠加的受限玻尔兹曼机(restricted Boltzmann machines,RBM)的非监督组件。RBM 是先用非监督方法进行训练,再用监督学习方法进行整个系统微调。
强化学习
强化学习非常不同。学习系统在这里被称为智能体(agent),可以对环境进行观察,选择和执行动作,获得奖励(负奖励是惩罚,见图 1-12)。然后它必须自己学习哪个是最佳方法(称为策略,policy),以得到长久的最大奖励。策略决定了智能体在给定情况下应该采取的行动。
批量和在线学习
另一个用来分类机器学习的准则是,它是否能从导入的数据流进行持续学习。
批量学习 – 也可以看作离线学习
在批量学习中,系统不能进行持续学习:必须用所有可用数据进行训练。这通常会占用大量时间和计算资源,所以一般是线下做的。首先是进行训练,然后部署在生产环境且停止学习,它只是使用已经学到的策略。这称为离线学习。
在线学习 – 持续学习
在在线学习中,是用数据实例持续地进行训练,可以一次一个或一次几个实例(称为小批量)。每个学习步骤都很快且廉价,所以系统可以动态地学习到达的新数据
警告:这个整个过程通常是离线完成的(即,不在部署的系统上),所以在线学习这个名字会让人疑惑。可以把它想成持续学习。
在线学习中的重要参数为: 学习速率
学习速率大, 系统就会快速的适应新数据 也会快速的忘记老数据
学习速率小, 系统就是惰性的, 对新数据不敏感
基于实例 vs 基于模型学习
另一种分类机器学习的方法是判断它们是如何进行归纳推广的
基于实例学习
基于实例学习:系统先用记忆学习案例,然后使用相似度测量推广到新的例子
例子: 记住标记的垃圾邮件, 测量另一份邮件与其的相似度
基于模型学习
基于模型学习: 是建立这些样本的模型,然后使用这个模型进行预测
例子: 线性回归 预测房价
总结一下, 机器学习的基本步骤为:
研究数据
选择模型
用训练数据进行训练(即,学习算法搜寻模型参数值,使代价函数最小)
最后,使用模型对新案例进行预测(这称作推断),但愿这个模型推广效果不差
机器学习的主要挑战
- 训练数据量不足
解决方案: 重视选择模型 – 算法 - 没有代表性的训练数据
解决方案: 数据预处理, 特征工程 — 避免样本偏差 - 低质量数据
解决方案:,如果训练集中的错误、异常值和噪声(错误测量引入的)太多,系统检测出潜在规律的难度就会变大,性能就会降低。花费时间对训练数据进行清理是十分重要的。 - 不相关的特征
解决方案:
特征选择:在所有存在的特征中选取最有用的特征进行训练。
特征提取:组合存在的特征,生成一个更有用的特征(如前面看到的,可以使用降维算法)。
收集新数据创建新特征。
- 过拟合训练数据 - 意思是说,模型在训练数据上表现很好,但是推广效果不好。
解决方案:
简化模型,可以通过选择一个参数更少的模型(比如使用线性模型,而不是高阶多项式模型)、减少训练数据的属性数、或限制一下模型
收集更多的训练数据
减小训练数据的噪声(比如,修改数据错误和去除异常值)- 欠拟合训练数据 – 欠拟合是和过拟合相对的
解决方案:
选择一个更强大的模型,带有更多参数
用更好的特征训练学习算法(特征工程)
减小对模型的限制(比如,减小正则化超参数)
测试和确认
训练集,验证集, 测试集
数据分成两个集合:训练集和测试集。正如它们的名字,用训练集进行训练,用测试集进行测试。对新样本的错误率称作推广错误(或样本外错误),通过模型对测试集的评估,你可以预估这个错误。
用训练集和多个超参数训练多个模型,选择在验证集上有最佳性能的模型和超参数。当你对模型满意时,用测试集再做最后一次测试,以得到推广误差率的预估。
交叉验证:
避免“浪费”过多训练数据在验证集上,通常的办法是使用交叉验证:训练集分成互补的子集,每个模型用不同的子集训练,再用剩下的子集验证。一旦确定模型类型和超参数,最终的模型使用这些超参数和全部的训练集进行训练,用测试集得到推广误差率。
参考文献
[Hands-on Machine Learning with Scikit-Learn and TensorFlow:]: https://github.com/ageron/handson-ml ageron