1 机器学习概览
1.什么是机器学习
机器学习是通过编程让计算机从数据中进行学习的科学(和艺术)。
机器学习是让计算机具有学习的能力,无需进行明确编程。(亚瑟·萨缪尔,1959)
计算机程序利用经验E学习任务T,性能是P,如果针对任务T的性能P随着经验E不断增长,则称为机器学习(汤姆·米切尔,1997)
2.为什么要进行机器学习
- 需要进行大量手工调整或者需要拥有长串规则才能解决的问题:机器学习算法通常可以简化代码、提高性能。
- 问题复杂,传统方法难以解决:最好的机器学习方法可以找到解决方案。
- 使用机器学习方法挖掘大量数据,可以发现并不显著的规律。(这称作数据挖掘。)
- 环境有波动时,机器学习算法可以适应新数据。
3.机器学习系统的类型
一、按是否在人类监督下进行训练分为:
- 监督学习
- 训练集中含有标签(即答案)
- 包括分类和回归
- 重要的监督学习算法有:k近邻算法、线性回归、逻辑回归、支持向量机(SVM)、决策树和随机森林、神经网络
- 非监督学习
- 训练集中没有标签
- 重要的非监督学习任务(算法):
- 聚类:K均值算法、层次聚类分析(HCA)、最大期望算法
- 可视化和降维:主成分分析(PCA)、核主成分分析(Kernel-PCA)、局部线性嵌入(LLE)、t-分布邻域嵌入算法(t-SNE)
- 关联性规则学习:Apriori算法、Eclat算法
- 异常值检测
- 半监督学习
- 非监督算法和监督算法的结合
- 深度信念网络(DBN)
- 受限玻尔兹曼机(RBM)
- 强化学习
- 强化学习非常不同。学习系统在这里被称为智能体(agent),可以对环境进行观察,选择和执行动作,获得奖励(负奖励是惩罚)。然后它必须自己学习哪个是最佳策略(policy),以得到长久的最大奖励。
二、按是否可以动态地进行增量学习(是否能从导入的数据流中持续进行学习):
- 批量学习(离线学习)
- 不能进行持续学习:必须使用所有可用数据进行训练
- 优点:简单、易于实现
- 缺点:需要大量计算资源
- 在线学习(增量学习)
- 用数据实例持续的进行训练,每个学习步骤很快并且廉价,所以系统可用动态的学习到达新的数据。
- 优点:可以节省大量的空间
- 挑战:如果坏数据被用于训练,系统的性能就会下降。(异常值检测)
三、根据是简单地将新的数据点和已知的数据点进行匹配还是像科学家那样对训练数据进行模式检测,然后建立一个数据模型:
- 基于实例的学习(死记硬背)
- 系统先用记忆学习案例,然后使用相似度测量推广到新的例子
- 基于模型学习
- 从样本集中进行归纳,建立模型,然后用模型进行预测
4.机器学习项目工作流程
- 研究数据
- 选择模型
- 用训练数据进行训练(即,学习算法搜寻模型参数值,使代价函数最小)
- 最后,使用模型对新案例进行预测(推断)
5.机器学习的主要挑战
不好的数据
对复杂问题而言,数据比算法更重要。不过需要指出的是,中小型数据及依然非常普遍,获得额外的训练数据并不是总是一件轻而易举或者物美价廉的事情,所以暂时先不要抛弃算法。
1 训练数据量不足
2 没有代表性的训练数据(样本偏差、异常值、采样偏差)
3 低质量数据(错误、缺失、异常值以及噪声太多)
- 所以花时间对训练数据进行清洗是十分重要的
- 如果某些实例明显是异常情况:
- 要么直接将其丢弃
- 要么尝试手动修复错误
- 如果某些实例缺少部分特征(比如,5%的顾客没有指定年龄):
- 整体忽略这些特征
- 忽略这部分有缺失的实例
- 将缺失的值补充完整
- 训练一个带这个特征的模型,在训练一个不带这个调整模型
4 不相关的特征
- 机器学习项目成功的关键之一就是用好的特征进行训练。这个过程叫做特征工程。
- 特征工程:
- 特征选择
- 特征提取
- 收集新数据创建新特征
不好的算法
1 过拟合训练数据
- 模型在训练数据上表现很好,但是在实际推广中效果不好。
- 原因:
- 数据集太小,噪声太多
- 特征太多
- 解决办法:
- 简化模型,可以通过选择一个参数更少的模型(比如使用线性模型,而不是高阶多项式模型)、减少训练数据的属性数(特征量)(特征=属性+值)、或者限制一下模型
- 收集更多的训练数据
- 减少训练数据的噪声(比如,修改错误数据和去除异常值)
- 正则化:避免过拟合而采用的一种使拟合误差尽量小,模型也尽量简单的技术(限定参数的取值范围)。正则化的度可以用一个超参数控制。(0,1范数的正则化可以带来稀疏解)
2 欠拟合训练数据
- 原因:模型过于简单,而现实要比这个模型复杂,所以导致预测很难准确,即使在训练样本上也很难准确。
- 解决办法:
- 选择一个更强大的模型,带有更多的参数
- 给学习算法提供更好的特征集(特征工程)
- 减少对模型的约束(比如,减少正则化超参数)
6 测试与验证
训练集和测试集
将数据集分割成两部分:训练集和测试集。(一般用80%的数据训练,保留20%用于测试)用训练集的数据来训练模型,然后测试集的数据来测试模型。
应对新场景的误差率,称为泛化误差。如果训练误差很低,但是泛化误差很高,那说明你的模型对于训练数据存在过拟合现象。
如果在两个模型之间犹豫不决,就两个都训练,然后对比他们对测试数据的泛化能力。
怎么样选择正则化超参数的值?
再单独分出来一个集合,称作验证集。
在训练集上,使用不同的超参数训练多个模型,然后通过验证集,选择最好的那个模型和对应的超参数,当你对模型基本满意之后,再使用测试集运行最后一轮测试并得到泛化误差的估值。
为了避免验证集浪费太多的训练数据,常见的技术是使用交叉验证。
没有免费午餐定理:如果你对数据没有任何假设,那么你没有理由会偏好于某个模型。
691

被折叠的 条评论
为什么被折叠?



