【机器学习】线性回归

假设我们有许多样本数据{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 np
from 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).T
X_ = 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).T

y_ = X_ * A

plt.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值