【机器学习】线性回归

来源:互联网 发布:美发教程软件下载 编辑:程序博客网 时间:2024/05/18 04:21

假设我们有许多样本数据{x(i),y(i)},其中x(i)是第i个样本变量,y(i)是第i个变量的类别,对于每个样本变量都有许多特征feature(x)=X=x1,x2,xn,现在我们建立判别函数hθ(x)=θ1x1+θnxn,线性回归的目标是找到判别函数的最佳系数,尽量让判别函数对待测试数据的分类结果正确。
为了让判别函数与真实结果尽量一致,我们要让判别函数的结果与真实分类结果的差的绝对值最小。但是绝对值是不好计算的,因此我们把差的绝对值换成差的平方,写成:

J(θ)=12i=1s(hθ(x(i))y(i))2

这里添加1/2系数是为了方便求导的时候去掉常数系数,因为常数项并不影响求解;s是样本个数。这个函数称为损失函数。
求解这个方程常用的有最小二乘法、梯度下降法。
(1)最小二乘法经常用来最小化误差的平方和来拟合数据。这个方法刚好就适用于现在的问题,我们将x看做自变量,y看做因变量,现在x-y函数坐标系中有很多(x,y)点,现在就是求解一条拟合曲线来适合数据,使得所有的(x,y)点离拟合曲线的距离之和最短。在《矩阵论》中,最小二乘法可以简单的通过一个矩阵来求解。令
X=x11...xm1.........x1n...xmnY=[y1,...ym]T
,判别函数系数β=[θ1,...θn]T,则对于所有的数据有
Xβ=Y

最小二乘法是最小化误差,误差为
δ=12(XβY)2

由于是二次函数,因此极值点肯定在导数为0的位置,对误差函数的系数求导得到:
XTXβXTY=0β=(XTX)1XTY

这样就求出了判别函数项。
(2)梯度下降法能求出极值的原理可以参照牛顿下降法。梯度下降法最终也是收敛到导函数为0的地方。对于误差函数J(q),我现在有一个判别函数系数初始值q0,那么不断更新qk+1=qk+aÑ J(q),其中a是步长,是一个经验值,Ñ表示求导,这里是对q求导。如此迭代下去直到q收敛,就是最终的判别函数系数。

来看一个例子。现在我给定一组区间为[-5.0,9.0]的数据,计算公式为y=12x2+3x+5+noise。显然这不是一批线性数据,而是二次型数据,然而如果我们把特征看做

f=x2x1
那么这就等价于线性模型,也就是高维线性模型。python代码如下

import numpy as npfrom matplotlib import pyplot as plt X = np.arange(-5.,9.,0.1)X=np.random.permutation(X)b=5.y=0.5 * X ** 2.0 +3. * X + b + np.random.random(X.shape)* 10.X_ = np.mat(X).TX_ = np.hstack((np.square(X_) , X_))X_ = np.hstack((X_, np.mat(np.ones(len(X))).T))A=(X_.T*X_).I*X_.T * np.mat(y).Ty_ = X_ * Aplt.hold(True)plt.plot(X,y,'r.',fillstyle='none')plt.plot(X,y_,'bo',fillstyle='none')plt.show()

这里写图片描述
原来的线性回归博客不是markdown写的,现在更新一下。
正则化详细例子参见贝叶斯线性回归
https://github.com/artzers/MachineLearning.git LineaRegression

0 0
原创粉丝点击