精华内容
下载资源
问答
  • 将不同的分类变量转换为虚拟变量
    2020-12-05 17:16:21

    没有。priority或cluster中的列不会被误解为严重性的第三列。在

    以下是如何保存引用的答案:

    在pandas.get_dummies中有一个参数,即drop_first允许您保留还是删除引用(是否将k或k-1虚拟对象排除在k个分类级别之外)。在

    请注意drop_first = False这意味着引用不会被删除,并且k个伪对象是在k个分类级别上创建的!设置drop_first = True,编码后它将删除引用列。在

    {此处链接^。在

    与您的例子一样,severity有3个类别S1、S2和S3。

    创建假人后,这些类别中的一个将始终为1,其他类别为0。在

    s1为[1,0,0],s2为[0,1,0],s3为[0,0,1]

    现在,如果您删除类别s1的列。在

    如果严重性为S1,则值将为[0,0]

    [1,0]如果严重性为S2

    [0,1]如果严重性为S3。在

    所以这里没有信息丢失,而且您的模型只需要处理一个列。

    这就是为什么总是建议将drop_first参数保留为True。在

    编辑:

    应用假人后,您将得到如下列:severity_S1 severity_S2 severity_S3

    1 0 0 # when value is S1

    0 1 0 # when value is S2

    0 0 1 # when value is S3

    pandas.get_dummies()创建上述引用后删除第一列。

    因此,您的数据如下所示:

    ^{pr2}$

    对于所有这些变量,最终数据如下所示:

    由于空间问题,我使用短列名:s2 s3 p2 p3 B C D

    0 0 1 0 1 0 0 # For row with S1, P2 and B

    0 1 0 1 0 1 0 # For row with S3, P3 and C

    1 0 0 0 0 0 1 # For row with S2, P1 and D

    1 0 0 0 0 0 0 # For row with S2, P1 and A

    更多相关内容
  •  Java语言里的变量以下4类:  1. Instance Variables: (Non-Static Fields) 是类里非静态的field  2. Class Variables: (Static Fields) 类里静态的field  3. Local Variables: 局部变量  4. Parameters...
  • 变量的概念:变量也就是就是一种可以进行测量的数据条目(data item),对于定义变量在...变量分类有些变量是一些数值,可以计算或者测量出来,这些变量是量化的定量变量(或数值变量,quantitative or numeric var...

    564da1589ab854a147704b0287b26057.gif

    变量的概念:变量也就是就是一种可以进行测量的数据条目(data item),对于定义变量在统计里非常重要,特别是在进行SPSS分析的时候,需要明确定义一个变量的性质。打开SPSS软件时,数据录入界面上面就显示的全部是变量,如图部分就是变量:

    9dd06d7008c8f5d8e0b8fe343a17e6d1.png

    1. 变量的分类

    有些变量是一些数值,可以计算或者测量出来,这些变量是量化的定量变量(或数值变量,quantitative or numeric variable)。还有一些如性别、血型、出生地等进行分类的定性的变量(或分类变量/属性变量,qualitative, categorical or attribute variable),比如男和女,ABO型、城市农村等等。

    ①定性变量

    在定性变量中,如:性别、血型、民族这种类型的变量的信息之间没有等级区分,不能说性别男大于女,也不能给种族拍个先后顺序,因此这些变量是无序的,只作为分类,给不同类别定义一个名称,这类变量称为无序变量(unordered-qualitative variable)。无序变量是没有顺序、没有等级划分,但是能够被分类(classified)和计数(counted)的一种变量。

    与无序变量相对的就是有序变量(ordered-qualitative bariable),这类变量可以进行等级划分,进行排序比较,比如病情严重的程度可以分为高中低,治疗效果分为好中差。这也是定性变量的一个性质。

    ②定量变量

    在定量变量中,有些是离散的不能够连续的,称为离散变量(或非连续性变量,discrete or uncontinuous variable),这类型的变量只能取到的是某些特定的值,他们之间存在着一些“间隔/间隙”。比如,旅游的日程只有4天、5天、7天等,而有些是连续变量(continuous variable),是在给定的范围内,可以取到任何的数值的变量,离散变量中,不能说旅游的日程是4.135天,通常要么4天要么5天,而比如体重、身高等在一个范围内就可以取任意值,比如1.75m,1.76m,或者1.752m,根据需求可以保留任意小数位的变量。

    2. 变量的测量尺度

    测量尺度又可以分开理解测量和尺度,测量就是将数分配给一个对象(object)或者事件(event)的特征(characteristic),使其与其他对象或特征进行比较。也就是用数值对事物或其特征进行比较。尺度(scale)就是为了测量而建立的准则。统计中常用测量尺度分为以下四个:

    ①定类尺度/明目尺度

    定类尺度是对事物进行分类的一种尺度,赋予定类尺度的数值只是为了区分种类,没有顺序大小而言,SPSS中可以将性别分为1=男,2=女,虽然1<2,但不说明男同时1与2也不可以加减计算,因为男+女并没有任何的意义。因此定类尺度并不能够进行数学计算。这样的例子还有民族、血型等。

    ②顺序尺度/等级尺度

    顺序尺度是给事物区分等级的一种尺度,是一种分类。比如病情的严重程度分为轻中重,药物的疗效分为一般、较好、很好等等。这些分类之间有着明显的等级关系,或者说是排序关系,但他们之间也不能加减计算。

    ③间隔尺度

    是指事物的数值之间具有一定的间隔,这个间隔是等距的,因此也被成为是等距尺度。比如温度(非温度差)、时间(非小时),这些的数据是连续的,同时没有实际意义的0。因为0°并不代表没有温度,00:00也不代表是不存在时间。间隔尺度的对象有顺序、可以进行比较,也就是具有定类尺度和顺序尺度的所有特点。这类尺度研究的事物只能对其间隔进行计算,也就是说只可进行加减计算,却不能进行乘除计算,比如1点*2点并没有什么意义,2018年/2017年也没有任何意义。

    ④比例尺度/定比尺度

    这类数据,连续的,同时存在类别、顺序、可以比较大小、有差异、可以相加、可以计算比例、也可以相乘,而且0点具有实际的意义,比如收入(income),0就代表没有任何收入,且数值可以任意计算。

    3.SPSS中的变量

    SPSS分析软件中,如下图所示,“类型”列是选择变量类型(Variable Type)的地方,右面“测量”列选的是测量尺度(Measure scale)的地方,因为SPSS一般是对数值进行处理,因此一般变量的类型(Type)会选择“数字”

    3baf386421d794c425db4463b2b2403a.png

    数据->定义变量属性里就可以进行更详细的编辑,同时能够更具体看到SPSS中是如何定义尺度的。

    c76ac99506f5692e7139c87c5ca23b71.png

    最后我们小结一下,这四种数据依次为:无序分类变量(nominal) 、有序分类变量(ordinal)、 离散型数值变量(discrete)、连续型数值变量(continuous),用一张图来表示如下:

    39662bc7823d182a42d8fbf0982b3a95.png

    146a8edc23438adf5cfca799fd3c2fa4.gif

    展开全文
  • 15种分类变量编码方法

    千次阅读 2021-02-16 11:04:34
    机器学习问题建模中,15种分类变量编码方法。

    原文:HTML
    原题:All about Categorical Variable Encoding:Convert a categorical variable to number for Machine Learning Model Building
    作者:Baijayanta Roy
    翻译校对:datamonday



    在这里插入图片描述
    大多数机器学习算法都无法处理分类变量,需要将它们转换为数值。许多算法的性能会根据分类变量的编码方式而有所不同
    在这里插入图片描述
    以下是标量(Nominal variable)的一些示例:

    • Red, Yellow, Pink, Blue
    • Singapore, Japan, USA, India, Korea
    • Cow, Dog, Cat, Snake

    序数变量(Ordinal variables)的示例:

    • High, Medium, Low
    • “Strongly agree,” Agree, Neutral, Disagree, and “Strongly Disagree.”
    • Excellent, Okay, Bad

    可以通过多种方式将这些分类变量编码为数值,这篇文章将介绍从基本到高级的大多数内容,包含以下编码方法:

    1. One Hot Encoding
    2. Label Encoding
    3. Ordinal Encoding
    4. Helmert Encoding
    5. Binary Encoding
    6. Frequency Encoding
    7. Mean Encoding
    8. Weight of Evidence Encoding
    9. Probability Ratio Encoding
    10. Hashing Encoding
    11. Backward Difference Encoding
    12. Leave One Out Encoding
    13. James-Stein Encoding
    14. M-estimator Encoding
    15. Thermometer Encoder (To be updated)

    为了说明起见,我将使用此数据表格(DataFrame),其包含两个独立变量或特征(温度和颜色)和一个标签(目标)。 它还具有Rec-No,它是记录的序列号,共有10条记录。Python代码如下所示。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们将使用Pandas和Scikit-learn和category_encoders(Scikit-learn贡献库)来显示Python中的不同编码方法。


    One Hot Encoding

    在这种方法中,将每个类别映射到一个包含1和0的矢量,表示该特征的存在与否。 向量的数量取决于特征类别的数量。如果该特征类别的数量非常多,则此方法会产生很多列,从而大大降低学习速度。 Pandas的 get_dummies 函数可以将分类变量编码为哑变量:

    在这里插入图片描述
    Scikit-learn中的 OneHotEncoder 类也可以实现,但它不会创建其他特征列。
    在这里插入图片描述
    独热编码(One Hot Encoding)非常流行。可以用N-1(N=类别数)来表示所有类别,因为这足以对没有包含的类别进行编码。通常,对于回归,使用N-1(放弃独热编码新特征的第一列或最后一列),但对于分类,建议使用所有N列,因为大多数基于树的算法都是基于所有可用变量建立一棵树。在线性回归中应该使用具有N-1个二元变量的一热编码,以确保正确的自由度数(N-1)。线性回归在训练的过程中,可以获得所有的特征,因此会完全检查整个虚变量集。这意味着N-1个二元变量给线性回归提供了原始分类变量的完整信息(完全代表)。这种方法可以用于任何在训练过程中同时考察所有特征的机器学习算法。例如,支持向量机和神经网络以及和聚类算法。

    在基于树的方法中,如果删除,将永远不会考虑该附加标签。 因此,如果在基于树的学习算法中使用分类变量,则比较好的做法是将其编码为N个二进制变量,并且不要丢弃。


    Label Encoding

    在这种编码中,为每个类别分配了一个从1到N的值(N为特征的类别数)。这种方法的一个主要问题是这些类别之间没有关系或顺序,但是算法可能会将它们视为但是算法可能会将它们视为某种顺序,或者存在某种关系。 在下面的示例中,它看起来像(Cold <Hot <Very Hot <Warm … 0 <1 <2 ❤️)。
    在这里插入图片描述
    Pandas的 factorize 也执行相同的功能。

    在这里插入图片描述


    Ordinal Encoding

    我们执行序数编码以确保变量的编码保留变量的序数性质。 正如我在本文开头提到的那样,这仅对序数变量合理。 这种编码看起来几乎与标签编码类似,但略有不同,因为标签编码不会考虑变量是否为序数,并且会分配整数序列

    • as per the order of data (Pandas assigned Hot (0), Cold (1), “Very Hot” (2) and Warm (3)) or
    • as per alphabetical sorted order (scikit-learn assigned Cold(0), Hot(1), “Very Hot” (2) and Warm (3)).

    如果我们以温度标尺为顺序,则顺序值应从“冷”到“非常热”。 顺序编码会将值指定为 ( Cold(1) <Warm(2)<Hot(3)<Very Hot(4))。 通常,我们从1开始进行序数编码。

    使用Pandas引用此代码,首先,需要通过字典分配变量的原始顺序。 然后按照字典映射变量的每一行。
    在这里插入图片描述
    尽管非常简单,但仍需要进行编码以告知序数值,以及按顺序从文本到整数的实际映射是什么。


    Helmert Encoding

    在此编码中,将某个级别的因变量的平均值与所有先前级别的因变量的平均值进行比较。

    category_encoders中的版本有时称为反向Helmert编码。 将某个级别的因变量平均值与之前所有级别的因变量平均值进行比较。因此,名称“reverse”用于区别于 forward Helmert编码。

    在这里插入图片描述


    Binary Encoding

    二进制编码将类别转换为二进制数字。 每个二进制数字创建一个特征列。 如果存在n个唯一类别,则二进制编码将导致仅有log(base 2)ⁿ 个特征。 在此示例中,有四个特征; 因此,二进制编码特征的总数将是三个特征。 与“独热编码”相比,这将需要较少的特征列(对于100个类别,“独热编码”将具有100个特征,而对于“二进制”编码,我们将仅需要七个特征)

    对于二进制编码,必须遵循以下步骤:

    • 首先,将类别转换为从1开始的数字顺序(顺序是在类别出现在数据集中时创建的,并不表示任何序数性质)
    • 然后,将这些整数转换为二进制代码,例如3变为011,4变为100。
    • 然后,二进制数的数字形成单独的列。

    请参考下图:
    在这里插入图片描述
    使用category_encoders包中的 BinaryEncoder 函数可以实现二进制编码。
    在这里插入图片描述


    Frequency Encoding

    这是一种利用类别的频率作为标签的方法在频率与目标变量有些相关的情况下,它可以帮助模型根据数据的性质以正比例和反比例理解和分配权重。 三个步骤:

    • 选择要转换的分类变量
    • 按类别变量分组并获得每个类别的计数
    • 将其与训练数据集重新结合

    在这里插入图片描述


    Mean Encoding

    平均编码或目标编码是Kagglers遵循的一种病毒(viral)编码方法。这有很多变化,我将介绍基本版本和平滑版本。平均编码与标签编码类似,只是这里的标签与目标直接相关。例如,在平均目标编码中,对于特征标签中的每一个类别,都是用目标变量在训练数据上的平均值来决定的。这种编码方法将相似类别之间的关系凸显出来,但联系被限定在类别和目标本身之内。平均目标编码的优点是不影响数据量,有助于加快学习速度。通常,Mean编码存在过拟合,因此,在大多数场合,使用交叉验证或其他方法进行正则化是必须的。平均数编码的方法如下:

      1. 选择要转换的分类变量。
      1. 按类别变量分组,并获得“目标”变量上的汇总和。 (“温度”中每个类别的总数为1)
      1. 按类别变量分组,并获得“目标”变量的总计数。
      1. 划分第2步/第3步的结果,然后将其与训练集合并。

    在这里插入图片描述
    代码实现:
    在这里插入图片描述
    均值编码可以在标签中体现目标,而标签编码与目标不相关。在具有大量特征的情况下,均值编码可能被证明是更简单的选择。均值编码倾向于对类别进行分组,而在标签编码的情况下,分组是随机的。

    实际上,此目标编码有多种变体,例如平滑。 平滑可以实现如下:

    在这里插入图片描述


    Weight of Evidence Encoding

    证据权重(WoE)是衡量分组技术区分好坏的“强度”的一种度量。 开发此方法主要是为了建立一种预测模型,以评估信贷和金融行业中的贷款违约风险。 证据权重(WOE)用于衡量证据支持或破坏假设的程度

    其计算方法如下:
    在这里插入图片描述
    如果P(Goods) / P(Bads) = 1,则WoE将为0。也就是说,该组的结果是随机的。 如果P(Bads) > P(Goods) ,则优势比将小于1,WoE将小于0; 另一方面,如果一组中的P(Goods) > P(Bads),则WoE> 0。

    WoE非常适合Logistic回归,因为Logit变换只是几率的对数,即 ln(P(Goods)/P(Bads))。 因此,通过在Logistic回归中使用WoE编码的预测变量,可以将所有预测变量准备和编码为相同的比例。线性逻辑回归方程中的参数可以直接比较。

    WoE转换具有(至少)三个优点:

    • 1)它可以转换自变量,以便与因变量建立单调关系。它所做的还不止于此:要确保单调关系,将其“重新编码”为任何有序的度量(例如1,2,3,4…)就足够了,但是WoE转换按“逻辑”规模对类别进行排序, Logistic回归很自然;
    • 2)对于具有太多(稀疏填充)离散值的变量,可以将它们分为几类(密集填充),并且WoE可以用于表示整个类别的信息;
    • 3)由于WoE是标准值,因此可以在类别和变量之间比较每个类别对因变量的(单变量)影响(例如,可以将已婚人员的WoE与体力劳​​动者的WoE进行比较)。

    它还(至少)具有三个缺点:

    • 1)由于归类为几个类别而导致的信息丢失;
    • 2)这是一个“单变量”量度,因此未考虑自变量之间的相关性
    • 3)根据类别的创建方式,很容易操纵(过拟合)变量的影响。

    下面代码片段说明了如何构建代码来计算WoE。
    在这里插入图片描述

    一旦为每个组计算WoE,我们就可以将其映射回Data-frame。
    在这里插入图片描述


    Probability Ratio Encoding

    概率比编码与证据权重(WoE)类似,唯一的区别是仅使用了好坏概率之比。 对于每个标签,我们计算target = 1的平均值,即平均值为 1 ( P(1) ),以及target = 0 ( P(0) )的概率。 然后,我们计算比率P(1)/P(0)并用该比率替换标签。我们需要为P(0)添加一个最小值,以避免任何除以零的情况,其中对于任何特定类别,没有target = 0。

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


    Hashing

    散列将分类变量转换为整数的高维空间,其中分类变量的两个向量之间的距离大致保持了变换后的数字维空间。 使用散列时,维度数量将远远少于像“独热编码”这样的编码方式的维度数量当分类的基数非常高时,此方法很有用


    Backward Difference Encoding

    在后向差分编码中,将一个级别的因变量的平均值与先前级别的因变量的平均值进行比较。 这种类型的编码对于标称或有序变量可能有用。

    该技术属于用于分类特征的对比度编码系统。 K个类别或级别的特征通常以K-1个虚拟变量序列的形式进入回归。


    Leave One Out Encoding

    这与目标编码非常相似,但是在计算某个级别的平均目标以减少离群值的影响时会排除当前行的目标。


    James-Stein Encoding

    对于特征值,James-Stein估计量返回的加权平均值为:

    1. 观察到的特征值的平均目标值。
    2. 平均目标值(与特征值无关)。
      James-Stein编码器将平均值缩小为总体平均值。 它是基于目标的编码器。 但是,James-Stein估计量有一个实际限制-仅针对正态分布进行了定义。

    M-estimator Encoding

    M-Estimate编码器是目标编码器的简化版本。 它只有一个超参数-m,代表正则化的功效。 m值越高,收缩越强。 m的推荐值在1到100的范围内。


    FAQ

    【常见问题解答01:我应该使用哪种方法?】

    答:没有适用于每个问题或数据集的单一方法。 你可能需要尝试一些才能看到效果更好的结果。 一般准则是参考文章末尾显示的备忘单。

    【常见问题解答02:如何针对情况(例如目标编码)创建分类编码,因为在测试数据中不会有任何目标值?】

    答:我们需要使用训练时创建的映射值。 此过程与缩放或规范化中的概念相同,在缩放或规范化中,我们使用训练数据来缩放或规范化测试数据。 W映射并在测试时间预处理中使用相同的映射。 我们甚至可以为每个类别和映射值创建一个词典,然后在测试时使用该词典。 在这里,我使用均值编码来解释这一点。

    Training Time
    在这里插入图片描述
    Testing Time
    在这里插入图片描述


    Conclusion

    对于所有机器学习模型,必须理解所有这些编码在所有情况下或对于每个数据集都无法正常工作。 数据科学家仍然需要进行实验,并找出最适合其特定情况的方法。 如果测试数据具有不同的类别,则其中某些方法将无法使用,因为功能将不相似。 研究社区的基准出版物很少,但不是结论性的,效果最好。 我的建议是尝试使用较小的数据集尝试每种方法,然后决定将重点放在调整编码过程上。 可以使用下面的备忘单作为指导工具。
    在这里插入图片描述

    展开全文
  • 在前面几讲,我们介绍了线性回归及R的实现。今天的课程将继续带大家...前面我们已经提到,当自变量是连续变量时,线性回归可以写成一个线性方程式y = b0 + b1*x1 + b2*x2 + …那么,当自变量是分类变量时,回归分析...

    在前面几讲,我们介绍了线性回归及R的实现。今天的课程将继续带大家学习多元线性回归。当我们提到“线性”回归时,特指的是因变量(结果变量)为连续性变量,与自变量(预测变量)有线性关系,而对自变量(预测变量)并没有要求一定要是连续性变量。前面我们已经提到,当自变量是连续变量时,线性回归可以写成一个线性方程式y = b0 + b1*x1 + b2*x2 + …

    那么,当自变量是分类变量时,回归分析时如何处理的呢?我们能不能把各个分类的类别像血压、血糖数值一样,对应为响应的数值大小来处理呢?

    这显然是不可以的,因为分类变量各类别间,可能并没有一个高低之分。今天我们将带你找到答案。

    1. 分类变量

    分类变量(也称为因子或定性变量)是将观察指标分类的变量。它们具有数量有限的不同值,称为级别。例如,性别是可以分为两个级别的分类变量:男性或女性。

    回归分析时需要用数值变量。因此,当需要将分类变量用在回归模型中时,需要对分类变量进行补充处理,以使结果可解释。

    通常,我们需要将分类变量进行重新编码,使成为一系列二进制的变量,被称为对比矩阵。这个新的编码,被称为“哑变量”

    2. 加载所需的R包

    #tidyverse 便于数据操作和可视化

    library(tidyverse)

    2.1 数据集示例

    我们将使用在car软件包中的Salaries数据集,其中包含2008-09年度某学校助理教授,副教授和教授的9个月工资情况。收集这些数据是该学校行政部门为监测男女教职员工薪资差异而收集的数据。 获取数据
    data("Salaries", package = "car")
    检查数据,随机抽取3个样本显示。
    sample_n(Salaries, 3)
    输出结果:
    rank discipline yrs.since.phd yrs.service    sex salary115 Prof          A            12           0 Female 105000313 Prof          A            29          19   Male  94350162 Prof          B            26          19   Male 176500

    2.2 具有两个级别的分类变量 ~二分类变量

    基于预测变量(x)预测结果变量(y)的回归方程可以写为 y = b0 + b1*x。b0和b1是回归beta系数,分别代表截距和斜率。 假设,我 们 希望 调查 男 性 和女性之间的 工 资 差异。基于性别变量,我们可以创建一个新的虚拟变量,其值如下:

    ·1  是男性

    ·0  是女性

    并将此变量用作回归方程式的预测变量,从而得出以下模型:

    ·b0 + b1 如果是男性 (y = b0 + b1 * 1)

    ·b0 如果是女性(x = b0 + b1 * 0)

    系数可以解释如下:1)     b0 是女性的平均工资。2)     b0+ b1 是男性的平均工资。3)    而 b1在男性和女性之间的工资的平均差异。 我们以Salaries数据集中男女工资差异为例,进行解说:建立一个简单的线性回归模型来解释男性和女性之间的工资差异 。

    虽然数据中sex是Male和Female,但是R会自动创建哑变量,于是模型结果如下:

    model ~ sex, data = Salaries)summary(model)$coef
    输出结果
    Estimate Std. Error t value Pr(>|t|)(Intercept)   101002       4809   21.00 2.68e-66sexMale        14088       5065    2.78 5.67e-03

    从上面的输出中,女性的平均工资估计为101002,而男性的平均工资估计为101002 + 14088 = 115090。哑变量sexMale的p值 = 5.670e-3, 非常显着,表明有统计证据表明性别之间的平均工资存在差异。

    使用contrasts()函数可以返回R创建的哑变量编码:

    contrasts(Salaries$sex)
    输出结果
    MaleFemale    0Male      1

    R创建了一个sexMale虚拟变量,如果性别为Male,则其值为1,否则为0。将男性编码为1,女性编码为0(基线)的决定是任意的,并且对回归计算没有影响,但会改变系数的解释方向。

    您可以使用函数relevel()将基线类别设置为男性,如下所示:

    Salaries %mutate(sex = relevel(sex, ref = "Male"))

    回归拟合的输出变为:

    model ~ sex, data = Salaries)summary(model)$coef
    输出结果
    Estimate Std. Error t value  Pr(>|t|)(Intercept)   115090       1587   72.50 2.46e-230sexFemale     -14088       5065   -2.78  5.67e-03

    sexFemale回归输出中的系数为负。这一事实表明,女性与工资的下降(相对于男性)相关。

    现在对b0和b1的估计分别为115090和-14088。解释为:

    男性的平均工资为11509,女性的平均预测为115090-14088 = 101002。

    此外,除了0/1编码外,我们还可以创建一虚拟变量-1(male)/ 1(female)。结果模型:

    ·b0 - b1 如果是男性

    ·b0 + b1 如果是女性

    2.3 具有两个以上级别的分类变量 – 多分类变量

    通常,将具有n个级别的分类变量转换为n-1个哑变量。这n-1个哑变量包含的信息与单个变量相同。重新编码将创建矩阵,称为对比矩阵。

    例如,Salaries数据集中的rank具有三个级别:“ AsstProf”,“ AssocProf”和“ Prof”。可以将该变量编码为两个哑变量,一个称为AssocProf,另一个称为Prof:

    ·如果rank = AssocProf,则列AssocProf的编码为1,Prof的编码为0。

    ·如果rank = Prof,则将AssocProf列编码为0,将Prof列编码为1。

    ·如果rank = AsstProf,则“ AssocProf”和“ Prof”两列都将编码为0。

    该变量的编码由R自动执行。您可以使用函数model.matrix()为分类变量创建对比矩阵,进行学习:

    res head(res[, -1])
    输出结果
    rankAssocProf rankProf1             0        12             0        13             0        04             0        15             0        16             1        0

    建立线性模型时,有多种方法来编码分类变量,称为对比编码系统。R中的默认选项是使用分类变量的第一个级别作为参考,并用以解释相对于该级别的其余级别,比如,结果解释为:相对于该参考级别,某级别是参考级别的几倍。

    请注意,ANOVA(方差分析)是线性模型的一种特殊情况,其中预测变量是分类变量。并且,由于R理解ANOVA和回归都是线性模型的示例,因此您可以使用anova()函数或Anova()函数[car包中] ,从回归模型中提取经典ANOVA表。我们通常建议使用此Anova()功能,因为它会自动处理不平衡设计。

    下面显示了使用多元回归预测薪水的结果。

    library(car)model2 Anova(model2)
    输出结果
    Anova Table (Type II tests)Response: salary              Sum Sq  Df F value  Pr(>F)   yrs.service 3.24e+08   1    0.63    0.43   rank        1.03e+11   2  100.26 < 2e-16 ***discipline  1.74e+10   1   33.86 1.2e-08 ***sex         7.77e+08   1    1.51    0.22   Residuals   2.01e+11 391        ---Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    考虑到其他变量(服务年数,职级和学科),可以看出分类变量性别不再与个人之间的薪资差异显着相关。重要变量是教职等级和学科。

    如果要查看详细内容,请输入以下内容:

    summary(model2)

    输出结果

    Call:lm(formula = salary ~ yrs.service + rank + discipline + sex,  data = Salaries)Residuals:Min     1Q Median     3Q    Max-64202 -14255  -1533  10571  99163Coefficients:              Estimate Std. Error t value Pr(>|t|)   (Intercept)    73122.9     3245.3   22.53  < 2e-16 ***yrs.service      -88.8      111.6   -0.80  0.42696   rankAssocProf  14560.4     4098.3    3.55  0.00043 ***rankProf       49159.6     3834.5   12.82  < 2e-16 ***disciplineB    13473.4     2315.5    5.82  1.2e-08 ***sexFemale      -4771.2     3878.0   -1.23  0.21931 ---Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Residual standard error: 22700 on 391 degrees of freedomMultiple R-squared:  0.448,  Adjusted R-squared:  0.441F-statistic: 63.4 on 5 and 391 DF,  p-value:<2e-16< span="">

    例如,可以看出,与学科A(理论系,基线)相比,来自学科B(应用系)的工资平均增加了13473.38。

    2.4 注意

    当分类变量具有大量级别时,将某些级别组合在一起,可以减少哑变量数。

    某些分类变量的级别是有序的。它们可以被转换为数值(0,1,2,3…)并按连续性变量处理。

    例如,如果教授等级(“ AsstProf”,“ AssocProf”和“ Prof”)具有特殊含义,则可以将它们转换为数值,从低到高排序(AsstProf = 0, AssocProf = 1, Prof = 2),对应于不同等级的教授。

    参考内容:

    1. Alboukadel Kassambara, Machine Learning Essentials: Practical Guide in R.

    fee9d441422b7504f8058b8542b6113e.png 好了,本期讲解就先到这里。小伙伴们赶紧试起来吧。 提前预告一下,下一讲我 们将学习R-线性回归: 预测模型及可信区间。

    90a4d2aeae93c5afafa3f2c271b25429.png

    展开全文
  • pandas处理分类变量的方法

    千次阅读 2020-04-23 16:14:56
    在对这些分类变量处理的时候要注意以下两点原则 离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码 离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,...
  • 前面我们已经提到,当自变量是连续变量时,线性回归可以写成一个线性方程式y = b0 + b1*x1 + b2*x2 + …那么,当自变量是分类变量时,回归分析时如何处理的呢?我们能不能把各个分类的类别像血压、血糖数值一样,...
  • 分类变量

    千次阅读 2020-06-27 23:38:08
    一、分类变量category的创建及其性质 1、分类变量的创建 (a)用Series创建 pd.Series(["a", "b", "c", "a"], dtype="category") (b)对DataFrame指定类型创建 (c)利用内置categorical类型创建 cat = pd....
  • 我们前面已经讲过可以用逆变换法对连续型随机变量进行模拟。该方法必须保证分布函数的逆函数有一个显式的表达。这在大多数情况下是很难做到的。比如正态分布的分布函数就没有显式的表达,更不说其逆函数了。这样用...
  • 一、问题与数据研究者想探索类风湿关节炎躯体感觉的症状数量与疼痛等级之间的关系,从一家...研究对象自报的类风湿关节炎躯体感觉症状数量在1-6个之间,为有序分类变量,变量名为symptoms。医生将研究对象的疼痛分...
  • 转自个人微信公众号【Memo_Cleon】的统计学习笔记两个概念:RR和OR二分类资料的logistic回归SPSS操作示例几个需要注意的问题:样本量、哑变量、模型拟合效果和拟合优度检验、多重共线【1】两个概念RR(Relative Risk)...
  • r语言 分类变量 虚拟变量 R语言| 变数 (R Language | Variables) In the previous tutorial, we have come across the basic information that stands as a pavement for understanding the R language in depth. ...
  • 分类变量转换为哑变量组 文章目录将分类变量转换为哑变量组前言1. 创建哑变量(虚拟变量)的基本操作--一个变量2. 创建哑变量(虚拟变量)的基本操作--多个变量3. 考虑交互作用 前言 哑变量(DummyVariable) ...
  • 在表格数据集上创建任何机器学习模型之前, 通常我们会检查独立变量和目标变量之间是否存在关系。这可以通过测量两个变量之间的相关性来...案例 1: 当独立变量只有两个值时点双性关联如果分类变量只有两个值 (即 true...
  • 在这项研究中,提出了一种用于多类分类的新型机器学习算法。 所提出的方法是基于最小距离分类器(MDC)算法设计的。 MDC 对方差不敏感,因为它通过计算输入向量相对于类质心(类输入向量的平均值)的距离/相似度来对...
  • 在表格数据集上创建任何机器学习模型之前, 通常我们会检查独立变量和目标变量之间是否存在关系。这可以通过测量两个变量之间的相关性来...案例 1: 当独立变量只有两个值时点双性关联如果分类变量只有两个值 (即 true...
  • 超级详细的特征哑变量处理

    千次阅读 2020-12-05 17:16:24
    ['男','女','男','女'],'age':[2,3,4,3]})dfget_dummies处理pd.get_dummies(df,columns=['性别','age'])get_dummies可以对多列(字符型和数值型)直接进行哑变量编码缺点:如果在测试集中出现了训练集没有出现过的...
  • 统计学当中关于变量分类

    万次阅读 2018-11-29 10:46:18
     统计学中的变量(variables)大致可以分为数值变量(numrical)和分类变量(categorical)。  数值型变量是值可以取一些列的数,这些值对于 加法、减法、求平均值等操作是有意义的。而分类变量对于上述的操作是...
  • 【单选题】Python文本处理方向的第三方库是【单选题】哪个选项的描述是正确的?【单选题】以下选项中属于Python语言中合法的二进制整数是【单选题】以下说法错误的是:【单选题】下面属于B2B电子商务模式的是( )。...
  • 【多选题】现场考察是投标单位必须经过的投标程序,应从以下几方面了解( )【单选题】下列哪种液体可以反应内环境的稳态【多选题】5. 社会保险主要包括( )。【单选题】下列哪种物质可作为评定耐力运动员安静状态时的...
  • 变量分类

    千次阅读 2017-01-18 15:43:52
    1、变量分类关于变量分类: 1)按照数据类型的不同:基本数据类型(8种) 和 引用数据类型 2)按照声明的位置的不同:成员变量 和 局部变量2、成员变量(属性)和局部变量的区别?成员变量: (1)声明位置:...
  • 之前在项目的存储过程中发现有通过 `DECLARE` 关键字定义的变量如`DECLARE cnt INT DEFAULT 0;`,还有形如 `@count` 这样的变量,存储过程中拿过来直接就进行设置,像这样`set @count=1;`,这两种类型的变量究竟有...
  • 在这篇博客中,我将会向你介绍如何在keras的基础上,使用深度学习网络为分类变量创建嵌入。这一概念最初由Jeremy Howard在他的fastai课程上提出。更多详情请查看链接。 传统嵌入 对于大多数我们处理的数据源...
  • 我正在为scikit-learn的随机森林分类器生成特征向量.特征向量代表9个蛋白质氨基酸残基的名称.有20个可能的残留名称.所以,我使用20个虚拟变量来表示一个残基名称,对于9个残基,我有180个虚拟变量.例如,如果滑动窗口中...
  • dummyVars函数: dummyVars creates a full set of dummy... less than full rank parameterization----建立一套完整的虚拟变量 survey<-data.frame(service=c("very unhappy","unhappy","neutral","happy","ve...
  • 数据分析中的变量分类

    千次阅读 2017-08-01 10:50:00
    数据分析工作每天要面对各种各样的数据,每种数据都有其特定的含义、使用范围和分析方法,同一个数据在不同环境下的意义也不一样,因此我们想要选择...每个变量都有变量值,变量值就是我们分析的内容,它是没有含义...
  • 09 变量分类

    2020-08-11 09:46:06
    在方法体外,类体内声明的变量称为成员变量,成员变量声明时如果使用 static 关键字修饰的为静态成员变量(简称静态变量),如果没有 static 关键字修饰则称为实例成员变量(简称实例变量),请看以下代码: ...
  • 深度学习编码分类变量的3种方法

    千次阅读 2019-12-23 16:41:25
    像Keras中的机器学习和深度学习模型一样,要求所有输入和输出变量均为数字。 这意味着,如果你的数据包含分类数据,则必须先将其编码为数字,然后才能拟合和评估模型。 两种最流行的技术是整数编码和一种热编码,...
  • 【单选题】有一组供用户标识为感兴趣或不感兴趣的网页,可被机器学习用来解决网页过滤问题,选择下列特征中哪个是通过训练这些网页学来的? 【填空题】1AFH=_______________D 【判断题】在函数内部可以通过关键字def来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,430
精华内容 84,572
关键字:

以下哪个变量是分类变量