Py学习  »  机器学习算法

NYU 金融机器学习笔记 1.2.4 线性回归

ApacheCN_飞龙 • 5 年前 • 452 次点击  

现在是时候介绍我们的第一个机器学习算法了。

而出人意料,这个算法是着名的线性回归,这是一种你可能熟悉的算法。我们将通过将其视为典型的机器学习算法,来了解线性回归的原理,算法具有我们之前介绍的任务,表现测量和机器学习方法的其他属性。

为了稍微调整一下,我们将从一开始就考虑一般的多变量情况。

首先,让我们从任务 T 开始。我们的任务是预测标量变量 y 的值,给定预测器或特征向量 X0 到 XD-1,这将是 D 维空间 RD 中的向量。

现在,为了从经验中学习,我们给出了一对 X 和 y 的数据集,我们可以像以前一样分成两个数据集,X_train,y_train 和 X_test,y_test。假设这两个数据集都是来自某些数据生成分布 P 数据的 IAD 样本。接下来,考虑我们想要使用的模型架构。由此,我们的意思是定义一个 X 函数空间,我们试图拿它拟合我们数据。

在这种情况下,我们选择线性架构。也就是说,我们将自己约束为 X 的一类线性函数。这里,y 是 N 个预测值的向量。X 是尺寸为 N×D 的设计矩阵。W 是长度为 D 的回归系数的向量。

这种向量通常也被称为机器学习中的权重向量。

现在,这种线性回归模型的一个例子是,试图预测某些股票的每日回报的模型。让我们例举亚马逊股票。虽然 X 将是各种市场指数回报的向量,例如标准普尔 500 指数,纳斯达克综合指数,VIX 等。现在我们必须指定表现指标。我们将其定义为,在测试集上计算的均方误差或简称 MSE。因此,为了计算它,我们计算测试集中 O 个点的不同 Y,和模型预测 Y hat 之间的平方差的平均值。同样的事情也可以更紧凑地写成,因为向量 Y hat 和 Y 之间的重缩放的平方距离。

现在我们可以用上面的模型方程代替 Y hat,并用这种形式写出来。

接下来的问题是如何找到最佳参数 W。

我们按照在上一讲中讨论的那样继续进行,并寻找最小化另一个目标的参数 W,即训练集上的 MSE 误差。这将是与此处相同的等式,但 X_test 由 X_train 代替,Y_test 由 Y_train 代替。

原因是两个均方误差以及训练和测试数据都估计相同的数量,这是泛化误差。

现在,为了找到 W 的最佳值,我们需要将 MSE 训练误差的梯度设置为 0。这给出了这个表达式,对于 W 的最佳向量,它应该等于 0。现在,让我们在 N_train 上添加一个不必要的常数乘数 1,并将梯度写为向量范数的梯度,我们将其写为向量和自身的标量积。

这里,符号 T 代表转置向量。

现在,让我稍微简化一下这个关系,省略上标,因为我们不需要它们。我们只记得在这个计算中我们只使用训练数据。

现在,下一步,我们扩展标量乘积并计算相对于 W 的整个表达式的导数。

由于第一项是 W 的二次方,第二项几乎是线性的,而最后一项完全不依赖于 W,它会在微分时省略。结果,我们得到了这个表达式。对于最佳向量 W,它应该等于 0。现在通过简单地对等式求逆来获得 W 最佳值。所以我们最终得到了这个公式。

这种关系也称为回归分析中的正规方程。让我们回想一下,这里的 X 和 y 指的是训练集中的值。

为了了解此处涉及的矩阵运算,如此处所示,可视化此关系也很有用。

现在,给定估计向量 W,我们可以用它做一些事情。首先,我们可以通过将 X_train 左乘 W 来计算训练或样本内误差。

如果我们用这个表达式代替 W,我们看到它可以表示为矩阵 H 的乘积,由数据矩阵 X_train 和向量 y_train 组成。该矩阵有时称为 H hat 矩阵。你可以检查此矩阵是否为投影矩阵。

特别是,它是对称的和幂等的,意味着它的平方等于矩阵本身。

估计向量 W 的另一个方面是使用它来进行预测。

例如,如果我们使用测试数据集来预测样本,那么答案就是 X_test 和向量 W 的乘积。

现在,请注意这种关系中有趣的事情。我们看到 W 的表达式包括 X 转置和 X 矩阵的乘积的倒数。如果数据矩阵 X 包含几乎相同或非常强相关的列,则可能导致该乘积几乎是退化矩阵的情况。

当一列可以表示为其他列的线性组合时,会发生另一种常见情况,产生几乎退化矩阵。这在统计学上被称为多重共线性现象。这是该矩阵的行列式。在所有这些情况下,我们在数字上非常接近于零。这可能导致预测值不稳定或无穷大。

有多种方法可以防止线性回归中的这种不稳定性。其中之一是扫描预测变量集以排除可能的多重共线性。但也有一些其他方法。特别是,在下一个视频中,我们将讨论平等化,是一种在监督学习算法中提供更好的样本外性能的方法。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/WPbC0CfPF2
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/25520
 
452 次点击