机器学习速成课程 笔记
监督式机器学习:
机器学习系统通过学习如何组合输入信息来对从未见过的数据做出有用的预测。
1 术语:
- 标签:要预测的目标,简单线性回归中的 y 变量
- 特征:输入变量,简单线性回归中的 x 变量
-
样本:数据的特定实例,是一个矢量
- 有标签样本:同时包含特征和标签,用于训练模型
- 无标签样本:包含特征,不包含标签,用于对新数据做出预测
有标签数据集中的每个样本都包含一个或多个特征以及一个标签。
-
模型:特征与标签之间的关系
- 两个阶段:
- 训练:向模型展示有标签样本,让模型逐渐学习特征与标签之间的关系
- 推断:将训练后的模型应用于无标签样本
- 两种类型:
- 回归模型:预测连续值
- 分类模型:预测离散值
- 两个阶段:
- 实例:要对其进行预测的事物。
- 特征:预测任务中使用的实例的属性。
- 特征列:一组相关特征,样本的特征列中可能包含一个或多个特征。
- 管道:机器学习算法的基础架构。管道包括从前端收集数据、将数据放入训练数据文件、训练一个或多个模型以及将模型运用到生产环境。
2 线性回归(Linear Regressor)
“模型”部分将一个或多个特征作为输入,然后返回一个预测 () 作为输出。
一个特征并返回一个预测的模型方程式:
- 指的是预测标签(理想输出值)。
- 指的是偏差(y 轴截距)。而在一些机器学习文档中,它称为 。
- 指的是特征 1 的权重。
- 指的是特征(已知输入项)。
下标(例如 和 )预示着可以用多个特征来表示更复杂的模型。例如,具有三个特征的模型可以采用以下方程式:
3 训练与损失
- 训练模型表示通过有标签样本来学习(确定)所有权重和偏差的理想值。
- 在监督式学习中,机器学习算法通过以下方式构建模型:检查多个样本并尝试找出可最大限度地减少损失的模型;这一过程称为经验风险最小化。
- 损失是一个数值,表示对于单个样本而言模型预测的准确程度。训练模型的目标是从所有样本中找到一组平均损失“较小”的权重和偏差。
- 平方损失( L2 损失):一种常见的损失函数
- 均方误差 (MSE) 指的是每个样本的平均平方损失。
4 降低损失(Reducing Loss)
4.1 迭代方法
机器学习算法用于训练模型的迭代试错过程:
迭代策略在机器学习中的应用非常普遍,这主要是因为它们可以很好地扩展到大型数据集。
4.2 梯度下降法
梯度下降法的第一个阶段是为 选择一个起始值(起点)。起点并不重要;因此很多算法就直接将 设为 0 或随机选择一个值。
然后,梯度下降法算法会计算损失曲线在起点处的梯度。
梯度是偏导数的矢量,具有方向和大小。梯度始终指向损失函数中增长最为迅猛的方向。
梯度下降法会沿着负梯度的方向走一步,以便尽快降低损失。
为了确定损失函数曲线上的下一个点,梯度下降法算法会将梯度大小的一部分与起点相加,如下图所示:
然后,梯度下降法会重复此过程,逐渐接近最低点。
4.3 学习速率
梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。
例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。
超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率。学习速率就是一种超参数。如果您选择的学习速率过小,就会花费太长的学习时间:
相反,如果您指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳,
每个回归问题都存在一个最佳的学习速率。“最佳学习速率”值与损失函数的平坦程度相关。如果您知道损失函数的梯度较小,则可以放心地试着采用更大的学习速率,以补偿较小的梯度并获得更大的步长。
4.4 随机梯度下降法
在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。
包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。
通过从我们的数据集中随机选择样本,我们可以通过小得多的数据集估算(尽管过程非常杂乱)出较大的平均值。 随机梯度下降法 (SGD) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。
小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。
5 TensorFlow
5.1 TensorFlow 工具包的当前层次结构:
TensorFlow 由以下两个组件组成:
- 图协议缓冲区
- 执行(分布式)图的运行时
TensorFlow的所有文件格式都基于 Protocol Buffers(协议缓冲区),简称为 protobufs 。
summary 是在text文件中定义的数据结构,然后 protobuf 工具在 C,Python 语言中生成一些类,用来加载、保存、访问数据。
5.2 tf.estimator API
tf.estimator 与 scikit-learn API 兼容。 scikit-learn 是极其热门的 Python 开放源代码机器学习库。
在 tf.estimator 中实现的线性回归程序的格式:
import tensorflow as tf
# Set up a linear classifier.
classifier = tf.estimator.LinearClassifier()
# Train the model on some example data.
classifier.train(input_fn=train_input_fn, steps=2000)
# Use it to predict.
predictions = classifier.predict(input_fn=predict_input_fn)
5.3 使用TensorFlow编程
常用超参数:
- steps:是指训练迭代的总次数。一步计算一批样本产生的损失,然后使用该值修改模型的权重一次。
- batch size:是指单步的样本数量(随机选择)。例如,SGD 的批量大小为 1。
方便变量:
- periods:控制报告的粒度。例如,如果 periods 设为 7 且 steps 设为 70,则练习将每 10 步(或 7 次)输出一次损失值。与超参数不同,我们不希望您修改 periods 的值。请注意,修改 periods 不会更改您的模型所学习的内容。
6 泛化(Generalization)
过拟合模型在训练过程中产生的损失很低,但在预测新数据方面的表现却非常糟糕。
过拟合是由于模型的复杂程度超出所需程度而造成的。
机器学习的基本冲突是适当拟合我们的数据,但也要尽可能简单地拟合数据。
机器学习模型旨在根据以前未见过的新数据做出良好预测。要获得以前未见过的数据,一种方法是将数据集分成两个子集:
- 训练集 - 用于训练模型的子集。
- 测试集 - 用于测试模型的子集。
以下三项基本假设阐明了泛化:
- 我们从分布中随机抽取独立同分布 (i.i.d) 的样本。换言之,样本之间不会互相影响。(另一种解释:i.i.d. 是表示变量随机性的一种方式)。
- 分布是平稳的;即分布在数据集内不会发生变化。
- 我们从同一分布的数据划分中抽取样本。
7 训练集和测试集(Training and Test Sets)
确保您的测试集满足以下两个条件:
- 规模足够大,可产生具有统计意义的结果。
- 能代表整个数据集。换言之,挑选的测试集的特征应该与训练集的特征相同。
注:请勿对测试数据进行训练。
如果您的评估指标取得了意外的好结果,则可能表明您不小心对测试集进行了训练。例如,高准确率可能表明测试数据泄露到了训练集。
8 验证 (Validation)
通过将数据集划分为三个子集:训练集、验证集、测试集,可以大幅降低过拟合的发生几率,使用验证集评估训练集的效果。然后,在模型“通过”验证集之后,使用测试集再次检查评估结果。工作流程图如下:
在这一经过改进的工作流程中:
- 选择在验证集上获得最佳效果的模型。
- 使用测试集再次检查该模型。
9 表示 (Representation)
9.1 特征工程
将原始数据映射到特征
上一篇: 分类模型与算法--决策树
下一篇: R分类算法-决策树算法
推荐阅读
-
机器学习速成课程 笔记
-
机器学习速成课程 | 练习 | Google Development——编程练习:特征集
-
机器学习速成课程 | 练习 | Google Development——编程练习:(TensorFlow) Hello World
-
机器学习速成课程 | 练习 | Google Development——编程练习:使用 TensorFlow 的起始步骤
-
机器学习速成课程 | 练习 | Google Development——编程练习:特征组合
-
机器学习笔记(6)-逻辑回归与最大熵模型
-
【机器学习笔记】——逻辑回归 & 交叉熵
-
机器学习笔记之三: 熵
-
《机器学习实战》详细读书笔记...决策树算法
-
机器学习六(决策树ID3算法原理和实现——西瓜书学习笔记)