最大似然线性回归tensorflow

在我使用梯度下降法实现了一个简单线性回归问题的LS估计后,我现在尝试使用最大似然法做同样的事情。我使用了来自维基百科的这个方程。需要找到最大值。

train_X = np.random.rand(100, 1) # 所有值 [0-1)train_Y = train_XX = tf.placeholder("float", None)Y = tf.placeholder("float", None)theta_0 = tf.Variable(np.random.randn())theta_1 = tf.Variable(np.random.randn())var = tf.Variable(0.5)hypothesis = tf.add(theta_0, tf.mul(X, theta_1))lhf = 1 * (50 * np.log(2*np.pi) + 50 * tf.log(var) + (1/(2*var)) * tf.reduce_sum(tf.pow(hypothesis - Y, 2)))op = tf.train.GradientDescentOptimizer(0.01).minimize(lhf)

这个代码可以工作,但我对它仍然有一些疑问:

  • 如果我将lhf函数从1 *改为-1 *并最小化-lhf(根据方程),它就不工作了。但这是为什么呢?
  • 在优化过程中,lhf的值上升和下降。难道它不应该只朝一个方向变化吗?
  • 在优化过程中,lhf的值有时会变成NaN。我怎样才能避免这种情况?
  • 在方程中,σ²是误差的方差(对吗?)。我的值完美地在一条直线上。为什么我得到的var值会超过100?

回答:

您的问题中的症状表明了一个常见的问题:学习率或步长可能对该问题来说太高了。

当学习率过高时,函数值呈锯齿形上升和下降是常见的现象,尤其是在出现NaN值时。

最简单的解决方案是降低学习率,通过将当前学习率除以10,直到学习曲线平滑且没有NaN值或上下波动行为。

由于您使用的是TensorFlow,您也可以尝试使用AdamOptimizer,因为它会在训练过程中动态调整学习率。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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