星火mllib预测奇异数或NaN星火mllib预测奇异数或NaN(Spark mllib predi

2019-05-12 03:23发布

我是新来的Apache Spark和试图利用机器学习库来预测一些数据。 我的数据集,现在只有约350点。 下面是这些点的7:

"365","4",41401.387,5330569
"364","3",51517.886,5946290
"363","2",55059.838,6097388
"362","1",43780.977,5304694
"361","7",46447.196,5471836
"360","6",50656.121,5849862
"359","5",44494.476,5460289

这里是我的代码:

def parsePoint(line):
    split = map(sanitize, line.split(','))
    rev = split.pop(-2)
    return LabeledPoint(rev, split)

def sanitize(value):
    return float(value.strip('"'))

parsedData = textFile.map(parsePoint)
model = LinearRegressionWithSGD.train(parsedData, iterations=10)

print model.predict(parsedData.first().features)

该预测是一些完全疯了,像-6.92840330273e+136 。 如果我不设置迭代train()然后我得到nan结果。 我究竟做错了什么? 这是我的数据集(它的大小,也许?)或我的配置?

Answer 1:

的问题是, LinearRegressionWithSGD使用随机梯度下降(SGD)到优化线性模型的权重向量。 SGD是所提供的真敏感stepSize哪个被用于更新所述中间溶液。

什么SGD确实是计算梯度g给出的输入点和当前的权重的样本所述成本函数的w 。 为了更新权重w你去在相反的方向的一定距离g 。 距离是你的步长s

w(i+1) = w(i) - s * g   

既然你没有提供一个明确的步长值,MLlib假定stepSize = 1 。 这似乎不是为你的使用情况工作。 我建议你尝试不同的步长,通常较低的值,来看看如何LinearRegressionWithSGD行为:

LinearRegressionWithSGD.train(parsedData, numIterartions = 10, stepSize = 0.001) 


文章来源: Spark mllib predicting weird number or NaN