线性回归

  在给定由d个属性描述的示例x=(x[1]; x[2];…x[d]),其中xi为样本x在第i个属性上的取值,线性模型试图学得一个属性的线性组合来进行预测的函数,即

       f(x) =w1 x[1]+w2 x[2]+w3 x[3]+…+wd x[d]+b;

  一般写成

f(x)=w.x+b

  线性建模形式简单、易于建模,但是却蕴含着机器学习中一些重要的基本思想,许多功能强大的非线性模型可在线性模型的基础上通过引入层级结构或者高维映射而得。

一 线性回归模型

 

  (1)属性处理:对于离散属性,如果属性间存在“序关系”,可通过连续化,将其转化为连续值,例如身高属性的“高”“矮”可以转化为{1.0, 0.0},三值属性“高度”的取值“高”“中”“低”可转化为{1.0, 0.5, 0.0}。如果属性间不存在“序关系”,假定K个属性值,则通常转化为K维向量,例如属性“方向”的取值为“东”“西”“南”“北”。可以转化为(0,0,0,1)(0,0,1,0)(0,1,0,0)(1,0,0,0)。即One-hot编码。

  线性回归试图学得

     f(Xi) = w.Xi+b。  使得f(Xi)与Yi最相近。

   (2)拟合函数已经有了,如何确定w与b?在之前感知机中,我们将衡量:误分类点与分类超平面之间的距离。在线性回归模型中,均方误差是最常用的性能度量。因此线性回归的学习策略是将均方误差最小化即可。

     

  基于最小均方误差进行模型求解的方法称为“最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线上个欧式距离之和最小。

  求解w,b使得目标函数最小化的过程,称为线性回归模型的最小二乘“参数估计”。可以对w,b分别求导。

  如果每个样本是多属性的,不再是单属性的,比如d维。此时线性回归模型试图学得:

    使得f(Xi)与Yi最近似。

这称为多元线性回归。

        同理,用最小二乘法对w和b进行估计。为了方便,将w和b吸收入向量形式=(W:b)

  此时,数据集D表示为MX(d+1)大小的矩阵,即矩阵X。前d维维属性值,最后一维全部为1,用来跟b相乘。

此时均方误差最小化函数为:

      

     

  (1)      当(X^T*X )为满秩矩阵时,线性回归模型可以直接求解出来

  (2)      但是在现实任务中,往往不是满秩矩阵,此时可能有多个解。选择哪一个解作为输出,将由学习算法的归纳偏好确定,常见的做法是引入正则项



广义线性模型:

  令模型预测值逼近Y的衍生值,例我们认为示例所对应的输出标记是在指数尺度上变化,即可将输出标记的对数作为线性模型逼近的目标,即

         

   这就是对数线性回归,尽管上式在形式上仍然属于线性回归,但是实质上已经是在求取输入空间到输出空间的非线性映射。

   一般化:考虑单调可微函数g(.),令:

       

    称为广义线性模型,其中函数g(.)称为联系函数。

 

 

  岭回归(Ridge regression)引入了一种对系数大小进行惩罚的措施,来解决普通最小二乘可能遇到的某些问题。岭回归最小化带有惩罚项的残差平方和。其实就是在回归问题中使用了L2范数,那么此类回归就是岭回归。

    

  此处的>=0是一个复杂的参数,用以控制系数的缩减量。值越大,系数缩减得越多,因而对共线性更加鲁棒。

   

  Lasso是一种预测稀疏系数的线性模型。在某些情况下,Lasso非常有用。因为其倾向于选择拥有更少参数数量的模型,从而减少了最终方案所依赖的变量个数。这样的特性使得Lasso和它的变种成为了压缩感知这一领域的基石。在线性回归中俄正则化项使用了L1范数。

 

   弹性网(ElasticNet)同时使用L1和L2正则化项来训练线性回归模型。使用这样组合可以得到一个稀疏模型型,也就是像Lasso那样只有少量权值是非零的,同时这样的模型还能保持Ridge的正则化特性。我们使用参数来控制L1和L2的凸组合。

  

  当多个特征互相相关时,弹性网就会派上用场。面对这样的情况,Lasso可能会随机选择一个特征,而弹性网两个都会选择。在Lasso和岭回归中选择一个平衡点的优势在于,它允许弹性网在轮转情况下继承岭回归的某些稳定性。


  利用Python的机器学习库scikit-learn来进行广义线性回归的仿真。下面是简单的代码。

  (1)普通的线性回归

#coding=utf-8

from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit([[0,0],[1,1],[2,2]],[2,4,6])
print clf.coef_           #权重系数w
print clf.intercept_      #截距b
print clf.predict([3,3])  #根据得到的函数进行预测


  (2)岭回归。设置alpha为0.5

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

clf = linear_model.Ridge(alpha=0.5)
clf.fit([[0, 0], [0, 0], [1, 1]], [0, 0.1, 1])
print clf.coef_
print clf.intercept_


  (3)Lasso回归。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

clf = linear_model.Lasso(alpha=0.1)
clf.fit([[0,0],[1,1],[0,1]],[0,0.1,1])
print clf.predict([1,1])




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值