Spark - MLlib线性回归截距和重量NaN

时间:2015-04-20 14:46:10

标签: apache-spark apache-spark-mllib

我尝试使用一些自定义数据在Spark上构建回归模型,截距和权重始终为nan。 这是我的数据:

data = [LabeledPoint(0.0, [27022.0]), LabeledPoint(1.0, [27077.0]), LabeledPoint(2.0, [27327.0]), LabeledPoint(3.0, [27127.0])]

输出:

(weights=[nan], intercept=nan)  

但是,如果我使用此数据集(取自Spark示例),则会返回非nan权重和截距。

data = [LabeledPoint(0.0, [0.0]), LabeledPoint(1.0, [1.0]), LabeledPoint(3.0, [2.0]),LabeledPoint(2.0, [3.0])]

输出:

(weights=[0.798729902914], intercept=0.3027117101297481) 

这是我目前的代码

model = LinearRegressionWithSGD.train(sc.parallelize(data), intercept=True)

我错过了什么吗?是因为我的数据上的数字那么大吗?这是我第一次使用MLlib,所以我可能会遗漏一些细节。

由于

1 个答案:

答案 0 :(得分:0)

MLlib线性回归是基于SGD的,因此您需要调整迭代和步长,请参阅https://spark.apache.org/docs/latest/mllib-optimization.html

我尝试了这样的自定义数据,并得到了一些结果(在scala中):

val numIterations = 20
val model = LinearRegressionWithSGD.train(sc.parallelize(data), numIterations)