特征变化--->标签到向量的转换(OneHotEncoder)
一、One-Hot Encoding
- 性别:["male","female"]
- 地区:["Europe","US","Asia"]
- 浏览器:["Firefox","Chrome","Safari","Internet Explorer"]
对于某一个样本,如["male","US","Internet Explorer"],我们需要将这个分类值的特征数字化,最直接的方法,我们可以采用序列化的方式:[0,1,3]。但是这样的特征处理并不能直接放入机器学习算法中。
二、One-Hot Encoding的处理方法
One-Hot Encoding 作用也就是为了将特征数字化为一个特征向量
package Spark_MLlib
import org.apache.spark.ml.feature.{OneHotEncoder, StringIndexer}
import org.apache.spark.sql.SparkSession
object 特征变换_OneHotEncoder {
val spark=SparkSession.builder().master("local[2]").appName("IndexToString").getOrCreate()
import spark.implicits._
def main(args: Array[String]): Unit = {
val df=spark.createDataFrame(Seq(
(0,"log"),
(1,"text"),
(2,"text"),
(3,"soyo"),
(4,"text"),
(5,"log"),
(6,"log"),
(7,"log"),
(8,"hadoop")
)).toDF("id","label")
val df2=spark.createDataFrame(Seq(
(0,"log"),
(1,"soyo"),
(2,"soyo")
)).toDF("id","label")
val indexer=new StringIndexer().setInputCol("label").setOutputCol("label_index")
val model=indexer.fit(df)
val indexed1=model.transform(df)//这里测试数据用的是df
indexed1.show()
val indexed=model.transform(df2)//测试数据换为df2
val encoder=new OneHotEncoder().setInputCol("label_index").setOutputCol("lable_vector").setDropLast(false) //setDropLast:被编码为全0向量的标签也可以占有一个二进制特征
val encodered1=encoder.transform(indexed1)
encodered1.show()
val encodered=encoder.transform(indexed)//(4,[2],[1.0]) //这里的4表示训练数据中有4中类型的标签
encodered.show()
}
}
结果:
+---+------+-----------+
| id| label|label_index|
+---+------+-----------+
| 0| log| 0.0|
| 1| text| 1.0|
| 2| text| 1.0|
| 3| soyo| 2.0|
| 4| text| 1.0|
| 5| log| 0.0|
| 6| log| 0.0|
| 7| log| 0.0|
| 8|hadoop| 3.0|
+---+------+-----------+
+---+------+-----------+-------------+
| id| label|label_index| lable_vector|
+---+------+-----------+-------------+
| 0| log| 0.0|(4,[0],[1.0])|
| 1| text| 1.0|(4,[1],[1.0])|
| 2| text| 1.0|(4,[1],[1.0])|
| 3| soyo| 2.0|(4,[2],[1.0])|
| 4| text| 1.0|(4,[1],[1.0])|
| 5| log| 0.0|(4,[0],[1.0])|
| 6| log| 0.0|(4,[0],[1.0])|
| 7| log| 0.0|(4,[0],[1.0])|
| 8|hadoop| 3.0|(4,[3],[1.0])|
+---+------+-----------+-------------+
+---+-----+-----------+-------------+
| id|label|label_index| lable_vector|
+---+-----+-----------+-------------+
| 0| log| 0.0|(4,[0],[1.0])|
| 1| soyo| 2.0|(4,[2],[1.0])|
| 2| soyo| 2.0|(4,[2],[1.0])|
+---+-----+-----------+-------------+
特征变化--->标签到向量的转换(OneHotEncoder)的更多相关文章
- 特征变化--->标签到索引的转换(StringIndexer)
package Spark_MLlib import org.apache.spark.ml.feature.StringIndexer import org.apache.spark.sql.Spa ...
- spark机器学习从0到1特征变换-标签和索引的转化(十六)
一.原理 在机器学习处理过程中,为了方便相关算法的实现,经常需要把标签数据(一般是字符串)转化成整数索引,或是在计算结束后将整数索引还原为相应的标签. Spark ML 包中提供了几个相关的转换器 ...
- 特征变化--->索引到标签的转换(IndexToString)
package Spark_MLlib import org.apache.spark.ml.feature.{IndexToString, StringIndexer} import org.apa ...
- 特征变化--->特征向量中部分特征到类别索引的转换(VectorIndexer)
VectorIndexer: 倘若所有特征都已经被组织在一个向量中,又想对其中某些单个分量进行处理时,Spark ML提供了VectorIndexer类来解决向量数据集中的类别性特征转换. 通过为其提 ...
- kinect脸部三维数据特征点标签语义具体说明
非常多零零碎碎的事情,导致非常久没写blog了.face animation的demo做完了也快一个月了.是时候总结总结了. Kinect获得的标识点共用121个.其给的sdk里面也给出了响应的标签. ...
- 利用艺术家的整数ID映射将标签转换为向量
<strong><span style="font-size:18px;">/*** * @author YangXin * @info Mapper选择艺 ...
- 条件GAN论文简单解读
条件GAN(Conditional Generative Adversarial Nets),原文地址为CGAN. Abstract 生成对抗网络(GAN)是最近提出的训练生成模型(g ...
- 机器学习入门-文本特征-使用LDA主题模型构造标签 1.LatentDirichletAllocation(LDA用于构建主题模型) 2.LDA.components(输出各个词向量的权重值)
函数说明 1.LDA(n_topics, max_iters, random_state) 用于构建LDA主题模型,将文本分成不同的主题 参数说明:n_topics 表示分为多少个主题, max_i ...
- 谁动了我的特征?——sklearn特征转换行为全记录
目录 1 为什么要记录特征转换行为?2 有哪些特征转换的方式?3 特征转换的组合4 sklearn源码分析 4.1 一对一映射 4.2 一对多映射 4.3 多对多映射5 实践6 总结7 参考资料 1 ...
随机推荐
- UVALIVE6886 Golf Bot (FFT)
题意:打高尔夫 给你n个距离表示你一次可以把球打远的距离 然后对于m个询问 问能否在两杆内把球打进洞 题解:平方一下就好 注意一下x0的系数为1表示打一杆 才发现数组应该开MAXN * 4 之前写的题 ...
- FATE HDU - 2159
解法 完全背包但是又有别的条件(忍耐值为体力经验是价值) ①首先杀怪是有上限s的,所以需要记录杀怪的数量并且if时候还需要加上条件 ②最后还得遍历一下从小到大遍历当前dp范围内是不是已经有够经验的那么 ...
- Linux下“任务管理器”
也不知道linux叫不叫任务管理器. Ctrl+Alt+T打开终端,输入top,就会出现一堆东西. 如果有个东西未响应了,就可以输入k+这个进程的pid就可以杀死它. https://blog.csd ...
- 总结在Linux终端中进行算术运算的6种方式
1.使用bash 使用双括号可以像C语言一样直接使用运算符进行计算. +)) a=$((*)) echo $a b=$(($a-)) echo $b d=$(($b/)) echo $d e=$(($ ...
- 转载:tomcat实现热部署的配置
tomcat实现热部署的配置 我们实现热部署后,自然就可以通过maven操作tomcat了,所以就需要maven取得操作tomcat的权限,现在这一步就是配置tomcat的可操作权限. 进入tom ...
- Network----轮询
轮询: 定时每隔多长时间刷新一次,但是,7X24的对服务器的压力会过大,因为在夜间或者是流量低峰期时,他还要持续工作. 客户端发一次请求,服务器就要相应一次. 长轮询: 和轮询的模式不同,长轮询是一次 ...
- PAT 1123 Is It a Complete AVL Tree
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- HDU - 6446 Tree and Permutation
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6446 本题是一个树上的问题——DFS. 一棵N个结点的树,其结点为1~N.树具有N-1条边,每一条边具有 ...
- 3.5.6 关系和boolean运算符
Java包含丰富的关系运算符.要检测相等性,可以使用两个等号 == .例如, 3 == 7 的值为 false. 另外可以使用 != 检测不相等.例如, 3 ! = 7 的值 ...
- Python基础—面向对象(进阶篇)
通过上一篇博客我们已经对面向对象有所了解,下面我们先回顾一下上篇文章介绍的内容: 上篇博客地址:http://www.cnblogs.com/phennry/p/5606718.html 面向对象是一 ...