1. Replace 直接替换

例如根据学生测验成绩(0-100分)划分为A(>90)B(80-90)C(70-80)D(<70)四个阶段.

2.map()替换

类似replace(),没有指定全部映射关系会出现NaN

3.LabelEncoding标签编码

作用是为变量的n个唯一取值分配一个[0,n-1]之间的编码,将该变量转化成连续的数值型变量。LabelEncoding根据原各唯一取值的先后顺序进行排序后为其转化为对应次序的数值,转化后的结果也在数值上体现了这一优势。


• 相较于 Replace 等直接替换的方法,LabelEncoding 可以快速简便地将各取值转换成数值
• LabelEncoding 处理后的数值为取值范围[0, n-1]的整数数值,在计算空间距离等算法中存在优先级关系。因此 LabelEncoding 适合有序数据的处理
• LabelEncoding 处理后的取值,是没有具体含义的,数值不同只做区分作用,而不同于连续性数值一般具有现实意义(如在房屋售价回归模型中,房屋面积的增量可能导致售价的增量)
• 对于无序数据,如动物的种类,LabelEncoding 处理后的结果会使得无序数据存在有序性,这会扰乱原数据间的关系。因此 LabelEncoding 不适用于无序数据的处理


4.OneHot Encoding独热编码

独热编码是针对无序数据常用的编码方案,对于原变量中存在的 n 个唯一的类别取值,OneHotEncoding 会依赖于原取值生成新的 n 个0-1变量,新生成的每个变量都只有0和1两个取值。新生成的 n 个变量进行组合,就可以表示原变量的 n 个唯一取值。可以理解为对有 n 个取值的变量,经过独热编码处理后,转为 n 个二元变量,每次只有一个激活。处理后的新数据既能解决数值化问题,又能够避免数值大小带来的优先级影响,但因为根据一个原有变量会生成n个新变量,数据集会变得稀疏。
百度解释:

两种实现方式:
一:sklearn包的OneHotEncoder。

Sklearn库中的OneHotEncoder()方法只能处理数值型变量,对于字符型变量需要使用LabelEncoder()转化为数值数据后再使用独热编码处理,且需要自行在原数据集中删去进行独热编码处理的原变量


• 小结:独热编码将类别型数据转换成 n 个0-1变量,从而在数值上避免了这部分数据不应有的优先级问题。
• 优点:独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。它的值只有0和1,不同的类型存储在垂直的空间。
• 缺点:当类别的数量很多时,特征空间会变得非常大,即庞大的稀疏矩阵。在这种情况下,一般可以用PCA来减少维度。而且独热编码+PCA这种组合在实际中也非常有用。
• 独热编码同下文提及的虚拟变量,在应用时认为是同一处理方法的不同表达。


5. 虚拟变量(Dummy Variable)

定性变量成为指标变量,二元变量或分类变量,例如性别,年龄,宗教,民族,婚姻状况,教育程度等。

虚拟变量的作用:

分离异常因素的影响,检验不同属性类型对因变量的作用,提高模型精度,将不同属性的样本合并,扩大了样本容量(增加误差自由度,降低误差方差)

小结:

虚拟变量将类别型变量转化成n-1个0-1变量,在数值上避免了这部分数据不应有的优先级和虚拟变量陷阱问题,在应用时,虚拟变量和独热编码一般认为是同一处理方法,一般情况下使用独热编码(n个0-1变量),如果涉及线性回归问题则需要转化虚拟变量处理(n-1个0-1 变量)

针对高势集的解决方法:

高势集,或称高数量类别特征(high-cardinality categorical attributes),是指不同值的数量非常多的类别型特征。反正,则称之为“低数量类别特征”,也就是我们一般考虑时的情况。在高势集上使用独热编码会导致数据集的列数变得十分庞大。

①. 主观合并类别

,根据相关业务背景、专业知识,对这些取值进行划分合并,手动将原始的 n 种取值降为 k 种取值(k远小于n)。这样就可以把高数量类别特征转化成为低数量类别特征。随后,再对转化后的低数量类别特征应用OneHot编码等处理,即可避免产生过于庞大的稀疏矩阵。

②.Clustering,

将原始的 1-to-n 的 mapping 问题变成 1-to-k 的 mapping 问题(k远小于n)。为了达到这个目标,这个高数量类别属性首先将依据 target 的值 grouping 成k个类(clusters),然后再依据这个 grouping 的结果进行 one-hot 编码。Clustering侧重于使用相关算法及度量指标进行转化,最大化的保留了原始数据的信息。

③.重编码:

3.1:哈希编码

哈希值是一个有限集合,输入数据则可以是无穷多,成熟的哈希算法会有较好的抗冲突性,同时在实现哈希表的结构时要考虑到哈希冲突的问题,哈希法可以降低特征数量,从而加速算法训练与预测过程,以及降低内存消耗,哈希法会把多个原始特征哈希到相同的位置上,出现哈西里的collision现象,但对算法的精度影响很小

 哈希编码可以作为一种降维方法,实现简单,所需计算量小且效果好
 哈希编码可以保持原有特征的稀疏性
 哈希后学习到的模型很难检验,无法对模型参数做解释

3.2均值编码:将原来独立的高数量类别特征的每个值映射到概率估计上

总结:

定类类型数据:

使用OneHotEncoding。定类类型就是纯分类,不排序,没有逻辑关系,比如性别分男女,男女之间不存在逻辑关系, 中国各省市分类也可以使用独热编码,各省间不存在逻辑关系。如果转化为n-1个变量,即做虚拟变量

定序类型数据:

