zoukankan      html  css  js  c++  java
  • 特征工程之离散变量处理

     使用sklearn训练模型,只能输入数值型变量。因此需要对数据集中的非数值型离散变量进行处理,非数值型离散变量分为两类:有序型与无序型

    一、有序型离散变量处理

    什么叫有序型离散变量呢,比如说衣服尺码,M、L、XL;学历:小学、初中、高中、本科;这些都属于有序型变量。

    在上图数据表格中,size及classlabel则为有序型变量,自定义有序型字典表,进行相关映射即可:

    二、无序型离散变量处理

    衣服的颜色,风向、人员类别这些都属于无序型变量,如果转换成有序型数值代入模型会对建模结果造成影响,因此对于无序型变量需要做独热编码或者哑变量处理

    (1)独热编码

    独热编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。 独热编码是分类变量作为二进制向量的表示,这首先要求将分类值映射到整数值,然后再将每个整数值表示为二进制向量。

    具体操作如下:首先将无序型变量color利用LabelEncoder()方法映射为数值

    再将整数型数值进行独热编码

    (2)哑变量处理

       在模型中引入多个虚拟变量时,虚拟变量的个数应按下列原则确定: 如果有m种互斥的属性类型,在模型中引入(m-1)个虚拟变量。 例如,性别有2个互斥的属性,引用2-1=1个虚拟变量;再如,文化程度分小学、初中、高中、大学、研究生5类,引用4个虚拟变量。 
      pandas中的get_dummies方法来创建哑特征,get_dummies默认会对DataFrame中所有字符串类型的列进行独热编码:

    在实际特征工程处理过程中,使用LabelEncoder()+OneHotEncoder()方式,sklearn能够将训练集属性记录,并可以采用transform()方法直接作用于待加入模型的测试集。

     什么情况下用都热编码:

    • 用:独热编码用来解决类别型数据的离散值问题,
    • 不用:将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。 有些基于树的算法在处理变量时,并不是基于向量空间度量,数值只是个类别符号,即没有偏序关系,所以不用进行独热编码。  Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度

    总的来说,要是one hot encoding的类别数目不太多,建议优先考虑。 

  • 相关阅读:
    Mybatis核心
    正则表达式(二)Java中正则表达式的使用
    Elasticsearch(ES)分词器的那些事儿
    并发编程之:JUC并发控制工具
    scrollTo()和scrollBy()的区别
    SpringBoot 的@Value注解太强大了,用了都说爽!
    SQL 查询并不是从 SELECT 开始的
    jsoup 教程
    爬虫
    case when以及集合聚合函数的用法
  • 原文地址:https://www.cnblogs.com/dearL/p/9551726.html
Copyright © 2011-2022 走看看