逐步回归算法
监督式学习算法的任务是拟合多个特征与标签的关系,在实际应用中,所收集的数据中,所有的特征可能并不是都与标签有关联。模型中如果包含与标签无关联的特征,不仅会增加数据规模和计算量,还会影响模型对标签的预测效果。因此特征选择是监督式学习算法的一个重要组成部分。
逐步回归是一个贪心算法。它的运行效率较高,但也因为其是贪心算法,有时会做出次优的最优选择。
向前逐步回归算法
向前逐步回归算法是最简单的一种特征选择方法,大概做法为:在向前逐步回归算法的初始阶段,先选定第一个特征,然后重复执行以下几个步骤----首先计算只使用当前选定的特征的线性回归的均方误差,然后逐一引入尚未选取的特征,选择能最大程度降低均方误差的一个特征,判断该特征是否在统计意义上显著地降低均方误差,如果是,就将该特征加入模型。重复循环上述过程,直至没有能够被继续选中的特征为止。
判断选择的特征是否在统计意义上显著降低均方误差
在向前逐步回归算法中,采用F检验来判断均方误差的减小是否具有统计显著性。
给定两个均方误差mse1 和mse2,设mse1>mse2。用F检验计算mse1>mse2的置信度p。
置信度p是在重新采样训练数据并对其重复向前逐步选择算法时再次出现mse1>mse2的概率。
如果置信度p>95%,则认为mse1>mse2这一结论具有统计显著性。
import numpy as np
from scipy.stats import f
# 向前逐步选择
class StepwiseRegression():
def fit(self,X,y):
return np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
# 计算均方误差
def compute_mse(self,X,y):
w = self.fit(X,y)
r = y - X.dot(w)