如何使用spark为合成数据集正确获取权重?

时间:2017-06-05 21:13:21

标签: apache-spark machine-learning pyspark logistic-regression gradient-descent

我在合成数据集的spark上做LogisticRegressionWithSGD。我使用香草梯度下降计算了matlab上的误差,并且在R上计算了~5%的误差。我得到了类似的重量,用于我用来生成y的模型。数据集是使用this示例生成的。

虽然我可以通过不同的步长调整来获得非常接近的错误率,但个别功能的权重却不一样。事实上,它变化很大。我尝试了LBFGS的火花,它能够在几次迭代中正确预测误差和重量。我的问题是使用火花上的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,iteration和intercept进行调整。我无法做对。

Q.2。为什么火花给我这种奇怪的重量?期望Spark的模型具有相似的权重是不是错了吗?

如果需要额外的详细信息来回答我的问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

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