Stagewise Regression.

前向逐步回归(Stagewise Regression)属于一种贪心算法,通过对学习权重的逐步试探,得到局部最优的结果。

该方法不对需要求得损失函数的闭式解,可以应用于各种不同的损失函数上。

算法的主要流程如下:初始化权重$w$,在每轮迭代中预设回归误差为$+\infty$,对权重$w$的每一维度特征采用步长$\epsilon$进行增大或缩小,并计算回归误差。如果回归误差有所减小,则更新权重$w$。

def stageWise(X, Y, eps=0.01, n_Iter=100):
    # 获取数据信息
    N, D = np.shape(X)
    ws = np.zeros((D, 1))
    ws_optim = ws.copy()
    for i in range(n_Iter):
        lowest_Error = np.inf
        # 每一个维度进行搜索
        for d in range(D):
            # 2个搜索方向
            for sign in [-1, 1]:
                ws_temp = ws.copy()
                ws_temp[d] += eps*sign
                Y_hat = np.dot(X, ws_temp)
                # 计算误差
                error = np.sum((Y_hat-Y)*(Y_hat-Y))/N # 线性回归
                # error = np.sum((Y_hat-Y)*(Y_hat-Y))/N +0.1*np.sum(np.abs(ws_temp)**2) # 岭回归
                # error = np.sum((Y_hat-Y)*(Y_hat-Y))/N +0.1*np.sum(np.abs(ws_temp))  # LASSO回归
                # 如果误差减小则进行w保存
                if error < lowest_Error:
                    lowest_Error = error
                    ws_optim = ws_temp
    return ws_optim

下图给出了某数据集上,在前向逐步回归迭代过程中部分网络权重参数的变化情况。从图中可以看出,第$7$号参数首先出现显著地变化,表明该参数对应的特征重要性较高;反之$6$号参数几乎没有改变(一直是$0$),表明该位置对应的特征不重要。