特征变化--->标签到向量的转换(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 ...
随机推荐
- css3文字渐变无效果的解决方案
现在css3越来月流行了,为了实现一些高大上的效果,我们会用一些渐变的特效,请看文字渐变的特效代码: .title { font-size: 60px; line-height: 80px; text ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- L2-011. 玩转二叉树(不建树)
L2-011. 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整 ...
- 使用pycharm学习django纪实
之前已经下了python3.7 首先官网下载pycharm专业版,然后利用学生邮箱激活 新建django项目,使用虚拟环境就好了,方便之后的服务器部署(大概 找到博客开始学习:https://blog ...
- Maven学习总结(32)——Maven项目部署到Tomcat8中
1.环境准备 Maven.Tomcat8.Eclipse 2.maven中的镜像配置 大家知道,mavne默认使用的是国外的镜像,但是速度很慢,这里建议大家使用阿里的中央仓库镜像. 阿里出品,必出精品 ...
- 采药 2005年NOIP全国联赛普及组&疯狂的采药
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望 ...
- java多线程编程核心技术(一)--多线程技能
1.进程和线程的概念 1.进程:进程是操作系统的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位. ...
- [bzoj3809]Gty的二逼妹子序列_莫队_分块
Gty的二逼妹子序列 bzoj-3809 题目大意:给定一个n个正整数的序列,m次询问.每次询问一个区间$l_i$到$r_i$中,权值在$a_i$到$b_i$之间的数有多少个. 注释:$1\le n\ ...
- 4、Java并发性和多线程-并发编程模型
以下内容转自http://ifeve.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E6%A8%A1%E5%9E%8B/: 并发系统可以采用多种并发编程模型来实现. ...
- 浅谈SQL Server 对于内存的管理--宋沄剑 英文名:CareySo
http://www.cnblogs.com/CareySon/archive/2012/08/16/HowSQLServerManageMemory.html