分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

特征变化--->标签到向量的转换(OneHotEncoder)

发布时间:2023-09-06 01:21责任编辑:郭大石关键词:暂无标签

一、One-Hot Encoding

    One-Hot编码,又称为一位有效编码,主要是采用位状态寄存器来对个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
    在实际的机器学习的应用任务中,特征有时候并不总是连续值,有可能是一些分类值,如性别可分为“male”和“female”。在机器学习任务中,对于这样的特征,通常我们需要对其进行特征数字化,如下面的例子:
有如下三个特征属性:
  • 性别:["male","female"]
  • 地区:["Europe","US","Asia"]
  • 浏览器:["Firefox","Chrome","Safari","Internet Explorer"]
对于某一个样本,如["male","US","Internet Explorer"],我们需要将这个分类值的特征数字化,最直接的方法,我们可以采用序列化的方式:[0,1,3]。但是这样的特征处理并不能直接放入机器学习算法中。

二、One-Hot Encoding的处理方法

    对于上述的问题,性别的属性是二维的,同理,地区是三维的,浏览器则是思维的,这样,我们可以采用One-Hot编码的方式对上述的样本“["male","US","Internet Explorer"]”编码,“male”则对应着[1,0],同理“US”对应着[0,1,0],“Internet Explorer”对应着[0,0,0,1]。则完整的特征数字化的结果为:[1,0,0,1,0,0,0,0,1]。这样导致的一个结果就是数据会变得非常的稀疏。

One-Hot Encoding 作用也就是为了将特征数字化为一个特征向量

package Spark_MLlibimport org.apache.spark.ml.feature.{OneHotEncoder, StringIndexer}import org.apache.spark.sql.SparkSessionobject 特征变换_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)

原文地址:http://www.cnblogs.com/soyo/p/7763614.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved