当前位置: 首页 > news >正文

机器学习之独热编码(One-Hot)

一、背景

在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等。这些特征值并不是连续的,而是离散的,无序的。通常我们需要对其进行特征数字化。那什么是特征数字化呢?例子如下:

    性别特征:["男","女"] =>[0,1]

    祖国特征:["中国","美国,"法国"] =>[0,1,2]

    运动特征:["足球","篮球","羽毛球","乒乓球"] =>[0,1,2,3]

假如某个样本,它的特征是这样的["男","中国","乒乓球"],我们可以用 [0,0,3] 来表示,但是这样的特征处理并不能直接放入机器学习算法中,因为类别之间是无序的。

二、定义

独热编码是指将离散型的特征数据映射到一个高维空间中,每个可能的取值都对应于高维空间的一个点,在这些点上取值为1,其余均为0,因此独热编码也被称为“一位有效编码”或“One-of-K encoding”。

回到一开始的例子,性别特征:["男","女"],按照N位状态寄存器来对N个状态进行编码的原理:

    性别特征:["男","女"](这里N=2 二维数据)
    男 => 10
    女 => 01

    地区特征:["北京","上海,"深圳"](这里N=3,三维数据):
    北京 => 100
    上海 => 010
    深圳 => 001

    工作特征:["演员","厨师","公务员","工程师","律师"](这里N=5,五维数据):
    演员 => 10000
    老师 => 01000
    公务员 => 00100
    工程师 => 00010
    消防员 => 00001
 

三、优缺点

独热编码的优点有以下几个:

  • 能够处理非数值属性。比如血型、性别等
  • 一定程度上扩充了特征。
  • 编码后的向量是稀疏向量,只有一位是 1,其他都是 0,可以利用向量的稀疏来节省存储空间。
  • 能够处理缺失值。当所有位都是 0,表示发生了缺失。此时可以采用处理缺失值提到的高维映射方法,用第 N+1 位来表示缺失值。

当然,独热编码也存在一些缺点:

高维度特征会带来以下几个方面问题:

  • KNN 算法中,高维空间下两点之间的距离很难得到有效的衡量
  • 逻辑回归模型中,参数的数量会随着维度的增高而增加,导致模型复杂,出现过拟合问题
  • 通常只有部分维度是对分类、预测有帮助,需要借助特征选择来降低维度

四、代码

from sklearn import preprocessing  enc = preprocessing.OneHotEncoder()  enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])  #这里一共有4个数据,3种特征array = enc.transform([[0,1,3]]).toarray()  #这里使用一个新的数据来测试print array   # [[ 1  0  0  1  0  0  0  0  1]]

参考:

独热编码(One-Hot Encoding)-CSDN博客

机器学习:数据预处理之独热编码(One-Hot)详解-CSDN博客

http://www.lryc.cn/news/278155.html

相关文章:

  • IIS+SDK+VS2010+SP1+SQL server2012全套工具包及安装教程
  • 【昕宝爸爸小模块】HashMap用在并发场景存在的问题
  • 数据库索引
  • 开源知识库工具推荐:低成本搭建知识库
  • C# Chart控件
  • OpenCV C++ 图像处理实战 ——《多尺度自适应Gamma矫正的低照图像增强》
  • 原型模式
  • linux centos 账户管理命令
  • 【JavaWeb学习笔记】19 - 网购家居项目开发(上)
  • 强化学习的数学原理学习笔记 - RL基础知识
  • winSCP是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?
  • SpringBoot的数据层解决方案
  • 极客时间-《如何成为学习高手》文章笔记 + 个人思考
  • 【前端】下载文件方法
  • 虚幻UE 材质-纹理 1
  • 回归预测 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量回归预测
  • 【AWS系列】巧用 G5g 畅游Android流媒体游戏
  • GNSS数据及产品下载地址(FTP/HTTP)
  • 【STM32】STM32学习笔记-DMA数据转运+AD多通道(24)
  • 即时设计:设计流程图,让您的设计稿更具条理和逻辑
  • 单个独立按键控制直流电机开关
  • 前端插件库-VUE3 使用 JSEncrypt 插件
  • Neo4j备份
  • 【LangChain学习之旅】—(5) 提示工程(上):用少样本FewShotTemplate和ExampleSelector创建应景文案
  • Python从入门到精通秘籍一
  • 【IC设计】移位寄存器
  • 【Flutter 开发实战】Dart 基础篇:最基本的语法内容
  • 中国光伏展
  • Nacos的统一配置管理
  • SpringBoot项目docker镜像生成