python - 这个梯度下降算法有什么问题呢?

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

X_train 已使用 StandardScaler() 进行标准化,并且分类列已转换为一种热编码。

X_train.shape=(32000, 37)

我使用以下代码通过梯度下降来计算 w 的值

w = np.zeros(len(X_train.columns))
learning_rate = 0.001    
for t in range(1000):
    Yhat = X.dot(w)
    delta = Yhat - Y_train
    w = w - learning_rate*X_train.T.dot(delta)

我的 w 向量爆炸(即增加得非常快),并且 w 的每个条目都变成 NaN。我尝试将纪元数减少到 10、15、20 等,结果发现 w 的每个元素都在发散而不是收敛。

我尝试使用正规方程,在这种情况下 w 确实表现得很好(为了可读性添加了换行符):

w_found_using_normal_eqns = [ 3.53175449e-14  1.27924991e-14 -5.42441539e-14
9.91098366e-16 -2.31752259e-14 -6.21205773e-13  1.66139358e-13
2.72739782e-13 -1.65076881e-13 -1.25280166e-14 -1.98905983e-14  3.78837632e-13
-1.39424696e-12 -6.48511452e-15  1.58136412e-14  1.39778439e-12
-1.06142667e-14  3.00624557e-14 -1.70159700e-15 -6.91500349e-15 -4.04842208e-15
2.37516654e-16  3.25211677e+01 -2.86074823e+01 -2.86074823e+01
-2.86074823e+01 -2.86074823e+01 -2.86074823e+01 -2.86074823e+01 -2.86074823e+01 
3.55024823e+01  3.55024823e+01 3.55024823e+01  3.55024823e+01  
3.55024823e+01  3.55024823e+01 3.55024823e+01]

如果我使用正规方程求解 w,则 r^2 错误为 1

最佳答案

梯度下降权重更新公式通过训练集大小进行归一化。

在最后一行,您需要将学习率除以训练集大小。

修复代码:

w = w - (learning_rate/X_train.shape) * X_train.T.dot(delta)

关于python - 这个梯度下降算法有什么问题呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51706714/

相关文章:

python - UTF-8编码、字典查找

python - 基本 Pygame 程序未执行

python - 在所有可能的地方添加位

machine-learning - 实现一个国际象棋引擎有多难?

python - 如何使用 python、sklearn 预测未知 X 值的多维时间序列

python - 将 Pandas DateTimeIndex 转换为 Unix 时间?

machine-learning - Keras 验证准确度为 0,并且在整个训练过程中保持不变

python - 如何打印 Gridsearch 中每个组合的准确度分数?

python - 从函数的输出添加新列到 Pandas Dataframe

python - 我可以在线性回归模型中应用交叉验证吗?