机器学习算法——回归算法总结(一)
回归算法与分类算法都属于监督学习算法,不同的是,分类算法中标签是一些离散值,代表不同的分类,而回归算法中,标签是一些连续值,回归算法需要训练得到样本特征到这些连续标签之间的映射。
1.线性回归
2.局部加权回归
3.岭回归
4.Lasso回归
5.CART回归树
一 线性回归:
线性回归是一类重要的回归问题,在线性回归中,目标值和特征之间存在线性相关的关系
1 基本的线性回归
线性回归模型 一般有如下的线性回归方程:
y = b +
其中b为偏置 ,
为回归系数。对于上式令
=1 可以写成 y=
2 线性回归模型的损失函数
线性回归的评价是指如何度量预测值与标签之间的接近程度。线性回归模型的损失函数可以是绝对损失和平方损失
其中,绝对损失为 l = |y -
| 其中
为预测值,且
平方损失函数:l =
由于平方损失处处可导,通常使用平方误差作为线性回归模型的损失函数。
假设有m个样本,每个样本有n-1个特征,则平方误差可表示为:
l=0.5*
对于平方误差损失函数,线性回归的求解就是希望求得平方误差的最小值。
3 线性回归的最小二乘法
预测函数可以用矩阵的方式表示:Y = WX其损失函数可以表示为:
对 w进行求导,得
令其为零 可得
利用python实现最小二乘法十分简单:
import numpy as np
def least_square(feature,label):
w = (feature.T *feature).I * feature.T * label
return w
这中方法前提是要矩阵 是满秩矩阵,其逆矩阵才存在
4 牛顿法求解回归系数w(重要)
牛顿法的基本思想是利用迭代点 处的一介导数(梯度)和二阶导数(Hessen矩阵)对目标函数进行二次函数近似,然后把二次函数的极小值点作为新的迭代点,并不断重复这一个过程,知道求得满足精度的近似极小值。
基本牛顿法是一种基于导数的方法,它每一步的迭代方向都是沿着当前点的函数值下降方向。
对于一维的情况,对于一个需要求解的优化问题f(x),求其极值得问题,可以转换为导函数f`(x)=0.
对函数f(x)进行泰勒展开到二阶
对其求导(对x求导)得到:
=0 得到
这就是牛顿法的更新公式。
基本牛顿法流程:
1.给定终止误差值 0<ε<1 初始点
,令k=0;
2.计算
,若||
||<= ε,则停止,输出
3.计算
并求解线性方程组
得解
4.令
转2
基本牛顿法的优点是收敛速度快,局部二阶收敛性,但是缺点是需要初始点需要足够靠近极小点,否则算法可能不收敛。
全局牛顿法相对于基本牛顿法其实就是引入了一个搜索步长,这个步长的确定也是通过线性搜索得到的。(具体可参考董晓辉的优化方法那本书)
牛顿法需要计算Hessen矩阵的逆矩阵,计算量太大,可以利用拟牛顿法法,拟牛顿法核心是找一个矩阵近似代替Hessen矩阵的逆矩阵
二 局部加权线性回归
当数据的全局线性回归的性质不是那么完美时,线性回归中可能出现欠拟合问题。局部加权回归可以解决着这种情况。
局部加权回归采用的是给预测点附近的每一个点赋予一定的权重,
此时的回归系数可以表示为:
M是每个点的权重
LWLR使用核函数来对附近的点赋予更高的权重,常用的有高斯核,对应的权重为
其中 x是查询点,
是第i个训练样本,k是可调参数,控制训练点到查询点的权重衰减速率。
这样的权重矩阵只含对角元素。
def lwlr(testpoint,xArr,yArr,k=1.0):
xMat= mat(xArr)
yMat= mat(yArr)
m= shape(xMat)[0]
weights=mat(eye((m)))
for j in range(m):
diffMat = testpoint -xMat[j,:]
weights[j,j]=exp(diffMat*diffMat.T /(-2.0 *k**2)
xTx = xMat.T * (weights*xMat)
if linalg.det(xTX)==0.0:
print "This matrix is singular ,can not to inverse"
return
w = xTx.I *(xMat.T *(weights*yMat)
return testpoint * w
局部加权回归算法中,核函数的k值时唯一可调参数,当k值变小时,离测试点较远的点的权重会指数级减小,此时拟合数据的能力会变强。
局部加权线性回归算法中,我们对测试点附近的每一个点赋予一定的权重,在这个子集上基于最小均方差来进行普通的回归。