### 在Python中,线性回归对y=mx+c中较大的x值会导致梯度爆炸

这是我的Python代码,实现了梯度下降。如果y=mx+c中的x值足够小(例如:此代码中的0-1),它可以完美运行。如果我将x = np.random.rand(1,500)改为x = np.random.rand(1,500)*100,梯度(dlw和dlc)就会爆炸,并且在几次迭代后它们会变成nan值(因此权重w和偏差c也变成nan)。这里出了什么问题?

class LinearRegression: def __init__(self,lr=0.01,iter=2000):    self.lr = lr    self.iter = iter def gradient_descent(self,y,x):    for i in range(self.iter):        yhat = np.dot(self.w.T,x) + self.c        dlw = (2/self.m)*np.dot(x, (yhat-y).T)        dlc = (2/self.m)*np.sum(yhat-y)        self.w = self.w - self.lr*dlw        self.c = self.c - self.lr*dlc def run(self, y, x):    self.m = x.shape[1]    self.n = x.shape[0]    self.w = np.zeros((self.n,1))    self.c = 0    self.gradient_descent(y,x)    return self.w, self.cdef main():    x = np.random.rand(1,500) #nxm (n = no of features, m = no of examples)    print (x.shape)    y = 5*x + 3 +(np.random.randn(1,500)*0.1)    algorithm = LinearRegression()    w,c = algorithm.run(y,x)    print (w,c) if __name__ == '__main__':    main()

回答:

并没有什么“错误”,即使是线性回归的情况,梯度下降也无法收敛,除非学习率足够小。通过重新缩放你的数据,你实际上也在重新缩放你的学习率。

作为现象的示例性数学分析:https://www.stat.cmu.edu/~ryantibs/convexopt-F13/scribes/lec6.pdf

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注