【问题标题】:Ridge regression using stochastic gradient descent in Python在 Python 中使用随机梯度下降的岭回归
【发布时间】:2017-09-24 17:28:09
【问题描述】:

我正在尝试使用随机梯度下降作为求解器在 Python 中实现岭回归的解决方案。我的 SGD 代码如下:

def fit(self, X, Y):
    # Convert to data frame in case X is numpy matrix
    X = pd.DataFrame(X)

    # Define a function to calculate the error given a weight vector beta and a training example xi, yi

    # Prepend a column of 1s to the data for the intercept
    X.insert(0, 'intercept', np.array([1.0]*X.shape[0]))

    # Find dimensions of train
    m, d = X.shape

    # Initialize weights to random
    beta = self.initializeRandomWeights(d)
    beta_prev = None

    epochs = 0
    prev_error = None
    while (beta_prev is None or epochs < self.nb_epochs):
        print("## Epoch: " + str(epochs))
        indices = range(0, m)
        shuffle(indices)
        for i in indices:   # Pick a training example from a randomly shuffled set
            beta_prev = beta
            xi = X.iloc[i]
            errori = sum(beta*xi) - Y[i]    # Error[i] = sum(beta*x) - y = error of ith training example
            gradient_vector = xi*errori + self.l*beta_prev
            beta = beta_prev - self.alpha*gradient_vector
        epochs += 1

我正在测试的数据没有标准化,我的实现总是以所有权重为无穷大,即使我将权重向量初始化为低值。只有当我将学习率 alpha 设置为非常小的值 ~1e-8 时,算法才会以权重向量的有效值结束。

我的理解是,规范化/缩放输入特征只会有助于减少收敛时间。但是如果特征没有被归一化,算法应该不会不能作为一个整体收敛。我的理解正确吗?

【问题讨论】:

    标签: python optimization machine-learning linear-regression gradient-descent


    【解决方案1】:

    您可以从scikit-learn's Stochastic Gradient Descent 文档中查看该算法的缺点之一是它对特征缩放很敏感。一般来说,基于梯度的优化算法在归一化数据上的收敛速度更快。

    此外,归一化有利于回归方法。

    每一步对系数的更新将取决于每个特征的范围。此外,正则化项将受到大特征值的严重影响。

    SGD可能在没有数据标准化的情况下收敛,但这取决于手头的数据。因此,您的假设是不正确的。

    【讨论】:

      【解决方案2】:

      你的假设不正确。

      很难回答这个问题,因为有很多不同的方法/环境,但我会尝试提及一些要点。

      标准化

      • 当某些方法不是尺度不变的(我认为每个线性回归都不是)时,您确实应该标准化您的数据
        • 我认为您只是因为调试/分析而忽略了这一点
      • 规范化数据不仅与收敛时间相关,结果也会有所不同(考虑损失函数内的影响;大值可能对小值产生更大的损失)!

      收敛

      • 关于规范化/非规范化数据的许多方法的收敛性可能有很多要说明的地方,但您的情况很特殊:
        • SGD 的收敛理论仅保证某些超参数选择(学习率和学习进度/衰减)收敛到某个局部最小值(= 凸优化问题中的全局最小值)
        • 当这些参数不正确时,即使是优化规范化数据也可能因 SGD 而失败!
          • 这是 SGD 最重要的缺点之一;对超参数的依赖
        • 由于 SGD 基于梯度和步长,非归一化数据可能会对无法实现这种收敛产生巨大影响!

      【讨论】:

        猜你喜欢
        • 2021-04-30
        • 2021-02-20
        • 1970-01-01
        • 2020-04-16
        • 2014-05-13
        • 2018-10-24
        • 2016-09-25
        • 1970-01-01
        • 2016-06-13
        相关资源
        最近更新 更多