精华内容
下载资源
问答
  • Python对离散变量处理:哑变量编码和one-hot编码
    千次阅读
    2019-04-21 21:03:49

    在数据进行建模分析,无法直接把类别变量放入模型中去分析,因此,需要对类别变量进行处理。最常见的方法是对类别变量做哑变量编码或one-hot编码,所以运用最近的业务数据进行了尝试。哑变量编码和one-hot编码的具体介绍和区别在ML小菜鸟的博客中有比较详细的介绍博客链接

    • 做哑变量编码的库:pandas
    • one-hot编码的库:sklearn、keras

    注意:pandas默认只处理字符串类别变量,sklearn和keras默认只处理数值型类别变量(需要先 LabelEncoder )

    1.pandas进行哑变量编码

    pandas中提供了get_dummies()函数:

    • pandas.get_dummies(prefix=) prefix参数设置编码后的变量名,也可以选择默认
    # 导入数据
    import pandas as pd
    file = open('C:/Users/Dell/Documents/LTDSJ/example1data/data.csv',encoding='utf-8')
    factory = pd.read_csv(file,engine='python')
    

    数据如下:

    Out[1]: 
    0    C10235
    1    C10135
    2    C10035
    3    C10135
    4    C10385
    5    C14534
    6        **
    7        **
    8    C10129
    9    C10150
    Name: factory_id, dtype: object
    

    进行哑变量编码

    encode = pd.get_dummies(factory)
    

    编码结果(部分展示):

    Out[2]: 
       **  C10035  C10129  C10135  C10150  C10235  C10385  C14534
    0   0       0       0       0       0       1       0       0
    1   0       0       0       1       0       0       0       0
    2   0       1       0       0       0       0       0       0
    3   0       0       0       1       0       0       0       0
    4   0       0       0       0       0       0       1       0
    5   0       0       0       0       0       0       0       1
    6   1       0       0       0       0       0       0       0
    7   1       0       0       0       0       0       0       0
    8   0       0       1       0       0       0       0       0
    9   0       0       0       0       1       0       0       0
    

    2.sklearn进行one-hot编码

    sklearn中有用OneHotEncoder()进行one-hot编码,但是由于sklearn只处理数值型类别变量,在编码前需要先将字符串转化为数值型,用 LabelEncoder函数:

    from sklearn.preprocessing import LabelEncoder
    from sklearn.preprocessing import OneHotEncoder  
        
    label = preprocessing.LabelEncoder()
    factory_label = label.fit_transform(factory) 
    print(factory_label)  
    # 输出结果  
    [[5]
     [3]
     [1]
     [3]
     [6]
     [7]
     [0]
     [0]
     [2]
     [4]]  
    

    然后再进行one-hot编码

    # 将行转列
    factory_label = factory_label.reshape(len(factory_label), 1)
    # 编码
    factory_encoder = OneHotEncoder(sparse=False)
    onehot_encoded = factory_encoder.fit_transform(factory_label)
    # 查看编码结果
    onehot_encoded
    
    Out[53]: 
    array([[0., 0., 0., 0., 0., 1., 0., 0.],
           [0., 0., 0., 1., 0., 0., 0., 0.],
           [0., 1., 0., 0., 0., 0., 0., 0.],
           [0., 0., 0., 1., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 0., 0., 0., 1.],
           [1., 0., 0., 0., 0., 0., 0., 0.],
           [1., 0., 0., 0., 0., 0., 0., 0.],
           [0., 0., 1., 0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 1., 0., 0., 0.]])
    

    3.keras进行one-hot编码

    与OneHotEncoder()一样,再进行one-hot编码前也需要用 LabelEncoder()先将字符串转化为数值型。

    # 基于keras的onehot编码 
    from keras.utils import to_categorical
    from sklearn.preprocessing import LabelEncoder
    # str类型转换
    label = LabelEncoder()
    factory_label = label.fit_transform(factory)
    
    # 编码
    categorical_encoded = to_categorical(factory_label)
    categorical_encoded
    
    Out[85]: 
    array([[0., 0., 0., 0., 0., 1., 0., 0.],
           [0., 0., 0., 1., 0., 0., 0., 0.],
           [0., 1., 0., 0., 0., 0., 0., 0.],
           [0., 0., 0., 1., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 0., 0., 0., 1.],
           [1., 0., 0., 0., 0., 0., 0., 0.],
           [1., 0., 0., 0., 0., 0., 0., 0.],
           [0., 0., 1., 0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 1., 0., 0., 0.]], dtype=float32)
    

    还可以对one-hot编码后的数据解码回去:

    # 解码
    import numpy as np
    decode = []
    for i in range(len(factory_label)):
        decode.append(np.argmax(categorical_encoded[i]))
    print(decode)
    # 结果
    [5, 3, 1, 3, 6, 7, 0, 0, 2, 4]   
    
    • 对应的原始列表
    indexfactorylabel
    0C102355
    1C101353
    2C100351
    3C101353
    4C103856
    5C145347
    6**0
    7**0
    8C101292
    9C101504
    更多相关内容
  • SPSS 哑变量编码

    2021-10-27 21:17:40
    回归时 如果自变量是分类变量 需要进行哑变量编码

    操作

    Transform→Create Dummy Variables

     选择变量 命名

     以谁为参照就删掉谁

    展开全文
  • 分类变量(也称为因子或定性变量)是可以将观测数据分组的变量。它们有有限数量的不同值,称为水平。例如,性别作为一个分类变量,它有两个水平:男性或女性。 回归分析需要数值变量。因此,当研究者希望在回归模型中...

    本篇描述分类变量如何进行回归(翻译自http://www.sthda.com/english/articles/40-regression-analysis/163-regression-with-categorical-variables-dummy-coding-essentials-in-r/)

    分类变量(也称为因子或定性变量)是可以将观测数据分组的变量。它们有有限数量的不同值,称为水平。例如,性别作为一个分类变量,它有两个水平:男性或女性。

    回归分析需要数值变量。因此,当研究者希望在回归模型中包含一个分类变量时,需要其他步骤使结果具有可解释性。

    在这些步骤中,分类变量被重新编码成一组单独的二元变量。这种编码被称为“哑变量编码”,并创建一个称为contrast matrix的表。这是由统计软件自动完成的,如R。

    在这里,您将学习如何构建和解释带有分类预测变量的线性回归模型。我们还将在R中提供实际的例子。

    加载需要的R包

    便于数据操作和可视化的tidyverse
    在这里插入图片描述

    数据集示例

    我们将使用Salaries数据集[car package],它包含美国一所大学的助理教授、副教授和教授2008-2009年内9个月的工资。这些数据的收集目的是监测男性和女性教师之间的工资差异。

    在这里插入图片描述
    在这里插入图片描述

    两个水平的分类变量

    回想一下,在预测变量(x)的基础上预测结果变量(y)的回归方程可以简单地写成y = b0 + b1*x。b0和b1为回归系数,分别表示截距和斜率。

    假设,我们希望调查男性和女性之间的工资差异。

    基于性别变量,我们可以创建一个新的哑变量,取值为:
    在这里插入图片描述

    并将该变量作为回归方程的预测变量,得到如下模型:在这里插入图片描述
    这些系数可以解释为:

    (1)b0是女性的平均工资,
    (2)b0 + b1是男性的平均工资,
    (3)b1是男性和女性的平均工资差异。

    为了演示,下面的例子通过计算一个简单的关于 Salaries 数据集[car包]的线性回归模型来模拟男性和女性之间的工资差异。R自动创建虚拟变量:
    在这里插入图片描述
    在这里插入图片描述
    从上面的输出可以看出,女性的平均工资估计为101002,而男性的平均工资估计为101002 + 14088 = 115090。哑变量sexMale的p值非常显著,这表明两性之间的平均工资存在显著差异。

    contrasts() 函数的作用是:返回R用来创建哑变量的编码:
    在这里插入图片描述
    在这里插入图片描述
    R创建了一个sexMale哑变量,如果性别是男性,则值为1,否则值为0。将男性编码为1,女性编码为0(基线)的决定是任意的,这对回归计算没有影响,但是会改变对系数的解释。

    可以使用relevel()函数将基线类别设置为males,如下所示:
    在这里插入图片描述
    之后回归拟合的输出为:
    在这里插入图片描述
    在这里插入图片描述
    事实上,在回归输出中性别女性的系数是负的,这表明作为女性与薪水(相对于男性)的减少有关。

    现在b0和b1的预测值分别为115090和-14088,再次得出男性的平均工资为115090,女性的平均工资为115090 -14088 = 101002。

    另外,我们可以创建一个哑变量-1(男性)/1(女性),而不是0/1编码方案。这导致模型:
    在这里插入图片描述

    具有两个以上水平的分类变量

    一般来说,一个有n个水平的分类变量会转化为n-1个各有2个水平的哑变量。这n-1个新变量包含的信息与单个变量相同。

    例如, Salaries 数据中的**’‘rank’’**有三个水平:“AsstProf”、“AssocProf”和“Prof”。这个变量可以伪编码成两个变量,一个叫AssocProf,一个叫Prof:
    在这里插入图片描述
    这个哑变量编码由r自动执行。出于演示目的,您可以使用函数model.matrix()为一个因子变量创建一个 contrast matrix :
    在这里插入图片描述
    在这里插入图片描述
    在建立线性模型时,有不同的方法来编码分类变量,称为对比编码系统。R中的默认选项是使用因子的第一个水平作为参考,并解释相对于该水平的其余水平。

    注意,ANOVA(方差分析)只是线性模型的一种特殊情况,其中的预测因子是分类变量。而且,因为R理解ANOVA和回归都是线性模型的例子,它允许您使用R base anova()函数或*ANOVA()*函数[car包]从您的回归模型中提取经典的ANOVA。我们通常推荐Anova()函数,因为它会自动处理不平衡设计。
    使用多元回归方法预测工资的结果如下:
    在这里插入图片描述
    在这里插入图片描述
    取其他变量(yrs.service, rank and discipline),可以看出分类变量性别不再与个体间薪酬差异显著相关。重要变量是rank和discipline.。

    如果你想解释分类变量的对比,输入:
    在这里插入图片描述
    例如,我们可以看到,来自discipline B( applied departments) 的员工相对于discipline A(theoretical departments)平均工资增长13473.38,这是显著相关的。

    讨论

    在这一篇章中,我们描述了分类变量是如何包含在线性回归模型中的。由于回归需要数字输入,分类变量需要被重新编码成一组二元变量。

    我们提供了实际的例子,你有两个或两个以上水平的分类变量的情况。

    注意,对于具有大量水平的分类变量,将一些水平组合在一起可能是有用的。

    有些类别变量的级别是有序的。它们可以转换为数值并按原样使用。例如,如果教授等级(“AsstProf”、“AssocProf”和“Prof”)有特殊的含义,您可以将它们转换为数值,从低到高排序。

    展开全文
  •   1. 定量特征二值化   在数据挖掘领域,定量特征二值化的目的是为了对定量的特征进行“好与坏”的划分,以剔除冗余信息。举个例子,银行对5名客户的征信进行打分,分别为50,60,70,80,90...定性特征哑编码  

       1. 定量特征二值化   

       在数据挖掘领域,定量特征二值化的目的是为了对定量的特征进行“好与坏”的划分,以剔除冗余信息。举个例子,银行对5名客户的征信进行打分,分别为50,60,70,80,90。现在,我们不在乎一个人的征信多少分,只在乎他的征信好与坏(如大于90为好,低于90就不好);再比如学生成绩,大于60及格,小于60就不及格。这种“好与坏”、“及格与不及格”的关系可以转化为0-1变量,这就是二值化。变化方式如下所示:

                             

    from sklearn.preprocessing import Binarizer
    #阈值设置为3,对x的每一个元素都进行二值化
    Binarizer(threshold=3).fit_transform(x)      

             2. 定性特征哑编码

       

    展开全文
  • 哑变量=独热编码=稀疏矩阵 分类特征变量分为:名义变量,有序变量,有距变量 名义变量:如门A,B,C,指数据之间毫无关联性 有序变量:如小学,中学,大学,学历有高低,但不能相互计算 有距变量:如分数,体重,...
  • one-hot编码哑变量(dummy)编码

    千次阅读 2020-03-05 22:49:27
    1.one-hot编码和哑变量编码 1.1 定义 one-hot编码: dummy编码: 2.两种编码的区别
  • 通常根据模型的需要,类别型特征需要进行哑变量处理,即按照特征类别进行编码,一般一个类别为k的特征需要编码为一组k-1【避免引起多重共线性】个衍生哑变量,这样就可以表示特征内部所有的类别(将其中基准比较类设...
  • 分类变量要编码哑变量 重点 (Top highlight)One-hot encoding, otherwise known as dummy variables, is a method of converting categorical variables into several binary columns, where a 1 indicates the ...
  • 哑变量(虚拟变量)—— 具有k-1个二进制特征,基准特征将被忽略 独热编——:具有k个特征二进制特征 姓名 年纪 小明 童 康康 青 迈克 中 哑变量/虚拟变量 姓名 童 青 小明 1 0 康康 0 1 ...
  • 我们在用模型去解决机器学习问题的...但我们生活中常常遇到类别型变量(categorical variable),例如著名的Kaggle泰坦尼克生还预测这个比赛中,乘客从哪里上船(Embarked)这个变量就是类别型变量。这三个登船点两...
  • 哑变量(Dummy Variable),又称为虚拟变量、虚设变量或名义变量,从名称上看就知道,它是人为虚设的变量,通常取值为0或1,来反映某个变量的不同属性。对于有n个分类属性的自变量,通常需要选取1个分类作为参照,...
  • 数据预处理包含:数据盘点-数据可视化分析-空值填充-数据编码import matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.linear_model import ...
  • 我们刚才已经用OrdinalEncoder把分类变量Sex和Embarked都转换成数字对应的类别了。在舱门Embarked这一 列中,我们使用[0,1,2]代表了三个不同的舱门,然而这种转换是正确的吗? 我们来思考三种不同性质的分类数据: 1...
  • 数据预处理与特征工程----编码哑变量 ​ 相关数据集均放置在本人的csdn文件中,如有需要,可免费下载。内容来自老师上课的课件。侵删… 编码哑变量 背景 ​ 在机器学习中,大多数算法,譬如逻辑回归,支持向量...
  • 今天给各位分享怎么用spss做哑变量,也算是给不想敲代码的同学带来一些福利。 首先介绍下什么是哑变量哑变量是由虚拟变量衍生过来,指的是非数值型的字符变量转换而来的变量,通常情况下这些变量都是无序的变量。...
  • 超级详细的特征哑变量处理

    千次阅读 2020-04-14 23:56:17
    这里全程以df这个为例来讲解 import pandas as pd df=pd.DataFrame({'性别':['男','女','男','女'],'age':[2,3,4,3]}) ...get_dummies可以对多列(字符型和数值型)直接进行哑变量编码 缺点:如果在测试集中出...
  •     虚拟变量 ( Dummy Variables) 又称虚设变量、名义变量或哑变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程...
  • Pandas哑变量编码函数 get_dummies()函数可以将分类变量转换为哑变量/指示变量,结果生成一个行数等于数据的元素个数,列数等于变量数,列名为各变量名的DataFrame,对应分类变量的位置取值为1,其余位置取值为0。 ...
  • 若此时你使用的模型是简单模型(如LR),那么通常我们会对连续型特征进行离散化操作,然后再对离散的特征,进行one-hot编码或哑变量编码。这样的操作通常会使得我们模型具有较强的非线性能力。那么这两种编码方式是
  • .iloc[:,1:-1]=OrdinalEncoder().fit_transform(data_.iloc[:,1:-1]) #data_.head() 2、独热编码 preprocessing.OneHotEncoder 独热编码,创建哑变量 我们刚才已经用OrdinalEncoder把分类变量Sex和Embarked都转化成...
  • 哑变量引入回归模型,虽然使模型变得较为复杂,但可以更直观地反映出该自变量的不同属性对于因变量的影响,提高了模型的精度和准确度。举一个例子,如职业因素,假设分为学生、农民、工人、公务员、其他共5个分类...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,471
精华内容 1,388
关键字:

哑变量编码

友情链接: nucleo_452RE_blinky.rar