gpt4 book ai didi

scala - 如何在 Apache Spark 中编码分类特征

转载 作者:行者123 更新时间:2023-12-04 16:59:30 25 4
gpt4 key购买 nike

我有一组数据,我想根据这些数据创建分类模型。每行具有以下形式:

user1,class1,product1
user1,class1,product2
user1,class1,product5
user2,class1,product2
user2,class1,product5
user3,class2,product1

大约有 100 万用户,2 个类和 100 万个产品。我接下来想做的是创建稀疏向量(MLlib 已经支持的东西)但是为了应用该函数,我必须首先创建密集向量(带有 0)。换句话说,我必须对我的数据进行二值化。最简单(或最优雅)的方法是什么?

鉴于我是 MLlib 的新手,能否请您提供一个具体的例子?我正在使用 MLlib 1.2。

编辑

我最终得到了以下代码,但结果证明它真的很慢......如果我只能使用 MLlib 1.2,还有其他想法吗?
val data = test11.map(x=> ((x(0) , x(1)) , x(2))).groupByKey().map(x=> (x._1 , x._2.toArray)).map{x=>
var lt : Array[Double] = new Array[Double](test12.size)
val id = x._1._1
val cl = x._1._2
val dt = x._2
var i = -1
test12.foreach{y => i += 1; lt(i) = if(dt contains y) 1.0 else 0.0}
val vs = Vectors.dense(lt)
(id , cl , vs)
}

最佳答案

您可以使用 spark.ml 的 OneHotEncoder .

您首先使用:

OneHotEncoder.categories(rdd, categoricalFields)

哪里 categoricalField是您的 RDD 所在的索引序列包含分类数据。 categories ,给定一个数据集和作为分类变量的列的索引,返回一个结构,对于每个字段,描述数据集中存在的值。该映射旨在用作 encode 方法的输入:
OneHotEncoder.encode(rdd, categories)

这将返回您的矢量化 RDD[Array[T]] .

关于scala - 如何在 Apache Spark 中编码分类特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com