精华内容
下载资源
问答
  • 最常见的方法是对类别变量做哑变量编码或one-hot编码,所以运用最近的业务数据进行了尝试。哑变量编码和one-hot编码的具体介绍和区别在ML小菜鸟的博客中有比较详细的介绍博客链接。 做哑变量编码的库:pandas one-...

    在数据进行建模分析,无法直接把类别变量放入模型中去分析,因此,需要对类别变量进行处理。最常见的方法是对类别变量做哑变量编码或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]   
    
    • 对应的原始列表
    index factory label
    0 C10235 5
    1 C10135 3
    2 C10035 1
    3 C10135 3
    4 C10385 6
    5 C14534 7
    6 ** 0
    7 ** 0
    8 C10129 2
    9 C10150 4
    展开全文
  • 分类变量(也称为因子或定性变量)是可以将观测数据分组的变量。它们有有限数量的不同值,称为水平。例如,性别作为一个分类变量,它有两个水平:男性或女性。 回归分析需要数值变量。因此,当研究者希望在回归模型中...

    本篇描述分类变量如何进行回归(翻译自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. 定性特征哑编码

       

    展开全文
  • 数据预处理包含:数据盘点-数据可视化分析-空值填充-数据编码import matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.linear_model import ...

    数据预处理包含:数据盘点-数据可视化分析-空值填充-数据编码

    import matplotlib.pyplot as plt

    import seaborn as sns

    from sklearn.neighbors import KNeighborsClassifier

    from sklearn.linear_model import LogisticRegression

    from sklearn.tree import DecisionTreeClassifier

    from sklearn.svm import SVC

    import time

    import pandas as pd

    import numpy as np

    1.获取数据

    train_df = pd.read_csv(‘…/input/train.csv’)

    2.数据概览

    df.info()

    df.describe()

    df.head()

    3.数据可视化

    (1)df[‘label’].value_counts().plot.pie(autopct=’%1.1f%%’)

    73a2f9587899c46e557f2f82874543c8.png

    (2)df.groupby([‘X1’,‘Label’])[‘Label’].count()

    X1 Y

    female 0 81

    1 233

    male 0 468

    1 109

    (3)df[[‘X1’,‘Y’]].groupby([‘X1’]).mean(

    展开全文
  • 哑变量编码 df=pd.get_dummies(df,colunms=[X1,X2,X3]) 关注Python数据挖掘实战技术群,每周定期分享机器学习、数据挖掘、深度学习代码干货,get行业更新技能: 1机器学习数据挖掘代码实战技巧干货 pandas numpy ...
  • 1.one-hot编码和哑变量编码 1.1 定义 one-hot编码: dummy编码: 2.两种编码的区别
  • 分类变量要编码哑变量 重点 (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 ...
  • ['男','女','男','女'],'age':[2,3,4,3]})dfget_dummies处理pd.get_dummies(df,columns=['性别','age'])get_dummies可以对多列(字符型和数值型)直接进行哑变量编码缺点:如果在测试集中出现了训练集没有出现过的...
  • 通常根据模型的需要,类别型特征需要进行哑变量处理,即按照特征类别进行编码,一般一个类别为k的特征需要编码为一组k-1【避免引起多重共线性】个衍生哑变量,这样就可以表示特征内部所有的类别(将其中基准比较类设...
  • Pandas哑变量编码函数 get_dummies()函数可以将分类变量转换为哑变量/指示变量,结果生成一个行数等于数据的元素个数,列数等于变量数,列名为各变量名的DataFrame,对应分类变量的位置取值为1,其余位置取值为0。 ...
  • 通常根据模型的需要,类别型特征需要进行哑变量处理,即按照特征类别进行编码,一般一个类别为k的特征需要编码为一组k-1【避免引起多重共线性】个衍生哑变量,这样就可以表示特征内部所有的类别(将其中基准比较类设...
  • 离散变量编码

    2020-11-18 15:11:55
    文章目录无监督编码One-hot编码独热编码优缺点调库实现Dummy variable 编码(哑变量)离散变量 One-hot 编码或哑变量编码的优点Label 编码有监督编码WOE编码WOE 编码的好处为什么不直接用WOE做特征选择 而用IVIV代码...
  • 在机器学习问题中,我们通过训练数据集学习得到的其实就是一组...若此时你使用的模型是简单模型(如LR),那么通常我们会对连续型特征进行离散化操作,然后再对离散的特征,进行one-hot编码或哑变量编码。这样的操...
  • 在机器学习问题中,我们通过训练数据集学习得到的其实就是一组模型的...若此时你使用的模型是简单模型(如LR),那么通常我们会对连续型特征进行离散化操作,然后再对离散的特征,进行one-hot编码或哑变量编码。这样...
  • 若名义变量是有序的,则哑变量编码替代方法是给类别编号并应用min-max标准化。使用该方法注意点:只有确信类别间步长相等时,才能应用。如果有证据证明类别间步长不相等,那么哑变量编码是一种更保险方法 鲁棒性即...
  • dtype=object)] data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:,1:-1]) data_.head() preprocessing.OneHotEncoder preprocessing.OneHotEncoder:独热编码,创建哑变量 我们刚才已经用...
  •     虚拟变量 ( Dummy Variables) 又称虚设变量、名义变量或哑变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程...
  • 这里全程以df这个为例来讲解 import pandas as pd df=pd.DataFrame({'性别':['男','女','男','女'],'age':[2,3,4,3]}) ...get_dummies可以对多列(字符型和数值型)直接进行哑变量编码 缺点:如果在测试集中出...
  • 变量编码方式

    2019-11-10 15:20:35
    在机器学习问题中,我们通过训练数据集学习得到的其实就是一组...若此时你使用的模型是简单模型(如LR),那么通常我们会对连续型特征进行离散化操作,然后再对离散的特征,进行one-hot编码或哑变量编码。这样的操...
  • 最常见的方法是对类别变量做因子化处理、哑变量编码或one-hot编码、目标编码。 还有将连续性变量变成离散型的。在机器学习问题中,我们通过训练数据集学习得到的其实就是一组模型的参数,然后通过学习得到的参数确定...
  • 我们在用模型去解决机器学习问题的...但我们生活中常常遇到类别型变量(categorical variable),例如著名的Kaggle泰坦尼克生还预测这个比赛中,乘客从哪里上船(Embarked)这个变量就是类别型变量。这三个登船点两...
  • 数据预处理与特征工程----编码哑变量 ​ 相关数据集均放置在本人的csdn文件中,如有需要,可免费下载。内容来自老师上课的课件。侵删… 编码哑变量 背景 ​ 在机器学习中,大多数算法,譬如逻辑回归,支持向量...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 184
精华内容 73
关键字:

哑变量编码