问题标签 [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.
apache-spark - Spark:如何获得伯努利朴素贝叶斯的概率和 AUC?
我正在运行Bernoulli Naive Bayes
使用代码:
我的问题是如何获得 0 级(或 1 级)成员的概率并计算 AUC。我想获得与使用此代码LogisticRegressionWithSGD
或使用此代码的位置相似的结果SVMWithSGD
:
不幸的是,此代码不适用于NaiveBayes
.
scala - 如何定义自定义聚合函数来对一列向量求和?
我有一个两列的DataFrame,ID
类型Int
和Vec
类型Vector
(org.apache.spark.mllib.linalg.Vector
)。
DataFrame 如下所示:
我想groupBy($"ID")
通过对向量求和来对每个组内的行进行聚合。
上述示例的期望输出将是:
可用的聚合函数将不起作用,例如df.groupBy($"ID").agg(sum($"Vec")
将导致 ClassCastException。
如何实现一个自定义聚合函数,允许我对向量或数组进行求和或任何其他自定义操作?
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
以下是简单的场景代码和错误:
这是带有错误的输出:
scala - 在 Spark 中重新组合/连接 DataFrame 行
我有一个看起来像这样的 DataFrame:
我想根据“id”重新组合功能,以便获得以下信息:
这是我用来生成提到的 DataFrame 的代码
我一直在尝试使用 RDD 和 DataFrames 做不同的事情。到目前为止,最“有前途”的方法是基于“id”进行过滤
但我现在有两个瓶颈:
1)如何自动过滤“id”可能具有的所有不同值?
以下会产生错误:
2)如何将共同的“特征”连接到给定的“id”。没有尝试太多,因为我仍然坚持 1)
任何建议都非常受欢迎
注意:为澄清起见,每次出现“id”时,“label”总是相同的。对不起,我的任务的一个简单扩展也是对“标签”进行分组(更新示例)
scala - 无法在一个简单的示例中从 spark ML 运行 RandomForestClassifier
我试图RandomForestClassifier
从spark.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"
两者都不BinaryAttribute
是NominalAttribute
。但是,我不知道如何解决这个问题。
我的问题:
我该如何解决这个问题?
非常感谢您阅读我的问题和您的帮助!
scala - 在 Spark 中将列标记为分类
我目前正在使用 StringIndexer 将许多列转换为唯一整数,以便在 RandomForestModel 中进行分类。我还在为 ML 流程使用管道。
一些查询是
RandomForestModel 如何知道哪些列是分类的。StringIndexer 将非数字转换为数字,但它是否添加了一些元数据以表明它是一个分类列?在 mllib.tree.RF 中有参数调用 categoricalInfo ,它指示列是分类的。ml.tree.RF 如何知道哪些是不存在的。
此外,StringIndexer 根据出现频率将类别映射到整数。现在,当新数据出现时,我如何确保这些数据与训练数据的编码一致?如果不再次对整个数据(包括新数据)进行 StringIndexing,我可以这样做吗?
我对如何实现这一点感到很困惑。
scala - 在 Spark 多类分类中处理看不见的分类变量和 MaxBins 计算
下面是我的 RandomForest 多类分类模型的代码。我正在读取 CSV 文件并进行代码中所见的各种转换。
我正在计算最大类别数,然后将其作为参数提供给 RF。这需要很多时间!是否有要设置的参数或更简单的方法让模型自动推断最大类别?因为它可以超过 1000 个,我不能省略它们。
我如何处理新数据上看不见的标签以进行预测,因为 StringIndexer 在这种情况下不起作用。下面的代码只是数据的一部分,但我将来也会引入新数据
/li>
scala - 在多列上使用 Spark ML 的 OneHotEncoder
我已经能够创建一个管道,允许我一次索引多个字符串列,但我无法对它们进行编码,因为与索引不同,编码器不是估计器,所以我从不根据OneHotEncoder 中的示例调用 fit文档。
OneHotEncoder 对象没有 fit 方法,因此将其与索引器放在同一管道中将不起作用 - 当我在管道上调用 fit 时会引发错误。我也不能在使用管道阶段数组创建的管道上调用转换,one_hot_encoders
.
我还没有找到一个很好的解决方案来使用 OneHotEncoder 而不单独为我要编码的所有列创建和调用转换本身
apache-spark - Spark中的特征归一化算法
试图理解 Spark 的归一化算法。我的小测试集包含 5 个向量:
我希望这new Normalizer().transform(vectors)
会创建JavaRDD
每个向量特征被归一化为(v-mean)/stdev
特征-0、`特征-1等
的所有值的位置。结果集是:
请注意,所有原始值 7000.0 都会产生不同的“标准化”值。此外,例如,1.357142668768307E-5
当值为:.95
、1
、-1
、-.95
、时如何计算0
?更重要的是,如果我删除一个功能,结果会有所不同。找不到有关该问题的任何文档。
事实上,我的问题是,如何正确规范化 RDD 中的所有向量?
apache-spark - SPARK ML,朴素贝叶斯分类器:一类的高概率预测
我正在使用 Spark ML 优化朴素贝叶斯多类分类器。
我有大约 300 个类别,我正在对文本文档进行分类。训练集足够平衡,每个类别大约有 300 个训练样例。
一切看起来都很好,并且分类器在看不见的文档上以可接受的精度工作。但是我注意到,在对新文档进行分类时,分类器通常会为其中一个类别分配高概率(预测概率几乎等于 1),而其他类别的概率非常低(接近于零) .
可能的原因是什么?
我想补充一点,在 SPARK ML 中有一种叫做“原始预测”的东西,当我查看它时,我可以看到负数,但它们或多或少具有可比较的幅度,因此即使是高概率的类别也具有可比较的原始预测分数,但我在解释这个分数时发现困难。