学习笔记"/>
google机器学习速成教程学习笔记
Machine Learning notes
- 监督式机器学习
- 线性回归、训练和损失
- 迭代方式降低损失
- 降低损失 (Reducing Loss):梯度下降法
- 使用TensorFlow
- 泛化
- 训练集和测试集
- 验证集
- 表示
- 特征工程
- 将原始数据映射到特征
- 良好特征的特点
- 清理数据
- 缩放特征值
- 处理极端离群值
- 分箱
- 清查
- 特征组合
- 特征组合的种类
- 组合独热矢量
- 简化正则化
- lambda
- 逻辑回归
- 计算概率
- 逻辑回归的损失函数
- 逻辑回归中的正则化
- 分类
- 阈值
- 真与假以及正类别与负类别
- 准确率
- 精确率和召回率
- ROC 和曲线下面积
- 预测偏差
- 分桶偏差
- 稀疏性正则化
- L1正则化
- 神经网络
- 激活函数
- 神经网络
- 激活函数
监督式机器学习
标签: 指我们要预测的真实事物——y( 基本线性回归(也叫简单线性回归)中的 y 变量 ),可以简单理解为模型的预测结果
特征: 指用于描述数据的输入变量 —— xi ( 基本线性回归中的 {x1、x2、…xn} 变量 ),简单的机器学习项目可能会使用单个特征,而比较复杂的机器学习项目可能会使用数百万个特征 【 合适的特征应该是具体且可量化的 】
样本: 是指数据的特定实例——x
有标签样本 同时包含特征和标签 :labeled examples: {features, label}: (x, y), 使用有标签样本来训练模 型
无标签样本具有 {特征, ?}:(x, ?) , 用于对新数据做出预测
在使用有标签样本训练模型之后,我们会使用该模型预测无标签样本的标签
模型可将样本映射到预测标签( 模型定义了特征与标签之间的关系 ):y’ ,所谓模型就是执行预测的工具,由模型的内部参数定义,这些内部参数值是通过学习得到的 ,通过学习规律来尝试创建模型,从而通过模型预测标签
**训练**是指创建或**学习**模型。也就是说,向模型展示有标签样本,让模型逐渐学习特征与标签之间的关系。
推断是指将训练后的模型应用于无标签样本。也就是说,使用经过训练的模型做出有用的预测 (y'
)
回归模型可预测连续值 , 分类模型可预测离散值 。
线性回归、训练和损失
y = m x + b y = mx + b y=mx+b ,y 是我们试图预测的值 ,m 指的是直线的斜率 ,x 即输入特征的值 , b指的是 y 轴截距 。
模型方程式 : y ′ = w 1 x 1 + b y' = w1x1 + b y′=w1x1+b,
y’指的是预测标签(理想输出值) , b指的是偏差(y 轴截距)。而在一些机器学习文档中,它称为 w0。
w1 指的是特征 1 的权重。 x1 指的是特征(已知输入项)。
训练模型表示通过有标签样本来学习(确定)所有权重和偏差的理想值。在监督式学习中,机器学习算法通过以下方式构建模型:检查多个样本并尝试找出可最大限度地减少损失的模型;这一过程称为经验风险最小化。
损失是一个数值,表示对于单个样本而言模型预测的准确程度 。即单个样本的真正标签与模型的预测标签的差距。 如果模型的预测完全准确,则损失为零,否则损失会较大。训练模型的目标是从所有样本中找到一组平均损失“较小”的权重和偏差。
平方损失(又称为 L2 损失)的损失函数
= the square of the difference between the label and the prediction= (observation - prediction(x))2= (y - y')2
均方误差 (MSE) 指的是每个样本的平均平方损失。要计算 MSE,请求出各个样本的所有平方损失之和,然后除以样本数量:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mpHnR3mf-1572745710789)(G:\Mypdf\markdown\2019-10-26_092758.jpg)]
x指的是模型进行预测时使用的特征集 ,y 指的是样本的标签 ,prediction(x)指的是权重和偏差与特征集 x 结合的函数。D指的是包含多个有标签样本(即 (x,y))的数据集。 N 指的是 D 中的样本数量。
迭代方式降低损失
“模型”部分将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。 对于线性回归问题,事实证明初始值并不重要。我们可以随机选择值,不过我们还是选择采用以下这些无关紧要的值:b = 0,w1 = 0。
“计算损失”部分是模型将要使用的损失函数。
“计算参数更新”部分。机器学习系统就是在此部分检查损失函数的值,并为差距(b)和权重(w1,w2,w3……wn)生成新值。现在,假设这个神秘的绿色框会产生新值,然后机器学习系统将根据所有标签重新评估所有特征,为损失函数生成一个新值,而该值又产生新的参数值。这种学习过程会持续迭代,直到该算法发现损失可能最低的模型参数。 可以不断迭代,直到总体损失不再变化或至少变化极其缓慢为止。这时候,我们可以说该模型已收敛。
降低损失 (Reducing Loss):梯度下降法
回归问题产生的损失与权重图为凸形
凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。
梯度下降法的第一个阶段是为 w1 选择一个起始值(起点)。起点并不重要;因此很多算法就直接将 w1 设为 0 或随机选择一个值。 然后,梯度下降法算法会计算损失曲线在起点处的梯度。简而言之,梯度是偏导数的矢量;它可以让您了解哪个方向距离目标“更近”或“更远”。
偏导数
多变量函数指的是具有多个参数的函数,例如:
f ( x , y ) = e 2 y s i n ( x ) f(x,y)=e^2y sin(x) f(x,y)=e2ysin(x)
f 相对于 x 的偏导数表示:
∂ f / ∂ x ∂f/∂x ∂f/∂x
是 f (x) 的导数。要计算以下值:
∂ f / ∂ x ∂f/∂x ∂f/∂x
您必须使 y 保持固定不变(因此 f 现在是只有一个变量 x 的函数),即假设y为常量,然后取 f 相对于 x 的常规导数。【高等数学中偏导数的求法】
函数的梯度是偏导数相对于所有自变量的矢量,表示如下:
∇ f ∇f ∇f
梯度是一个矢量,因此具有以下两个特征:方向、大小
∇ f = ( ∂ f / ∂ x , ∂ f / ∂ y , ∂ f / ∂ z ) = ∂ f / ∂ x ∗ i + ∂ f / ∂ y ∗ j + ∂ f / ∂ z ∗ k ∇f = (∂f/∂x,∂f/∂y,∂f/∂z) = ∂f/∂x*i + ∂f/∂y*j + ∂f/∂z*k ∇f=(∂f/∂x,∂f/∂y,∂f/∂z)=∂f/∂x∗i+∂f/∂y∗j+∂f/∂z∗k
i, j, k 为标准的单位向量,分别指向 x, y 跟 z 坐标的方向。
梯度始终指向损失函数中增长最为迅猛的方向,梯度下降法依赖于负梯度 。梯度下降法算法会沿着负梯度的方向走一步,以便尽快降低损失。 **走一个梯度步长将我们移动到损失曲线上的下一个点。**然后,梯度下降法会重复此过程,逐渐接近最低点。
那么问题在于每次走多大的步长合适呢?这就涉及到了学习效率的内容:
梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。 超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率 。
随机梯度下降法
在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。 包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。
通过从我们的数据集中随机选择样本,我们可以通过小得多的数据集估算(尽管过程非常杂乱)出较大的平均值。 随机梯度下降法 (SGD) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。 小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。
使用TensorFlow
基于图表的计算框架
工具包 说明
Estimator (tf.estimator) | 高级 OOP API。 |
---|---|
tf.layers/tf.losses/tf.metrics | 用于常见模型组件的库。 |
TensorFlow | 低级 API |
TensorFlow 由以下两个组件组成:
- 图协议缓冲区
- 执行(分布式)图的运行时
这两个组件类似于 Java 编译器和 JVM。正如 JVM 会实施在多个硬件平台(CPU 和 GPU)上一样,TensorFlow 也是如此。
泛化
泛化是指模型很好地拟合以前未见过的新数据(从用于创建该模型的同一分布中抽取)的能力。
过拟合: 为了得到一致假设而使假设变得过度严格称为过拟合。
过拟合是由于模型的复杂程度超出所需程度而造成的。机器学习的基本冲突是适当拟合我们的数据,但也要尽可能简单地拟合数据。机器学习的目标是对从真实概率分布(已隐藏)中抽取的新数据做出良好预测。 机器学习模型旨在根据以前未见过的新数据做出良好预测 。
一种方法是将您的数据集分成两个子集:
-
训练集 - 用于训练模型的子集。
-
测试集 - 用于测试训练后模型的子集 。
一般来说,在测试集上表现是否良好是衡量能否在新数据上表现良好的有用指标,前提是:
-
测试集足够大。
-
您不会反复使用相同的测试集来作假。
-
训练集和测试集
确保您的测试集满足以下两个条件:
- 规模足够大,可产生具有统计意义的结果。
- 能代表整个数据集。换言之,挑选的测试集的特征应该与训练集的特征相同。
请勿对测试数据进行训练
但是这种模型挑战会大大提高过拟合的概率。
验证集
通过将数据集划分为三个子集,可以大幅降低过拟合的发生几率 。 将单个数据集划分为三个子集:训练集、测试集、验证集, 在模型“通过”验证集之后,使用测试集再次检查评估结果 。
表示
特征工程
机器学习项目中,关注点是特征表示。也就是说,开发者通过添加和改善特征来调整模型。
将原始数据映射到特征
特征工程指的是将原始数据转换为特征矢量。 进行特征工程预计需要大量时间。(大约75%)
许多机器学习模型都必须将特征表示为实数向量,因为特征值必须与模型权重相乘。
映射数值: 整数和浮点数据不需要特殊编码 ,直接转化为特征向量就可以和权重相乘。
映射分类值: 分类特征可能具有一组离散的值。
模型不能将字符串与学习到的权重相乘,因此我们使用特征工程将字符串转换为数字值。
可以定义一个从特征值(我们将其称为可能值的词汇表)到整数的映射。世界上的每条街道并非都会出现在我们的数据集中,因此我们可以将所有其他街道分组为一个全部包罗的**“其他”类别**,称为 OOV(词汇表外)分桶 。
向量(特征向量)的长度等于词汇表中的元素数。当只有一个值为 1 时,这种表示法称为独热编码 。 当有多个值为 1 时,这种表示法称为多热编码。
通过独热编码映射街道地址。
该方法能够有效地为每个特征值(例如,街道名称)创建布尔变量。采用这种方法时,如果房屋位于 Shorebird Way 街道上,则只有 Shorebird Way 的二元值为 1。因此,该模型仅使用 Shorebird Way 的权重。同样,如果房屋位于两条街道的拐角处,则将两个二元值设为 1,并且模型将使用它们各自的权重。
稀疏表示法: 其中仅存储非零值。在稀疏表示法中,仍然为每个特征值学习独立的模型权重
良好特征的特点
尽量少使用出现次数少的离散特征值,良好的特征值应该在数据集中出现大约 5 次以上。这样一来,模型就可以学习该特征值与标签是如何关联的。也就是说,大量离散值相同的样本可让模型有机会了解不同设置中的特征,从而判断何时可以对标签很好地做出预测。相反,如果某个特征的值仅出现一次或者很少出现,则模型就无法根据该特征进行预测。最好具有清晰明确的含义
每个特征对于项目中的任何人来说都应该具有清晰明确的含义。
实际数据内不要掺入特殊值, 良好的浮点特征不包含超出范围的异常断点或特殊的值 。为解决特殊值的问题,需将该特征转换为两个特征:
- 一个特征只存储正常的特征值,不含特殊值。
- 一个特征存储布尔值,表示是否提供了正确的特征值。为该布尔值特征指定一个名称。
考虑上游不稳定性,特征的定义不应随时间发生变化。
清理数据
缩放特征值
缩放是指将浮点特征值从自然范围(例如 100 到 900)转换为标准范围(例如 0 到 1 或 -1 到 +1)。
如果特征集包含多个特征,则缩放特征可以带来以下优势:
- 帮助梯度下降法更快速地收敛。
- 帮助避免“NaN 陷阱”。在这种陷阱中,模型中的一个数值变成 NaN(例如,当某个值在训练期间超出浮点精确率限制时),并且模型中的所有其他数值最终也会因数学运算而变成 NaN。
- 帮助模型为每个特征确定合适的权重。如果没有进行特征缩放,则模型会对范围较大的特征投入过多精力。
要缩放数字数据,一种显而易见的方法是将 [最小值,最大值] 以线性方式映射到较小的范围,例如 [-1,+1]。
另一种热门的缩放策略是计算每个值的 Z 得分。Z 得分与距离均值的标准偏差数相关。换而言之:
s c a l e d v a l u e = ( v a l u e − m e a n ) / s t d d e v scaledvalue=(value−mean)/stddev scaledvalue=(value−mean)/stddev
scaledvalue:缩放结果 value:原始值 mean:均值 stddev:标准偏差数
处理极端离群值
- 一种方法是对每个值取对数 , 对数缩放可稍稍缓解这种影响 ,但最终结果仍有一些较大的离群值
- 对特征值进行限定,所有超过限定的特征值都将变成最大特征值。
分箱
原因:特征值和标签之间不存在线性关系,将特征值分为若干个部分,每个部分存在线性关系,分箱之后,我们的模型现在可以为每个部分学习完全不同的权重 。
清查
在现实生活中,数据集中的很多样本是不可靠的,原因有以下一种或多种:
- 遗漏值。 例如,有人忘记为某个房屋的年龄输入值。
- 重复样本。 例如,服务器错误地将同一条记录上传了两次。
- 不良标签。 例如,有人错误地将一颗橡树的图片标记为枫树。
- 不良特征值。 例如,有人输入了多余的位数,或者温度计被遗落在太阳底下。
一旦检测到存在这些问题,您通常需要将相应样本从数据集中移除,从而“修正”不良样本。 要检测遗漏值、重复样本、 不良特征值或标签 ,您可以编写一个简单的程序来进行过滤或修正。 除了检测各个不良样本之外,您还必须检测集合中的不良数据 。
特征组合
特征组合是指两个或多个特征相乘形成的合成特征 。 特征的相乘组合可以提供超出这些特征单独能够提供的预测能力。
特征组合是指通过将两个或多个输入特征相乘来对特征空间中的非线性规律进行编码的合成特征。
特征组合的种类
我们可以创建很多不同种类的特征组合。例如:
[A X B]
:将两个特征的值相乘形成的特征组合。[A x B x C x D x E]
:将五个特征的值相乘形成的特征组合。[A x A]
:对单个特征的值求平方形成的特征组合。
通过采用随机梯度下降法,可以有效地训练线性模型。
组合独热矢量
机器学习模型经常组合独热特征矢量,将独热特征矢量的特征组合视为逻辑连接 。
假设您对纬度和经度进行分箱,获得单独的独热 5 元素特征矢量。例如,指定的纬度和经度可以表示如下:
binned_latitude = [0, 0, 0, 1, 0] //纬度
binned_longitude = [0, 1, 0, 0, 0] //经度
假设您对这两个特征矢量创建了特征组合:
binned_latitude X binned_longitude
此特征组合是一个 25 元素独热矢量(24 个 0 和 1 个 1)。该组合中的单个 1
表示纬度与经度的特定连接。然后,您的模型就可以了解到有关这种连接的特定关联性。
线性学习器可以很好地扩展到大量数据。对大规模数据集使用特征组合是学习高度复杂模型的一种有效策略。
简化正则化
正则化指的是降低模型的复杂度以减少过拟合 。
现象起因: 某个模型的训练损失逐渐减少,但验证损失最终增加。换言之,该泛化曲线显示该模型与训练集中的数据过拟合。
也就是说,并非只是以最小化损失(经验风险最小化)为目标:
m i n i m i z e ( L o s s ( D a t a ∣ M o d e l ) ) minimize(Loss(Data|Model)) minimize(Loss(Data∣Model))
而是以最小化损失和复杂度为目标,这称为结构风险最小化:
m i n i m i z e ( L o s s ( D a t a ∣ M o d e l ) + c o m p l e x i t y ( M o d e l ) ) minimize(Loss(Data|Model) + complexity(Model)) minimize(Loss(Data∣Model)+complexity(Model))
现在,我们的训练优化算法是一个由两项内容组成的函数:一个是损失项,用于衡量模型与数据的拟合度,另一个是正则化项,用于衡量模型复杂度。
两种衡量模型复杂度的常见方式(这两种方式有些相关):
- 将模型复杂度作为模型中所有特征的权重的函数。
- 将模型复杂度作为具有非零权重的特征总数的函数。
如果模型复杂度是权重的函数,则特征权重的绝对值越高,对模型复杂度的贡献就越大。
可以使用 L2 正则化公式来量化复杂度,该公式将正则化项定义为所有特征权重的平方和:
在这个公式中,接近于 0 的权重对模型复杂度几乎没有影响,而离群值权重则可能会产生巨大的影响。
lambda
模型开发者通过以下方式来调整正则化项的整体影响:用正则化项的值乘以名为 lambda(又称为正则化率)的标量 。通过以下计算:
m i n i m i z e ( L o s s ( D a t a ∣ M o d e l ) + λ c o m p l e x i t y ( M o d e l ) ) minimize(Loss(Data|Model) + λcomplexity(Model)) minimize(Loss(Data∣Model)+λcomplexity(Model))
执行 L2 正则化对模型具有以下影响
- 使权重值接近于 0(但并非正好为 0)
- 使权重的平均值接近于 0,且呈正态(钟形曲线或高斯曲线)分布。
在选择lambda值时,目的是在简化模型和训练数据拟合之间达到适当的平衡:
- 如果您的 lambda 值过高,则模型会非常简单,但是您将面临数据欠拟合的风险。您的模型将无法从训练数据中获得足够的信息来做出有用的预测。
- 如果您的 lambda 值过低,则模型会比较复杂,并且您将面临数据过拟合的风险。您的模型将因获得过多训练数据特点方面的信息而无法泛化到新数据。
逻辑回归
计算概率
许多问题需要将概率估算值作为输出 。 逻辑回归是一种极其高效的概率计算机制
通常可以以下两种方式之一使用返回的概率:
- “按原样”
- 转换成二元类别。
逻辑回归模型如何确保输出值始终落在 0 和 1 之间。S 型函数生成的输出值正好具有这些特性。
其定义如下:
y = 1 / ( 1 + e − Z ) ) y=1/(1+e^-Z)) y=1/(1+e−Z))
S 型函数会产生以下曲线图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2MvwbA7p-1572745710803)(G:\Mypdf\markdown\2019-10-27_143558.jpg)]
如果z表示使用逻辑回归训练的模型的线性层的输出,则 S 型(z) 函数会生成一个介于 0 和 1 之间的值(概率)
其中:
- y’ 是逻辑回归模型针对特定样本的输出。
- z 是 b + w1x1 + w2x2 + … wNxN
- w 的值是该模型学习的权重,b 是偏差。
- x 的值是特定样本的特征值。
逻辑回归的损失函数
线性回归的损失函数是平方损失。逻辑回归的损失函数是对数损失函数,定义如下:
L o g L o s s = ∑ ( x , y ) ∈ D − y l o g ( y ′ ) − ( 1 − y ) l o g ( 1 − y ′ ) LogLoss=∑(x,y)∈D−ylog(y′)−(1−y)log(1−y′) LogLoss=∑(x,y)∈D−ylog(y′)−(1−y)log(1−y′)
其中:
- (x**y)ϵD 是包含很多有标签样本 (x,y) 的数据集。
- “ y ”是有标签样本中的标签。由于这是逻辑回归,因此“y”的每个值必须是 0 或 1。
- “ y’ ”是对于特征集“x”的预测值(介于 0 和 1 之间)。
实际上,最大限度地降低损失函数的值会生成最大的似然估计值。
逻辑回归中的正则化
正则化在逻辑回归建模中极其重要。如果没有正则化,逻辑回归的渐近性会不断促使损失在高维度空间内达到 0。因此,大多数逻辑回归模型会使用以下两个策略之一来降低模型复杂性:
-
L2 正则化。
-
早停法,即,限制训练步数或学习速率。
分类
阈值
为了将逻辑回归值映射到二元类别,您必须指定分类阈值(也称为判定阈值)。如果值高于该阈值,则表示“垃圾邮件”;如果值低于该阈值,则表示“非垃圾邮件” 。 阈值取决于具体问题,因此必须对其进行调整。
真与假以及正类别与负类别
正类别和负类别可以粗解为理想情况和不理想情况,其实就是两种相反的情况,可以自然规定。
真正例是指模型将正类别样本正确地预测为正类别。同样,真负例是指模型将负类别样本正确地预测为负类别。
假正例是指模型将负类别样本错误地预测为正类别,而假负例是指模型将正类别样本错误地预测为负类别。
准确率
准确率是一个用于评估分类模型的指标。通俗来说,准确率是指我们的模型预测正确的结果所占的比例。正式点说,准确率的定义如下:(正确预测数量 / 总预测数量)
A c c u r a c y = N u m b e r o f c o r r e c t p r e d i c t i o n s / T o t a l n u m b e r o f p r e d i c t i o n s Accuracy=Number of correct predictions / Total number of predictions Accuracy=Numberofcorrectpredictions/Totalnumberofpredictions
对于二元分类,也可以根据正类别和负类别按如下方式计算准确率:
A c c u r a c y = ( T P + T N ) / ( T N T P + T N + F P + F N ) Accuracy=(TP+TN) / (TNTP+TN+FP+FN) Accuracy=(TP+TN)/(TNTP+TN+FP+FN)
其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。
当使用分类不平衡的数据集(比如正类别标签和负类别标签的数量之间存在明显差异)时,单单准确率一项并不能反映全面情况 。
精确率和召回率
精确率:在被识别为正类别的样本中,确实为正类别的比例
定义:
P r e c i s i o n = T P / ( T P + F P ) Precision = TP / (TP + FP) Precision=TP/(TP+FP)
如果模型的预测结果中没有假正例,则模型的精确率为 1.0。
召回率 : 在所有正类别样本中,被正确识别为正类别的比例
定义:
召 回 率 = T P / ( T P + F N ) 召回率 = TP / (TP+FN) 召回率=TP/(TP+FN)
要全面评估模型的有效性,必须同时检查精确率和召回率。 精确率和召回率往往是此消彼长的情况 。
ROC 和曲线下面积
ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表。 ROC 曲线用于绘制采用不同分类阈值时的 TPR 与 FPR。 该曲线绘制了以下两个参数:
- 真正例率(TPP True Positive Rate)
- 假正例率(False Positive Rate)
曲线下面积表示“ROC 曲线下面积”。也就是说,曲线下面积测量的是从 (0,0) 到 (1,1) 之间整个 ROC 曲线以下的整个二维面积 。
曲线下面积对所有可能的分类阈值的效果进行综合衡量。曲线下面积的一种解读方式是看作模型将某个随机正类别样本排列在某个随机负类别样本之上的概率。
曲线下面积的取值范围为 0-1。预测结果 100% 错误的模型的曲线下面积为 0.0;而预测结果 100% 正确的模型的曲线下面积为 1.0。
AUC是一个模型评价指标,只能用于二分类模型的评价 。 AUC是Area under curve的首字母缩写,字面理解就是ROC曲面下面积。
将给定模型的所有预测结果都乘以 统一倍数, AUC 衡量的模型效果 不会发生变化。AUC 以相对预测为依据,因此保持相对排名的任何预测变化都不会对 AUC 产生影响。
预测偏差
逻辑回归预测应当无偏差。即:“预测平均值”应当约等于“观察平均值”
预测偏差指的是这两个平均值之间的差值。即:预测偏差 = 预测平均值 - 数据集中相应标签的平均值
如果出现非常高的非零预测偏差,则说明模型某处存在错误,因为这表明模型对正类别标签的出现频率预测有误。
造成预测偏差的可能原因包括:
- 特征集不完整
- 数据集混乱
- 模型实现流水线中有错误?
- 训练样本有偏差
- 正则化过强
分桶偏差
逻辑回归可预测 0 到 1 之间的值。不过,所有带标签样本都正好是 0或 1。因此,在检查预测偏差时,您无法仅根据一个样本准确地确定预测偏差;您必须在“一大桶”样本中检查预测偏差。也就是说,只有将足够的样本组合在一起以便能够比较预测值与观察值,逻辑回归的预测偏差才有意义。
稀疏性正则化
L1正则化
在高维度稀疏矢量中,最好尽可能使权重正好降至 0
。正好为 0 的权重基本上会使相应特征从模型中移除。 将特征设为 0 可节省 RAM 空间,且可以减少模型中的噪点。
L2 正则化可以使权重变小,但是并不能使它们正好为 0.0。
L1 正则化这种正则化项的作用类似 L0,但它具有凸优化的优势,可有效进行计算。因此,我们可以使用 L1 正则化使模型中很多信息缺乏的系数(权重)正好为 0,从而在推理时节省 RAM。
L1 和 L2 正则化。
L2 和 L1 采用不同的方式降低权重:
- L2 会降低权重2。
- L1 会降低 |权重|。
因此,L2 和 L1 具有不同的导数:
- L2 的导数为 2 * 权重。
- L1 的导数为 k(一个常数,其值与权重无关)。
神经网络
神经网络是更复杂版本的特征组合。实质上,神经网络会学习适合您的相应特征组合。
激活函数
要对非线性问题进行建模,我们可以直接引入非线性函数。我们可以用非线性函数将每个隐藏层节点像管道一样连接起来。
常见激活函数
S 型激活函数将加权和转换为介于 0 和 1 之间的值。
F ( x ) = 1 / ( 1 + e − x ) F(x)=1 / (1+e^−x) F(x)=1/(1+e−x)
相较于 S 型函数等平滑函数,以下修正线性单元激活函数(简称为 ReLU)的效果通常要好一点,同时还非常易于计算。
F ( x ) = m a x ( 0 , x ) F(x)=max(0,x) F(x)=max(0,x)
ReLU 的优势在于它基于实证发现(可能由 ReLU 驱动),拥有更实用的响应范围。S 型函数的响应性在两端相对较快地减少。
系数(权重)正好为 0**,从而在推理时节省 RAM。
L1 和 L2 正则化。
L2 和 L1 采用不同的方式降低权重:
- L2 会降低权重2。
- L1 会降低 |权重|。
因此,L2 和 L1 具有不同的导数:
- L2 的导数为 2 * 权重。
- L1 的导数为 k(一个常数,其值与权重无关)。
神经网络
神经网络是更复杂版本的特征组合。实质上,神经网络会学习适合您的相应特征组合。
激活函数
要对非线性问题进行建模,我们可以直接引入非线性函数。我们可以用非线性函数将每个隐藏层节点像管道一样连接起来。
常见激活函数
S 型激活函数将加权和转换为介于 0 和 1 之间的值。
F ( x ) = 1 / ( 1 + e − x ) F(x)=1 / (1+e^−x) F(x)=1/(1+e−x)
相较于 S 型函数等平滑函数,以下修正线性单元激活函数(简称为 ReLU)的效果通常要好一点,同时还非常易于计算。
F ( x ) = m a x ( 0 , x ) F(x)=max(0,x) F(x)=max(0,x)
ReLU 的优势在于它基于实证发现(可能由 ReLU 驱动),拥有更实用的响应范围。S 型函数的响应性在两端相对较快地减少。
更多推荐
google机器学习速成教程学习笔记
发布评论