前向逐步回归

前向逐步回归

  • 1、也是解决和岭回归一样问题的算法。
  • 2、前向逐步回归属于一种贪心算法,即每一步都尽可能减少误差,一开始,所有的权重都是设为1,然后每一步所做的决策时对某个权重增加或减少一个很小的值。
  • 3、伪代码:
     
    数据标准化,使其分布满足0均值和单位方差
    在每轮迭代过程中:
    设置当前最小的误差lowestError为正无穷
    对每一个特征值:
    增大或减少:
    改变一个系数得到一个新的w
    计算新w下的误差
    如果误差Error小于当前最小误差lowestErroe:
    设置wbest等于当前的w
    将w设置为新的wbest
  • 4、代码
# coding=utf-8 

from numpy import *
import numpy as np
import pylab as pl
#处理数据
def loadDataSet(fileName):
    numFeat = len(open(fileName).readline().split('\t')) - 1 
    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 rssError(yArr, yHatArr):
    return ((yArr - yHatArr)**2).sum()

def stagewise(xMat, yMat, numit = 1000, eps = 0.005):
    xMat = mat(xMat)
    yMat = mat(yMat).T
    ymean = mean(yMat, 0)
    yMat = yMat - ymean
    xMat = (xMat - mean(xMat, 0))/var(xMat, 0)
    m, n = shape(xMat)
    returnMat = zeros((numit, n))
    ws = zeros((n, 1))
    wsTest = ws.copy()
    wsMax = ws.copy()
    for i in range(numit):
        print i
        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

def show(ws):
    pl.plot(ws)
    pl.show()

def main():
    xArr,yArr = loadDataSet(r"C:\Users\l\Desktop\abalone.txt")
    ws = stagewise(xArr, yArr)
    print ws
    show(ws)

if __name__ == '__main__':
    main();

结果样例

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值