繁体   English   中英

Spark mllib 预测奇怪的数字或 NaN

[英]Spark mllib predicting weird number or NaN

我是 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 我究竟做错了什么? 是我的数据集(可能是它的大小?)还是我的配置?

问题在于LinearRegressionWithSGD使用随机梯度下降 (SGD) 来优化线性模型的权重向量。 SGD 对提供的用于更新中间解决方案的stepSize非常敏感。

SGD 所做的是在给定输入点样本和当前权重w情况下计算成本函数的梯度g 为了更新权重w你在g的相反方向上走一段距离。 距离是您的步长s

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

由于您没有提供明确的步长值,MLlib 假定stepSize = 1 这似乎不适用于您的用例。 我建议您尝试不同的步长,通常是较低的值,以查看LinearRegressionWithSGD行为:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM