机器学习之模型训练

线性回归

概括的讲,线性模型就是对输入特征加权求和,再加上一个称之为偏置项(或截距项)的常数,并以此进行预测,如下公式所示:

y = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n y = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n

在此公式中:

  • y是预测值
  • n是特征数量
  • x i x_i 是第i个特征值
  • θ j \theta_j 是第j个模型参数(包括偏差项 θ 0 \theta_0 和特征权重 θ 1 , θ 2 , θ 3 , . . . , θ n \theta_1,\theta_2,\theta_3,...,\theta_n

训练线性回归模型就是设置模型参数直到模型最拟合训练集的过程,为此我们首先需要知道怎么测量模型对训练数据拟合程度的好坏。回归模型最常见的性能指标是均方根误差(RMSE),因此在训练线性回归模型时,似乎及就是要找到最小化RMSE θ \theta 值。不过在实践中,经常用均方误差(MSE)最小化代替RMSE最小化,因为MSE计算简单且和RMSE效果相同。

在训练集X上,使用如下公式计算线性回归的MSE h θ h_\theta 是假设函数):

M S E = ( X , h θ ) = 1 m i = 1 m ( θ T x ( i ) y ( i ) ) 2 MSE=(X,h_\theta)=\frac{1}{m}\sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})^2

为了得到成本函数最小的 θ \theta 值,有一个闭式解法(直接得出结果的数学方程),即标准方程:

θ = ( X T X ) 1 X T y \theta=(X^TX)^{-1}X^Ty

在这个方程中:

  • θ \theta 是使成本函数最小的 θ \theta
  • y是包含 y ( 1 ) y^{(1)} y ( m ) y^{(m)} 的目标值向量

我们生成一些随机的线性数据来测试这个公式:

import numpy as np
X = 2 * np.random.rand(100,1)
y = 4 + 3*X +np.random.randn(100,1)
复制代码

得到如下的线性数据集:

现在我们用标准方程来计算 θ \theta 。使用NumPy提供的线性代数模块(np.linalg)中的inv()函数来对矩阵求逆,并用dot()函数计算矩阵的内积:

X_b = np.c_[np.ones((100,1)),X] # add x0=1 to each instance
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.t).dot(y) 
复制代码

我们实际生成数据的函数是 y = 4 + 3 x 1 + 高斯噪音 y=4+3x_1+高斯噪音 ,来看下公式结果:

>>>theta_best
array([[4.21509616],[2.77011339]])
复制代码

这和我们期待的 θ 0 = 4 \theta_0=4 (4.21509616)、 θ 1 = 3 \theta_1=3 (2.77011339)非常接近,不过由于噪音的存在使其不能完全还原为原本的函数,我们绘制出预测结果:

image.png

计算复杂度相对于想要预测的实例数量和特征数量来说都是线性的,对双倍的实例(或双倍的特征数)进行预测,大概需要双倍的时间。

猜你喜欢

转载自juejin.im/post/7016973256406073374