问题标签 [apache-spark-ml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2038 浏览

apache-spark - Spark:如何获得伯努利朴素贝叶斯的概率和 AUC?

我正在运行Bernoulli Naive Bayes使用代码:

我的问题是如何获得 0 级(或 1 级)成员的概率并计算 AUC。我想获得与使用此代码LogisticRegressionWithSGD或使用此代码的位置相似的结果SVMWithSGD

不幸的是,此代码不适用于NaiveBayes.

0 投票
3 回答
13303 浏览

scala - 如何定义自定义聚合函数来对一列向量求和?

我有一个两列的DataFrame,ID类型IntVec类型Vectororg.apache.spark.mllib.linalg.Vector)。

DataFrame 如下所示:

我想groupBy($"ID")通过对向量求和来对每个组内的行进行聚合。

上述示例的期望输出将是:

可用的聚合函数将不起作用,例如df.groupBy($"ID").agg(sum($"Vec")将导致 ClassCastException。

如何实现一个自定义聚合函数,允许我对向量或数组进行求和或任何其他自定义操作?

0 投票
1 回答
1029 浏览

python - 如何使用初始 GaussianMixtureModel 训练 GMM?

我们正在尝试使用 Spark 上的 MLLIB 在 python 中训练具有指定初始模型的高斯混合模型 (GMM)。pyspark 的 Doc 1.5.1 说我们应该使用 GaussianMixtureModel 对象作为 GaussianMixture.train 方法的“initialModel”参数的输入。在创建我们自己的初始模型(例如,计划使用 Kmean 结果)之前,我们只是想测试这个场景。因此,我们尝试使用来自第一次训练的输出的 GaussianMixtureModel 初始化第二次训练。但是这个简单的场景会引发错误。你能帮我们确定这里发生了什么吗?非常感谢纪尧姆

PS:我们用 hadoop 2.6 运行 (py) spark 1.5.1

以下是简单的场景代码和错误:

这是带有错误的输出:

0 投票
1 回答
2941 浏览

scala - 在 Spark 中重新组合/连接 DataFrame 行

我有一个看起来像这样的 DataFrame:

我想根据“id”重新组合功能,以便获得以下信息:

这是我用来生成提到的 DataFrame 的代码

我一直在尝试使用 RDD 和 DataFrames 做不同的事情。到目前为止,最“有前途”的方法是基于“id”进行过滤

但我现在有两个瓶颈:

1)如何自动过滤“id”可能具有的所有不同值?

以下会产生错误:

2)如何将共同的“特征”连接到给定的“id”。没有尝试太多,因为我仍然坚持 1)

任何建议都非常受欢迎

注意:为澄清起见,每次出现“id”时,“label”总是相同的。对不起,我的任务的一个简单扩展也是对“标签”进行分组(更新示例)

0 投票
1 回答
2228 浏览

scala - 无法在一个简单的示例中从 spark ML 运行 RandomForestClassifier

我试图RandomForestClassifierspark.ml包(版本 1.5.2)运行实验。我使用的数据集来自Spark ML 指南LogisticRegression中的示例。

这是代码:

这是错误,我得到:

当函数试图计算列中的类数时,就会出现问题"label"

正如您在RandomForestClassifier 源代码的第 84 行所见,该函数调用DataFrame.schema带有参数的函数"label"。此调用正常并返回一个org.apache.spark.sql.types.StructField对象。然后,org.apache.spark.ml.util.MetadataUtils.getNumClasses调用该函数。由于它没有返回预期的输出,因此在第 87 行引发了异常。

快速浏览一下getNumClasses源代码后,我认为错误是由于 colmun 中的数据"label"两者都不BinaryAttributeNominalAttribute但是,我不知道如何解决这个问题。

我的问题:

我该如何解决这个问题?

非常感谢您阅读我的问题和您的帮助!

0 投票
1 回答
1110 浏览

scala - 在 Spark 中将列标记为分类

我目前正在使用 StringIndexer 将许多列转换为唯一整数,以便在 RandomForestModel 中进行分类。我还在为 ML 流程使用管道。

一些查询是

  1. RandomForestModel 如何知道哪些列是分类的。StringIndexer 将非数字转换为数字,但它是否添加了一些元数据以表明它是一个分类列?在 mllib.tree.RF 中有参数调用 categoricalInfo ,它指示列是分类的。ml.tree.RF 如何知道哪些是不存在的。

  2. 此外,StringIndexer 根据出现频率将类别映射到整数。现在,当新数据出现时,我如何确保这些数据与训练数据的编码一致?如果不再次对整个数据(包括新数据)进行 StringIndexing,我可以这样做吗?

我对如何实现这一点感到很困惑。

0 投票
0 回答
676 浏览

scala - 在 Spark 多类分类中处理看不见的分类变量和 MaxBins 计算

下面是我的 RandomForest 多类分类模型的代码。我正在读取 CSV 文件并进行代码中所见的各种转换。

  1. 我正在计算最大类别数,然后将其作为参数提供给 RF。这需要很多时间!是否有要设置的参数或更简单的方法让模型自动推断最大类别?因为它可以超过 1000 个,我不能省略它们。

  2. 我如何处理新数据上看不见的标签以进行预测,因为 StringIndexer 在这种情况下不起作用。下面的代码只是数据的一部分,但我将来也会引入新数据

    /li>
0 投票
1 回答
10333 浏览

scala - 在多列上使用 Spark ML 的 OneHotEncoder

我已经能够创建一个管道,允许我一次索引多个字符串列,但我无法对它们进行编码,因为与索引不同,编码器不是估计器,所以我从不根据OneHotEncoder 中的示例调用 fit文档

OneHotEncoder 对象没有 fit 方法,因此将其与索引器放在同一管道中将不起作用 - 当我在管道上调用 fit 时会引发错误。我也不能在使用管道阶段数组创建的管道上调用转换,one_hot_encoders.

我还没有找到一个很好的解决方案来使用 OneHotEncoder 而不单独为我要编码的所有列创建和调用转换本身

0 投票
1 回答
9818 浏览

apache-spark - Spark中的特征归一化算法

试图理解 Spark 的归一化算法。我的小测试集包含 5 个向量:

我希望这new Normalizer().transform(vectors)会创建JavaRDD每个向量特征被归一化为(v-mean)/stdev特征-0、`特征-1等
的所有值的位置。结果集是:

请注意,所有原始值 7000.0 都会产生不同的“标准化”值。此外,例如,1.357142668768307E-5当值为:.951-1-.95、时如何计算0?更重要的是,如果我删除一个功能,结果会有所不同。找不到有关该问题的任何文档。
事实上,我的问题是,如何正确规范化 RDD 中的所有向量?

0 投票
1 回答
1096 浏览

apache-spark - SPARK ML,朴素贝叶斯分类器:一类的高概率预测

我正在使用 Spark ML 优化朴素贝叶斯多类分类器。

我有大约 300 个类别,我正在对文本文档进行分类。训练集足够平衡,每个类别大约有 300 个训练样例。

一切看起来都很好,并且分类器在看不见的文档上以可接受的精度工作。但是我注意到,在对新文档进行分类时,分类器通常会为其中一个类别分配高概率(预测概率几乎等于 1),而其他类别的概率非常低(接近于零) .

可能的原因是什么?

我想补充一点,在 SPARK ML 中有一种叫做“原始预测”的东西,当我查看它时,我可以看到负数,但它们或多或少具有可比较的幅度,因此即使是高概率的类别也具有可比较的原始预测分数,但我在解释这个分数时发现困难。