【发布时间】:2017-06-05 21:13:21
【问题描述】:
我在 spark 上为合成数据集做 LogisticRegressionWithSGD。我已经使用香草梯度下降和 R 计算了 matlab 上的误差约为 5%。我得到的权重与我用来生成 y 的模型中使用的权重相似。数据集是使用this 示例生成的。
虽然我能够通过不同的步长调整最终获得非常接近的错误率,但各个特征的权重并不相同。事实上,它变化很大。我尝试了 LBFGS 的火花,它能够在几次迭代中正确预测误差和重量。我的问题是在 Spark 上使用 SGD 进行逻辑回归。
我得到的重量:
[0.466521045342,0.699614292387,0.932673108363,0.464446310304,0.231458578991,0.464372487994,0.700369689073,0.928407671516,0.467131704168,0.231629845549,0.46465456877,0.700207596219,0.935570594833,0.465697758292,0.230127949916]
我想要的重量:
[2,3,4,2,1,2,3,4,2,1,2,3,4,2,1]
拦截我得到:0.2638102010832128
我要拦截:1
Q.1。是合成数据集的问题吗?我尝试使用 minBatchFraction、stepSize、迭代和截距进行调整。我没弄好。
问题 2。为什么火花给我这个奇怪的重量?从 Spark 的模型中期望相似的权重会不会是错误的?
如果需要更多详细信息来回答我的问题,请告诉我。
【问题讨论】:
-
你为什么期望四舍五入的整数权重?至少我可以说这不是一个普遍的情况。其次,机器学习不能保证给出你想要的权重,它们是训练算法的输出。
-
我希望算法能够学习权重。它不必是四舍五入的整数,而是接近的值。另外,我期待这是因为合成数据集的创建方式。我可能是错的,但由于我能够在 Matlab 和 R 上得到非常接近我预期的权重,所以我也试图从 spark 的算法中得到同样的结果。
-
啊,我明白了,也许你应该小心的一件事是涉及一些随机性的 SGD(随机梯度体面)。
-
实际上仍然如此,您的权重在 0 和 1 之间进行了归一化,而预期的最大值是将您从 SGD 获得的所有值乘以 4,您甚至可以看到截距值的相关性跨度>
-
天哪,我认为你是对的。这样真的很有意义。我没有在文档中注意到它。非常感谢!
标签: apache-spark machine-learning pyspark logistic-regression gradient-descent