机器学习基础概念学习

310 阅读8分钟

参考

术语

标签

标签是我们要预测的事物,即简单线性回归中的 yy 变量。标签可以是小麦未来的价格、图片中显示的动物品种、音频剪辑的含义或任何事物。

特征

特征是输入变量,即简单线性回归中的 xx 变量。简单的机器学习项目可能会使用单个特征,而比较复杂的机器学习项目可能会使用数百万个特征,按如下方式指定: x1,x2,...,xNx_1, x_2, ..., x_N

在垃圾邮件检测器示例中,特征可能包括:

  • 电子邮件文本中的字词
  • 发件人的地址
  • 发送电子邮件的时段
  • 电子邮件中包含“一种奇怪的把戏”这样的短语。

样本

样本是指数据的特定实例:xx(是一个矢量)。我们将样本分为以下两类:

  • 有标签样本
  • 无标签样本 有标签样本同时包含特征和标签。即:
labeled examples: {features, label}: (x, y)

例如,下表显示了从包含加利福尼亚州房价信息的数据集中抽取的3个有标签样本:

housingMedianAge
(特征)
totalRooms
(特征)
totalBedrooms
(特征)
mediaHouseValue
(标签)
155612128366900
197650190180100
1772017485700

无标签样本包含特征,但不包含标签。即:

unlabeled examples: {features, ?}: (x, ?)

模型

模型定义了特征与标签之前的关系。

  • 训练是指创建或学习模型:向模型展示有标签的样本,让模型逐渐学习特征与标签之间的关系
  • 推断是指将训练后的模型应用于无标签的样本:使用经过训练的模型,做出有用的预测(y˙\dot y

回归与分类

  • 回归模型可预测连续值:
    • 上海一栋房产价值多少
    • 用户点击此广告的概率多少
  • 分类模型可预测离散值:
    • 判断邮件是不是垃圾邮件
    • 判断一张照片是狗还是猫

监督学习(Supervised Learning)

已知输入为XX,输出为YY的标注训练集,通过学习训练集,得到一种映射模型。即监督学习中训练数据既有特征(feature)又有标签(label)。

无监督学习(Unsupervised Learning)

不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型得到数据之间的关系。更像是自学,没有标签(label)

训练集和测试集

  • 训练集:用于训练模型的子集
  • 测试集:用于测试训练后模型的子集
训练集 测试集

确保测试集满足以下两个条件:

  • 规模足够大:可产生具有统计意义的结果
  • 能够代表整个数据集:挑选的测试集的特征应该与训练集的特征相同

训练过程可视化如下:

工作流程:

验证集

将数据集划分为三个子集(增加验证集),可大幅降低过拟合发生的几率:

训练集 验证集 测试集

工作流程如下:

  • 使用训练集训练模型
  • 使用验证集评估模型
  • 使用测试集检查评估结果

该流程之所以更好,原因在于它暴露给测试集的信息更少。

泛化(Generalization)

降低损失

迭代方法

梯度下降

  • 凸形问题只有一个最低点:即存在一个斜率刚好等于0的位置。这个最小值就是损失函数收敛之处。
  • 梯度下降算法
    • wiw_i选择一个起始值(起点)。起点并不重要
    • 计算损失曲线在wiw_i处的梯度
    • 沿着负梯度的方向走一步,以便尽快降低损失

梯度是一个矢量,有两个特征:

  • 方向
  • 大小

学习速率

梯度矢量具有方向和大小。梯度下降算法用梯度乘以一个称为学习速率(又称步长)的标量,以确定下一个点的位置。

  • 超参数:是编程人员在机器学习算法中用于调整的旋钮。

  • 学习速率过小:花费很长的学习时间

  • 学习速率过大:就会在U形底部震荡。

  • 合适的速率

下面是速率为0.1的梯度下降算法

可见,在接近于谷底的时候,学习的速率太慢。

随机梯度下降法

  • 批量:在梯度下降法中,指的是用于单次迭代中计算梯度的样本总数

一个批量可能相当巨大,如果是超大批量,则单次迭代就可能花费很长时间进行计算。

包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现的冗余的可能性越高。

如何通过更小的计算量得出正确的平均梯度。

  • 随机梯度下降法(SGD):每次只迭代使用一个样本(批量大小为1),如果进行足够的迭代,SGD也可以发挥作用,但过程会非常杂乱。 “随机”表示构成各个批量的一个样本都是随机选择的。
  • 小批量随机梯度下降法(小批量SGD):介于全批量迭代与SGD之间的折中方案。小批量通常包含10~1000个随机选择的样本。

表示(Representation)

特征工程

  • 特征矢量:组成数据集中样本的浮点值集
  • 特征工程:将原始数据转为为特种矢量

映射数值

整数和浮点数不需要特殊编码,可以与数字权重相乘。

映射分类值

分类特征具有一组离散的可能值,比如street_name特征,选项包括:

{'南京东路', '静安寺', '陆家嘴', '张江路'}

采用数值型映射已经不合适。比如使用street_name作为特征来预测房价模型为例,

  • 没有适用于所有街道的单一权重:根据街道名称对房价进行线性调整的可能性不大
  • 没有将street_name可能有多个值情况考虑在内。比如许多房屋位于两条街道的拐角处,则无法在street_name中对该信息进行编码

为此,可以为模型中的每个分类特征创建一个二元向量来表示这些值:

  • 对适应于样本的值,将相应向量元素设为1

  • 将所有其他元素设置为0

  • 独热编码:该向量长度等于词汇表中的元素数,但只有一个值为1

  • 多热编码:当有多个值为1时

下图是街道Shorebird Way的独热编码:

稀疏表示法

二元向量表示法是非常低效的。

  • 稀疏表示法:仅存非零值,仍然为每个特征值学习独立的模型权重

良好特征的特点

  • 避免很少使用的离散特征值
  • 最好具有清晰明确的含义
  • 实际数据内不要掺入特殊值
  • 考虑上游不稳定性:特征的定义不应随时间变化。

数据清理

缩放特征值

  • 缩放:将浮点特征值从自然范围(例如100到900)转为标准范围(例如0到1 或 -1到+1)。

如果特征集中包含多个特征,则缩放特征可带来如下优势:

  • 帮助梯度下降法更快速地收敛
  • 帮助避免“NaN陷阱”:在这种陷阱中,模型中一个数值变成NaN,并且模型中的其他数值最终也会因为数学运算变成NaN
  • 帮助模型为每个特征确定合适的权重:如果没有特征缩放,则模型会对较大的特征投入过多精力

处理极端值

下面的曲线图表示的是加利福尼亚州住房数据集中称为 roomsPerPerson 的特征。roomsPerPerson 值的计算方法是相应地区的房间总数除以相应地区的人口总数。该曲线图显示,在加利福尼亚州的绝大部分地区,人均房间数为 1 到 2 间。不过,请看一下 x 轴,有非常长的尾巴。

如何最大限度降低这些极端离群值的影响?一种方法是对每个值取对数:

对数缩放仍然留有尾巴。

简单的将特征值限制在一个范围内:

分箱

下面的曲线图显示了加利福尼亚州不同纬度的房屋相对普及率:

按照上图分箱后,可以将纬度37.4表示为

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

分箱之后,我们的模型现在可以为每个纬度学习完全不同的权重

清查

数据集中有很多样本是不可靠的:

  • 遗漏值
  • 重复样本
  • 不良标签
  • 不良特征值