机器学习算法与Python实践(3)

来源:互联网 发布:网络书香讲坛 编辑:程序博客网 时间:2024/05/17 22:45
关于逐步回归的资料,查阅等等都比较的少,所以隔了一天才进行总结。

前向逐步回归算法

  前向逐步回归算法属于一种贪心算法,即每一步都尽可能减少误差。一开始,所有的权重都设置为1,然后每一步所做的决策是对某个权重增加或减少一个很小的值。
  观察每次循环得到的回归系数,一段时间后会出现系数达到饱和并在特定值之间来回震荡的情况,这是由于步长设置过大导致的。
  当我们构建一个模型后,运行该算法找到重要的特征,这样就有可能及时停止对那些不重要特征(非常小,趋于零的回归系数)的收集。
  
看起来可能有点太抽象了,看下面的伪代码以及代码的例子就可以理解了。

伪代码如下:

数据标准化,使其分布满足0均值和单位方差每次迭代过程中:    设置当前最小误差lowestError为正无穷    对每个特称:        增大或减小:            改变一个系数得到一个新的w            计算新的w下的误差            如果当前误差w小雨最小误差lowestError,那么将wbest设置为w

Python代码如下:

### Front stage-wise Regression ###def rssError(yArr, yHatArr):    return ((yArr - yHatArr) ** 2).sum()def regularize(xMat):  # regularize by columns      inMat = xMat.copy()    inMeans = mean(inMat, 0)  # calc mean then subtract it off      inVar = var(inMat, 0)  # calc variance of Xi then divide by it      inMat = (inMat - inMeans) / inVar    return inMatdef stageWise(xArr, yArr, step=0.01, numIt=100):    xMat = mat(xArr)    xMat = regularize(xMat)    yMat = mat(yArr).T    yMean = mean(yMat)    yMat = yMat - yMean    N, n = shape(xMat)    returnMat = zeros((numIt, n))    ws = zeros((n, 1))    wsTest = ws.copy()    weMax = ws.copy()    for ii in range(numIt):        print(ws.T)        lowestErr = inf        for jj in range(n):            for sign in [-1, 1]:                wsTest = ws.copy()                wsTest[jj] += step * sign                yTest = xMat * wsTest                rssE = rssError(yMat.A, yTest.A)                if rssE < lowestErr:                    lowestErr = rssE                    wsMax = wsTest        ws = wsMax.copy()        returnMat[ii, :] = ws.T    return returnMat

看别人总结都是和岭回归等一起总结的,所以等到时候我会将这篇文章进行更新。

原创粉丝点击