Python 这个梯度下降算法有什么问题?
Python 这个梯度下降算法有什么问题?,python,machine-learning,linear-regression,gradient-descent,Python,Machine Learning,Linear Regression,Gradient Descent,X\u 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
X\u 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)
Myw
向量爆炸(即增加非常快),并且w
的每个条目都变成NaN
。我试着将历代的数量减少到10、15、20等等,我发现w
的每个元素都在发散而不是会聚
我试着使用正规方程,在这种情况下,w
确实很好(为了可读性增加了换行符):
r^2
错误是1
如果我使用正态方程来求解w
梯度下降权重更新公式通过训练集大小标准化
在最后一行中,您需要将学习率除以训练集大小
修复代码:
w = w - (learning_rate/X_train.shape) * X_train.T.dot(delta)
梯度下降权重更新公式通过训练集大小进行归一化 在最后一行中,您需要将学习率除以训练集大小 修复代码:
w = w - (learning_rate/X_train.shape) * X_train.T.dot(delta)
在发生这种情况时,您能提供最小工作代码吗?在发生这种情况时,您能提供最小工作代码吗?因为权重更新发生在每次迭代之后(批=1),不需要avg,因为权重更新发生在每次迭代之后(批=1),不需要avg