ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在Spark中从类别列表创建一个热编码向量

2019-08-24 00:02:07  阅读:172  来源: 互联网

标签:java scala apache-spark data-science


如果我的数据包含5个类别(A,B,C,D,E)和客户数据集,其中每个客户可以属于一个,多个或没有类别.我如何获取这样的数据集:

id, categories
1 , [A,C]
2 , [B]
3 , []
4 , [D,E]

并将categories列转换为一个热编码向量,如下所示

id, categories, encoded
1 , [A,C]     , [1,0,1,0,0]
2 , [B]       , [0,1,0,0,0]
3 , []        , [0,0,0,0,0]
4 , [D,E]     , [0,0,0,1,1]

有没有人找到一个简单的方法在火花中做到这一点?

解决方法:

很容易做的事情,使用CountVectorizerModel有点相同

val df = spark.createDataFrame(Seq(
  (1, Seq("A","C")),
  (2, Seq("B")),
  (3, Seq()),
  (4, Seq("D","E")))
).toDF("id", "category")

val cvm = new CountVectorizerModel(Array("A","B","C","D","E"))
  .setInputCol("category")
  .setOutputCol("features")

cvm.transform(df).show()

/*
+---+--------+-------------------+
| id|category|           features|
+---+--------+-------------------+
|  1|  [A, C]|(5,[0,2],[1.0,1.0])|
|  2|     [B]|      (5,[1],[1.0])|
|  3|      []|          (5,[],[])|
|  4|  [D, E]|(5,[3,4],[1.0,1.0])|
+---+--------+-------------------+
*/

这与您想要的完全不同,但功能向量将告诉您数据中存在哪些类别.例如,在行1中,[0,2]对应于字典的第一和第三元素,或者写在那里的“A”和“C”.

标签:java,scala,apache-spark,data-science
来源: https://codeday.me/bug/20190823/1702626.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有