【问题标题】:How to correctly get the weights using spark for synthetic dataset?如何使用 spark 为合成数据集正确获取权重?
【发布时间】: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


【解决方案1】:

它实际上确实收敛了,你的权重在 0 和 1 之间进行了归一化,而预期的最大值是将你从 SGD 得到的所有值乘以 4,你甚至可以看到截距值的相关性。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2018-09-17
    • 2016-11-09
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多