当前位置: 首页 > 面试题库 >

Spark mllib预测怪异数或NaN

简烨烁
2023-03-14
问题内容

我是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的作用是给g定输入点和当前权重的样本,计算成本函数的梯度w。为了更新权重,w您需要沿的相反方向走一段距离g。距离是您的步长s

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

由于您未提供明确的步长值,因此MLlib假定为stepSize = 1。这似乎不适用于您的用例。我建议您尝试使用不同的步长(通常是较低的值),以了解LinearRegressionWithSGD其行为方式:

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


 类似资料:
  • 主要内容:1. 运行时异常,2. 检查异常在本教程中,我们将演示如何使用TestNG expectedExceptions来测试代码中的预期异常抛出。 创建一个名称为 ExpectedExceptionTest 的 Maven 工程,其结构如下所示 - 1. 运行时异常 此示例显示如何测试运行时异常。 如果方法抛出一个运行时异常 — ,它会获得通过。 创建一个测试文件:TestRuntime.java ,其代码如下所示 - 运行上面代码,

  • 问题内容: 为什么这样做有效: 但这不是: 如果我有一个数组实例变量,并且想在我的构造函数中对其进行初始化,那么我不必走 我觉得我在这里想念什么吗? 问题答案: 这里的构造在Java中称为数组初始化器。这是一个特殊的速记,仅在某些语法构造中可用: [JLS 10.6数组初始化器](http://java.sun.com/docs/books/jls/third_edition/html/array

  • 问题内容: 我目前正在将H2O用于分类问题数据集。我正在python 3.6环境中对其进行测试。我注意到预测方法的结果是给出0到1之间的值(我假设这是概率)。 在我的数据集中,目标属性是数字,即值是1且值是0。我确保将类型转换为目标属性的类别,但仍得到相同的结果。 然后我修改了代码,仍然使用H2OFrame上的方法将目标列转换为因数,结果没有任何变化。 但是,当我分别将target属性中的值分别更

  • 我正在设计一个网站,有一些h3标题和段落,包装在一个名为“featured-info”的div类中。此外,我还有一个footer元素,它位于主体中的主包装器中。各段用斜体字写成: 并且页脚有边框: 页脚文本也是一个h4向上感知: 主要的问题是我有一个设置:@media screen和(最小宽度:750px),它使一些导航按钮内联,并调整一些文本的大小,但是...当页面大小小于750px时,页脚样式

  • 我正在编写一些音频代码,其中基本上所有内容都是一个小循环。据我所知,分支预测失败是一个足够大的性能问题,我很难保持代码分支的自由。但是只有这么远的时间才能带我,这让我想知道不同类型的分支。 在 c 中,固定目标的条件分支: 并且(如果我正确理解这个问题),无条件分支到变量目标: 是否存在性能差异?在我看来,如果这两种方法中的一种明显快于另一种,编译器只需将代码转换为匹配即可。 对于那些分支预测非常

  • 样本输入:n=3,x=2 示例输出:1 1 2 说明:我们必须打印3个具有最小和的自然数,因此n间隔的数是[1,1,2] 有人知道如何使数组和最小吗?