前面讲述了分类,分类的目标变量是表称型的,对其进行分类,回归是对连续数据做出预测。目的就是预测目标值,最直接
的方法是写出一个目标公式,即回归方程,求这些回归系数的过程叫做回归。
本文回归指的都是线性回归,非线性暂不涉及。
常见算法和实现
1、 线性回归
2、 局部加权线性回归
3、 缩减系数
a、岭回归
b、Lasso
c、前向逐步回归
1 线性回归
从数据集中怎么求出回归方程呢,假设输入数据放在矩阵X中,回归系数存放在向量w中。那么对于给定的数据x1,预测的结果
将会通过给出。问题是,已得到的数据集x和对应的y,怎么才能得到w呢? 一个常用的方法就是找出使误差最小的w。
这里的误差是指预测y值和真实y值之间的差值。当然简单累加误差会正差值和
负差值相互抵消,所以一般采用平方误差。所以一般采用平方误差。
平方误差可以写成:
用矩阵表示
求极值求导得到:
上述公式中包含
需要对矩阵求逆,因此这个方程只有在逆矩阵存在时适用。
代码:
from numpy import *
def loadDataSet(fileName): #general function to parse tab -delimited floats
numFeat = len(open(fileName).readline().split('\t')) - 1 #get number of fields
dataMat = []; labelMat = []
fr = open(fileName)
for line in fr.readlines():
lineArr =[]
curLine = line.strip().split('\t')
for i in range(numFeat):
lineArr.append(float(curLine[i]))
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat,labelMat
def standRegres(xArr,yArr):
xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T*xMat
if linalg.det(xTx) == 0.0:
print "This matrix is singular, cannot do inverse"
return
ws = xTx.I * (xMat.T*yMat)
return ws
import regression
from numpy import *
impo