1、如何处理类别型特征

类别特征(Categorical Feature)主要是指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。类别型特征的原始输入通常是字符串形式,除了决策树等少数模型能直接处理字符串的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型才能正确工作。
在处理类别型特征,可以通过各种方式的编码来处理。比如序号编码、 独热编码、二进制编码等

2、常用编码方法

2.1 序号编码

序号编码通常用于处理类别间具有大小关系的数据。例如成绩,一般分为不及格、及格、良好、优秀,并且存在“不及格 < 及格 < 良好 < 优秀”的排序关系。序号编码会按照大小关系对类别型特征赋值一个数值ID,例如不及格表示为0、及格表示为1、良好表示为2、优秀表示为3,转换后依然保留大小关系。

2.2 独热编码

独热编码通常用于处理类别间具备大小关系的特征。例如血型,一共有四个取值,独热编码会把血型变成一个四维稀疏矩阵,A型血表示为(1,0,0,0),B血型为(0,1,0,0),AB表示为(0,0,1,0),O型血表示为(0,0,0,1)。

对于类别取值较多的情况下使用独热编码需要注意以下问题:
1.使用稀疏向量来节省空间
2. 配合特征选择来降低维度

2.3 二进制编码

二进制编码主要分为两步,先用序号编码给每一个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。

血型 类别 ID(序号编码) 独热编码 二进制编码
A 1 1 0 0 0 0 0 1
B 2 0 1 0 0 0 1 0
AB 3 0 0 1 0 0 1 1
O 4 0 0 0 1 1 0 0

3、其他类型编码

3.1 Helmert Contrast

https://www.ibm.com/support/knowledgecenter/en/SSLVMB_24.0.0/spss/base/contrasts.html

Helmert. Compares the mean of each level of the factor (except the last) to the mean of subsequent levels.(将因子的每个级别的均值(最后一个级别除外)与后续级别的均值进行比较)

3.2 Sum Contrast

3.3 Polynomial Contrast

Polynomial. Compares the linear effect, quadratic effect, cubic effect, and so on. The first degree of freedom contains the linear effect across all categories; the second degree of freedom, the quadratic effect; and so on. These contrasts are often used to estimate polynomial trends.

3.4 Backward Difference Contrast

Difference. Compares the mean of each level (except the first) to the mean of previous levels. (Sometimes called reverse Helmert contrasts.)

能力有限,其他类型编码还需大佬们一一解释!!

4、Python实现

有个第三方开源包—— category_encoders,可以使用多种不同的编码技术把类别型变量转换成数值型变量,并符合Sklearn模型的转换。

4.1 下载
pip install category_encoders

4.2 使用

官方使用手册
大牛博客推荐

序号编码

import category_encoders as ce
import pandas as pd
import numpy as np
X = pd.DataFrame(np.array([['A',1],['B', 2], ['AB',2],['A',1],['O',4],['AB',3],['B',2],['A',1],['B', 2], ['A',1],['AB',3],['O',3],['B',2],['O',4]]),columns=['Blood Type','ID'])
y = np.array([1,2,3,1,4,3,2,1,2,1,3,4,2,4])encoder1 = ce.OrdinalEncoder(cols=['Blood Type','ID']).fit(X,y)
print(encoder1.transform(X))

独热编码

encoder2 = ce.OneHotEncoder(cols=['Blood Type','ID']).fit(X,y)
print(encoder2.transform(X))


二进制编码

encoder3 = ce.BinaryEncoder(cols=['Blood Type',"ID"]).fit(X,y)
print(encoder3.transform(X))


Helmert Contrast

encoder4 = ce.HelmertEncoder(cols=['Blood Type',"ID"]).fit(X,y)
print(encoder4.transform(X))


Sum Contrast

encoder5 = ce.SumEncoder(cols=['Blood Type',"ID"]).fit(X,y)
print(encoder5.transform(X))

