我尝试使用一些自定义数据在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,所以我可能会遗漏一些细节。
由于
答案 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)