接下来我们讨论另一个简单点的计算回归系数的方法:前向逐步回归。该算法属于贪心算法,经过多次迭代计算出最佳的回归系数,在每次迭代中增加或减少某个权重观察其错误率变化。选择对误差影响小的方向:
def stageWise(xArr,yArr,eps=0.01,numIt=100):
xMat = mat(xArr); yMat=mat(yArr).T
yMean = mean(yMat,0)
yMat = yMat - yMean
xMat = regularize(xMat)
m,n=shape(xMat)
returnMat = zeros((numIt,n))
ws = zeros((n,1)); wsTest = ws.copy(); wsMax = ws.copy()
for i in range(numIt):
print ws.T
lowestError = inf;
for j in range(n):
for sign in [-1,1]:
wsTest = ws.copy()
wsTest[j] += eps*sign
yTest = xMat*wsTest
rssE = rssError(yMat.A,yTest.A)
if rssE < lowestError:
lowestError = rssE
wsMax = wsTest
ws = wsMax.copy()
returnMat[i,:]=ws.T
return returnMat
输入有四个参数,分别是训练数据集和标签数据集,eps代表每次迭代移动的步长,numIt表示迭代的次数,如果在迭代过程中出现震荡现象,则可以减小步长或者增加步数。该算法首先对数据进行标准化,接下来进行迭代,在迭代过程中比较增加减少特征对误差的影响,最后选择影响最小的方式。迭代结束就返回回归系数。