【问题标题】:Categorical Variables in Apache Spark using MLibApache Spark 中使用 MLib 的分类变量
【发布时间】:2015-06-05 12:01:32
【问题描述】:

我对 Apache Spark 的世界还比较陌生。我正在尝试使用 LinearRegressionWithSGD() 估计一个大型模型,我想在其中估计固定效应和交互项,而不必创建巨大的设计矩阵。

我注意到决策树中有一个支持分类变量的实现

https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/tree/DecisionTree.scala#L293

创建从字符串到整数的哈希映射并将其提供给模型。有人在 Spark 中尝试过类似的线性模型练习吗?

谢谢。

【问题讨论】:

  • 您找到解决方案了吗?我有一个分类变量的文档,我想将其转换为向量。我尝试使用 HashingTF 解决它。我将该行作为 Iterable[String] 传递给 hashingTf,它给了我一个向量,我用它来创建一个标记点​​。它有效,但不确定这是否是正确的方法。我认为正确的解决方案是为每个单词分配一个数字,然后我们使用该数字创建一个向量。我猜 IDF 会这样做,但我在训练期间没有完整的词汇表。

标签: scala apache-spark apache-spark-mllib


【解决方案1】:

我已经研究这个问题一段时间了。我的估计有很多类别,因此在输入 MLlib 之前创建整个设计矩阵非常低效。我正在尝试修改 Spark 源代码以在梯度下降中运行 SGD 时扩展行。完成后我会发布解决方案。

【讨论】:

    【解决方案2】:

    您可以使用One-Hot encoding 将您的分类变量转换为特征空间,您可以在其中输入线性回归模型。

    例如,如果您有一个具有以下值的分类变量:低、中、高,您可以将其编码为三个不同的整数特征,如下所示:

    Category    Low Medium High
    Low         1   0      0
    Medium      0   1      0
    High        0   0      1
    

    这只是一种方法,还有其他方法,但如果您的分类值不是太大,One-Hot 编码很合适。

    【讨论】:

    • 分类变量很大怎么办?
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 2016-03-03
    • 2016-01-30
    • 2015-06-28
    • 2021-03-14
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多