• 线性回归


    线性回归

    一次线性回归

    问题引入

    下图表示的是房价关于住房面积的样本数据。我们的主要任务,是根据样本的离散点集拟合出一条直线(h_{ heta}(x) = heta_0+ heta_1x)尽可能的接近(y(x)),从而预测任意面积的房价。我们称这样的(h_ heta(x))为本次线性回归的目标函数

    截屏2020-09-15 下午6.39.22

    梯度下降法

    假设现在我们已经拟合出了这样一个(h_{ heta}(x)),那么对于给定的测试数据集({(X_i,Y_i)| i = 1,2,3,...,m}),我们可以求出将每一个(X_i)代入(h_ heta(x))来得到预测数据集({(X_i,widehat{Y_i})|i=1,2,3,...,m})。由于(h_ heta(x))是拟合出来的,因此(y_i,widehat{y_i})之间必然会存在误差。

    我们称单个样例的训练误差为损失函数(Loss Function),称系统全局的训练误差为代价函数(Cost Function)

    均方误差(亦称为平方损失,square loss)是回归任务中最常用的性能度量。均方误差有非常好的几何意义,它对应了常用的欧式距离。基于均方误差最小化模型求解的方法称为最小二乘法(Least Square Method)

    在线性回归中,最小二乘法就是试图找到这样一条直线,使得所有样本点到直线上的欧式距离之和最小。

    因此,求解(h_ heta(x))的过程,实质上就是最小化均方误差代价函数的过程。

    [ ext{Minimize: } J( heta_0, heta_1) = frac{1}{2m}sum_{i=1}^{m}(h_ heta(x^i) - y^i)^2 = frac{1}{2m}sum_{i=1}^m( heta_0+ heta_1x^i -y^i)^2 ]

    可以证明,(J( heta_0, heta_1))是一个关于( heta_0, heta_1)的二元凸函数。

    截屏2020-09-15 下午7.13.34

    由图可知,凸函数(J( heta_0, heta_1))的局部极小值同时也为全局极小值,此时(J( heta_0, heta_1))最小。因此我们的目的是求出使得(J( heta_0, heta_1))达到全局最优的( heta_0, heta_1)。最为常用的求解方式是梯度下降法

    考虑到凸函数上一点(( heta_0, heta_1,J( heta_0, heta_1))),我们可以将该点沿其切线方向向下移动一小段距离,逐步逼近全局最优点(这个过程可以理解为全微分)。因此可以先任意取一组(( heta_0, heta_1)),然后沿切线方向移动若干次,每次移动后( heta_0, heta_1)都会更新,最终可以求得最优的( heta_0, heta_1)。因此我们可以得到梯度下降算法的执行过程如下:

    Process  "Gradient Descent Algorithm" (training_set with m * 1 x,m * 1 y)
    alpha = 0.0001 # learning rate
    times = 1000000 # Algorithm execution times
    while times>0:
      theta0 = theta0 - alpha * partial(J,theta0)
      theta1 = theta1 - alpha * partial(J,theta1)
      times--
    return theta0,theta1
    

    利用梯度下降法求取 ( heta_0, heta_1)后再将其代入即可得出目标函数(h_ heta(x))

    多元线性回归

    根据一元线性回归的原理,不难得到多元线性回归问题的解决方法。多元回归依然可以用梯度下降法来求解( heta)。以下是多元线性回归相对一元线性回归的少许变化。

    • 目标函数 (h_{ heta}(x) arr h_ heta(x_1,x_2,x_3,...,x_n) = heta_0 + heta_1x_1 + ... + heta_nx_n)
    • 代价函数 (J( heta_0, heta_1) arr J( heta_0,..., heta_n) = frac{1}{2m}sum_{i=1}^m( heta_0+ heta_1x^i + ... + heta_nx_n-y^i)^2)

    多元线性回归的特征缩放

    对于某一种数据集,可能由于数值的选择不当导致(J( heta))的图像不够平缓,导致必须选择极小的学习率(alpha)以及极大的学习次数(T)才能拟合出合理的目标函数。因此可以采用换元法将各个属性的值缩放到某一个特定的区间里,从而得到平缓的(J( heta))。特征缩放有利于提升梯度下降算法的运行效率和准确度。

    均值归一化也是一种使得(J( heta))图像尽可能平缓的方法。它通过将每一个属性(x arr x/(x_{max}-x_{min}))来将所有的属性值统一在一个相近的范围内。

    正规方程法

    考虑到利用梯度下降法求( heta)的步骤有些复杂,人们还想出了另外一种相对简洁的方式来求解( heta)。对于(m)组数据((x_i,y_i)),我们可以设法求出一组(( heta_0, heta_1))使得每一组的(h_ heta(x) = heta_0 + heta_1 * x)都恰好等于(y)。如果我们将问题向量化,实际上就转化为求解线性方程组的问题,这种解决线性回归的方法称为正规方程法

    [egin{bmatrix} 1 & x^{1}_1 & x^{1}_2 & ... & x^{1}_n \ 1 & x^{2}_1 & x^{2}_2 & ... & x^{2}_n \ :\ :\ 1 & x^{m}_{1} & x^{m}_2 & ... & x^{m}_n end{bmatrix}_{m ext{ x }n} * egin{bmatrix} heta_0\ heta_1\ :\ :\ heta_n end{bmatrix}_{n ext{ x }1} = egin{bmatrix} y_1\ y_2\ :\ :\ y_m end{bmatrix}_{m ext{ x } 1} ]

    即求解矩阵方程(XTheta=Y)

    利用Matlab或者Octave可以写成如下形式

    Theta = pinv(X' * X) * X' * Y % pinv 为伪逆函数
    

    过拟合与正则化

    每一个数据集都有可能出现一些异常样本,它们虽然也是真实的数据,但不满足其余大多数样本所共同构成的规律。例如,在面积-房价问题上,有可能出现某一个房子的面积很小,但是很贵,或者某一个房子面积很大,但十分便宜。再比如,加入我们要判断一个西瓜是否是好瓜,可供参考的属性包括「色泽,根蒂,纹理,形状」,对于其中「形状」这一属性,从直观上来考虑其对好瓜的影响较小,但特定的样本可能导致拟合出的参数受形状的影响过多。

    对于这类异常样本,如果学习过深就会强行使得构造出的目标函数通过或逼近这些异常样本,构造出来一个经验误差很小,而泛化误差很大的模型。这样的现象称为过拟合。显然,过拟合是一种不符合普遍规律的错误拟合,为了避免出现过拟合现象,一般采用正则化技术。

    对于线性回归,我们引入惩罚系数(lambda),以及惩罚项 (lambda * sum_{j=1}^{n} heta_j^2)

    • 梯度下降正则化

      [J( heta) = frac{1}{2m}[sum_{i=1}^m(h_ heta(x^{(i)})-y^{(i)})^2 + lambdasum_{j=1}^n heta_j^2] ]

    • 正规方程正则化

      [Theta = ext{pinv}(X^TX + lambda egin{bmatrix} 0 & 0 & 0 & 0 & ... & 0 \ 0 & 1 & 0 & 0 & ... & 0 \ 0 & 0 & 1 & 0 & ... & 0 \ 0 & 0 & 0 & 1 &... \ :\ :\ 0 & 0 & ... & ... &0 & 1 end{bmatrix}) * X^T * Y ]

    广义线性回归

    广义线性回归的常见形式:

    1. (y = g^{-1}(XTheta))

    2. (y = heta_0 + heta_1x_1 + heta_2(x_2)^2 + ...)

    广义线性回归可以利用换元法转换成一次多元线性回归来解决,其思想类似于特征缩放。不再赘述。

    ---- suffer now and live the rest of your life as a champion ----
  • 相关阅读:
    Extjs系列篇(3)—-model数据模型
    js中parseInt()会导致的一些问题
    Extjs系列篇(2)—-初步了解
    一步一步学python(七)
    一步一步学python(六)
    一步一步学python(五) -条件 循环和其他语句
    一步一步学python(四)
    一步一步学python(三)
    MFC socket网络通讯核心代码
    MFC 遍历FTP服务器目录中文乱码问题
  • 原文地址:https://www.cnblogs.com/popodynasty/p/13675432.html
Copyright © 2020-2023  润新知