前言
前一篇博客,我们使用了缩减法中的岭回归来改进线性回归算法。其好处是能够减少过拟合,增大模型方差减小偏差。此博客将使用另一种方法对线性回归算法进行改进,其主要目的是找出对结果影响最大的几个属性值。
背景
和岭回归一样,lasso是也是属于缩减法的一种。但是由于其计算比较复杂,繁琐,我们使用另外一个简单的算法进行替代,这个算法就是前向逐步算法,该算法可以达到和lasso算法几乎一样的结果。
这里前向逐步算法主要使用了贪心算法的思想,即每进行一步都要减少误差,直到最后迭代结束。
前向逐步算法原理分析
该算法使用两层循环,第一层是迭代次数,第二层是属性值。
主要步骤如下:
对数据进行标准化处理
第一层循环迭代次数:
初始化一个损失值F
第二层属性值个数:
对每个属性进行添加(减少)步长
计算修改之后的属性值乘以数据,即计算当前预测值
计算预测值和实际值的差平方和B
如果B小于F:
则修改成功,保持修改、
否则:
不进行修改
其主要步骤就是在每次迭代中,对每个属性值进行修改,然后使用修改后的属性值参数进行预测,通过计算差平方和,来判定修改是否有利于减少误差,再决定是否进行此次修改。
就这样一步一步的去减少误差,总的方向是向着减少误差的方向前进,所以该算法命名为 前向逐步算法
源代码解析
1. 加载数据
#加载数据
def LoadData(filename):
dataMat = []
labelMat = []
with open(filename) as f:
numFeat = len(f.readline().split('\t'))-1#这里会导致忽略第一个数据
f.seek(0)#避免第一条数据丢失
for line in f.readlines():
lineArr = []
curLine = line.strip().split('\t')
for i in range(numFeat)