您的位置:首页 > 编程语言 > Python开发

岭回归

2016-03-13 11:20 666 查看
对于样本数据的特征比数据样本点还多的数据我们就没有办法使用标准线性回归和局部加权线性回归来计算,因为没有办法对矩阵求逆。所以这一小节我们引入岭回归来处理这种数据,当然岭回归也可以处理普通的数据。回归系数的计算公式:



在这个公式中我们加入了一项:

进而就可以对矩阵求逆,

是用户指定的值,



是一个单位矩阵,通过引入该项可以减少不重要的参数。了解了公式我们就来分析一下代码:
def ridgeRegres(xMat,yMat,lam=0.2):
xTx = xMat.T*xMat
denom = xTx + eye(shape(xMat)[1])*lam
if linalg.det(denom) == 0.0:
print "This matrix is singular, cannot do inverse"
return
ws = denom.I * (xMat.T*yMat)
return ws

def ridgeTest(xArr,yArr):
xMat = mat(xArr); yMat=mat(yArr).T
yMean = mean(yMat,0)
yMat = yMat - yMean
#regularize X's
xMeans = mean(xMat,0)
xVar = var(xMat,0)
xMat = (xMat - xMeans)/xVar
numTestPts = 30
wMat = zeros((numTestPts,shape(xMat)[1]))
for i in range(numTestPts):
ws = ridgeRegres(xMat,yMat,exp(i-10))
wMat[i,:]=ws.T
return wMat

第一个函数用于计算回归系数,就是上面公式的实现,输入参数分别为训练数据集和标签数据集。以及lam值,如果用户不指定就会默认为0.2.接下来分析第二个函数,首先为了能够岭回归和缩减技术首先要对特征做标准化处理。使每维的特征具有同等重要性。接下来要进行30次调用上面的函数求解回归系数,当然我们也可以自己定义调用次数。最后返回所有的回归系数,我们就可以在这些回归系数中挑选最好的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息