使用LabelEncoding。定序类型也是分类,但有排序逻辑关系,等级上高于定类,例如,学历上小学初中高中本科研究生,各个类别之间存在一定的逻辑,显然研究生学历是最高的小学最低,此时使用LabelEncoding会更合适,因为自定义的数字顺序可以不破坏原有逻辑,并与这个逻辑相对应。

数值大小敏感的模型:

必须使用OneHotEncoding或者Dummy.典型例子就是LR和svm。二者的损失函数对数值大小是敏感的,并且变量间的数值大小是比较有意义的,而LabelEncoding的数字编码没有数值大小的含义,只有一种排序,因此这些模型都使用OneHotEncoding

数值大小不敏感的模型:

对数值大小不敏感的模型(例如树模型)最好不适用OneHotEncoding。一般这类模型为树模型,将离散型特征进行OneHot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one_hot编码就可以很合理的计算出距离,那就没必要进行One_hot编码。有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。 Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。如果分类类别特别多,那么one-hot encoding会分裂出很多特征变量。这时候,如果我们限制了树模型的深度而不能向下分裂的话,一些特征变量可能就因为模型无法继续分裂而被舍弃损失掉了。因此,此种情况下可以考虑使用Label encoding。

【从零开始的ML-02】LinearRegression 类别型变量引入线性回归的几种方法相关推荐

  1. ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)

    ML:模型训练/模型评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练) 目录 模型训练评估中常用的两种方法代码实现 T1.留一法一次性切分训练 T2.K折交叉验证训 模型训练评估中 ...

  2. php比较两个变量的值_总结PHP不用第三个变量交换两个变量的值的几种方法

    "PHP不用第三个变量交换两个变量的值"这个题看到过好多次了,看来面试确实喜欢考这道题.今天,对于这个题目,我自己总结了几种方法,可能不全,大家来互相补充. 有些仅适用于字符串,方 ...

  3. 交换两个变量的值?两种方法

    ** 交换两个变量的值,两种方式 ①第一种,定义临时变量,用来存放第一个变量的值,再将第二个变量的值赋值给第一个变量,临时变量里面的值赋值给第二个变量,就换过来啦. ②第二种方法,利用两个数之和省去了 ...

  4. 交换两个变量的值的三种方法

    方法一:定义临时变量法 运用此方法比较简单 public class 定义临时变量 {public static void main(String[] args) {int v1=1;int v2=2 ...

  5. 初学者交换两个变量的值的三种方法

    一.通过简单运算交换两个变量的值 #include<stdio.h> int main() {int i = 5, j = 6;i = i + j;j = i - j;i = i - j; ...

  6. 在shell中变量的赋值有五种方法

    在shell中变量的赋值有五种 :使用 read 命令,直接赋值,使用命令行参数,使用命令行的输出结果,从文件读取 1. 直接赋值,格式为:变量名 = 变量值 2.Read 命令是系统内置命令,语法格 ...

  7. ASP 判断Session变量是否存在的4种方法

    如果去读取没有初始化的Session变量,将得到Empty值(空值).所以可以利用该值来判断Session变量是否已经初始化.加入我们要判断名为sesName的变量是否已经建立,我们可以用以下4种方法 ...

  8. python字符串拼接变量_python拼接变量、字符串的3种方法

    第一种,加号("+"): print 'py'+'thon' # output python str = 'py' print str+'thon' # output python ...

  9. 【C语言】交换两个变量的值 的n种方法

    文章目录 方法一 借助第三方 方法二 变量自加减 方法三 巧用异或位运算 方法一 借助第三方 借助第三方临时储存一个变量的值,是我们最常用的方法.这个方法不仅可以交换两个整数,任意类型的两个变量交换, ...

最新文章

  1. SimpleDateFormat的线程安全问题
  2. m.soudashi.cn 地图_SEO人员怎样挖掘大量关键词库
  3. 8年,永洪科技凭什么跑出中国BI领军速度?
  4. 2014 UESTC Training for Data Structures B - 母仪天下
  5. Vr-Vantage之场景与环境
  6. 【Python】pymysql模块处理Mysql数据库
  7. Xtreme ToolkitPro 编译选项
  8. 【Linux】Vi中的各种命令
  9. jquery升级到新版本报错[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法...
  10. SLAM学习笔记-------------(五)相机与图像
  11. 傅里叶变换,拉普拉斯变换和小波变换
  12. 【国产MCU移植】看看有没有你需要的,一起来查漏补缺吧!(附已报名的硬件)...
  13. macOS Mac10.15修改登录界面背景
  14. 查看WiFi记录日志
  15. php设备巡检管理,设备巡检管理解决方案
  16. java微信分享朋友圈_Java实现微信公众平台朋友圈分享功能详细代码
  17. matlab simca,SIMCA软件|SIMCA-多元数据分析软件
  18. Websphere远程代码执行-CVE-2015-7450
  19. 【清流资本·硬币的另一面】骞云科技:上云不用等,IT运维“不用人”
  20. 矩阵快速幂2Jzzhu and Sequences Recurrences Contemplation! Algebra Reading comprehension

热门文章

  1. 【高等数学】python绘制常见的函数图像
  2. 【星海出品】sqlite入门
  3. 怎样将应用程序发布到Apple store上去 (四)
  4. 如何取消计算机限制移动储存,如何禁止电脑使用可移动存储设备、禁止电脑复制文件到U盘的方法...
  5. python 替换文本 通配符_python实现替换word中的关键文字(使用通配符)
  6. c++系列(五)—— 静态成员
  7. Swift - typealias
  8. 以新增用户为例子解释前后端整体连接方式详解(Service、Mapper、Controller、Entity)
  9. Prewitt边缘检测算子
  10. 软件测试之基本路径覆盖