【数据分析/挖掘】如何处理类别型特征?常用编码方式?Python实现?相关推荐

  1. 如何处理类别型特征?

    目录: 问题描述 数据准备 标签编码 自定义二分类 one-hot 编码 问题描述 一般特征可以分为两类特征,连续型和离散型特征,而离散型特征既有是数值型的,也有是类别型特征,也可以说是字符型,比如说 ...

  2. CatBoost 是如何自动高级处理类别型特征的?

    我们知道,CatBoost可以很好地处理类别型数据.然而,它还具有大量的训练参数,可以更好地对类别型特征进行预处理.本文中,小猴子将和大家一起学习如何使用这些参数处理类别型特征的. CatBoost是 ...

  3. 一文了解类别型特征的编码方法

    来源:Unsplash,作者:an Rizzari 2019 年第 78 篇文章,总第 102 篇文章 目录: 问题描述 数据准备 标签编码 自定义二分类 one-hot 编码 总结 问题描述 一般特 ...

  4. 【机器学习】树模型遇上类别型特征(Python)

    在数据挖掘项目的数据中,数据类型可以分为两种:有序的连续数值 和 无序的类别型特征. 对于xgboost.GBDT等boosting树模型,基学习通常是cart回归树,而cart树的输入通常只支持连续 ...

  5. ML之FE:对pandas的dataframe中的类别型字段进行数字编码化(类别型特征数值化)并导出映射表daiding

    ML之FE:对pandas的dataframe中的类别型字段进行数字编码化(类别型特征数值化)并导出映射表daiding 目录 对pandas的dataframe中的类别型字段进行数字编码化(类别型特 ...

  6. KDD 2021 | 谷歌DHE:不使用embedding table的类别型特征embedding

    作者 | Chilia 哥伦比亚大学 NLP搜索推荐 整理 | NewBeeNLP 类别型特征(用户ID/物品ID)的embedding在推荐系统中扮演着重要的作用,标准的方式是用一个(巨大的)emb ...

  7. 离散型变量的编码方式——one-hot与哑变量(dummy variable)

    我们在用模型去解决机器学习问题的时候,要提前进行"特征工程".而特征工程中很重要的就是对特征的预处理. 当你使用的是logistic回归这样的模型的时候,模型要求所有特征都应该是数 ...

  8. CN_@物理层@信噪比@分贝单位@奈奎斯特定理@香农公式@常用编码方式(曼彻斯特编码/差分曼彻斯特编码)波形图

    文章目录 CN_@信噪比@分贝单位@奈奎斯特定理@香农公式@常用编码方式(曼彻斯特编码/差分曼彻斯特编码)波形图 通信基础概念 数据 (data) 信号 (signal) 基带信号 模拟信号 (ana ...

  9. 数据预处理:标称型特征的编码和缺失值处理

    本文转自https://www.cnblogs.com/cnkai/p/7755097.html 标称型特征编码(Encoding categorical feature) 有些情况下,某些特征的取值 ...

  10. lightgbm模型处理类别型特征

    类别型特征编码由于是字符串类型,所以一般需要经过编码处理转换成数值型.本文主要想说的是直接将字符串值传到lightgbm中训练.注意:xgboost模型也需要提前one-hot编码转换才能入模. 下面 ...

最新文章

  1. 汽车票销售系统mysql,jsp683客运汽车票网上售票系统mysql
  2. python视频教学视频哪个好-Python入门视频哪个好?
  3. 叶老师的对于数学的分析的摘抄!十分的认可!
  4. 陶哲轩实分析习题9.1.1
  5. I - Trade Gym - 100212I 网络流
  6. header.vue 调用变量,别的组件导入引用,组件方法事例实例
  7. 更改路由器的外网IP
  8. 为什么用python画图_为什么使用Matplotlib绘图太慢?
  9. Cannot modify header information的解决方法
  10. 磁盘位置_ORACLE RAC ASM磁盘组迁移到新的ASM磁盘组方法
  11. CSS 字体单位大小对照换算表
  12. 使用nginx代理实现前后端分离开发调试,零基础教程
  13. java将Word转换成PDF两种方法
  14. java libmp3lame_录制MP3格式的音频( lame 库的编译及使用)
  15. POI 设置Excel单元格背景色(参考颜色代码)
  16. 直击JDD | 京东开启技术服务元年:携手合作伙伴,共创产业未来
  17. 沧小海基于xilinx srio核的学习笔记之第二章 Rapidio技术概述
  18. 2020 EC Final 诸事不顺记
  19. 从0开始学递归和分治
  20. LeetCode 1109. 航班预订统计

热门文章

  1. 也谈分库分表在实际应用的实践
  2. 时区 夏令时造成的问题
  3. 多目标追踪-2019综述《Deep Learning in Video Multi-Object Tracking: A Survey》
  4. 小猪的Python学习之旅 —— 12.Python并发之queue模块
  5. 操作系统笔记(本科必修课)
  6. UFS和EMMC的区别--原理学习
  7. CentOS7快速配置服务器网卡聚合双bond方法
  8. 你真的打算凑合过完这一生吗(转)
  9. 新媒体运营,微博平台运用技巧分享
  10. 实战技巧-学会这一招让前端工程师都刮目相看