在机器学习问题中,我们通过训练数据集学习得到的其实就是一组模型的参数,然后通过学习得到的参数确定模型的表示,最后用这个模型再去进行我们后续的预测分类等工作。在模型训练过程中,我们会对训练数据集进行抽象、抽取大量特征,这些特征中有离散型特征也有连续型特征。若此时你使用的模型是简单模型(如LR),那么通常我们会对连续型特征进行离散化操作,然后再对离散的特征,进行one-hot编码或哑变量编码。这样的操作通常会使得我们模型具有较强的非线性能力。那么这两种编码方式是如何进行的呢?它们之间是否有联系?又有什么样的区别?是如何提升模型的非线性能力的呢?下面我们一一介绍:

one-hot encoding

  关于one-hot编码的具体介绍,可以参考我之前的一篇博客,博客地址:特征提取方法: one-hot 和 IF-IDF。这里,不再详细介绍。one-hot的基本思想:将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。举个例子,假设我们以学历为例,我们想要研究的类别为小学、中学、大学、硕士、博士五种类别,我们使用one-hot对其编码就会得到:

       

dummy encoding

  哑变量编码直观的解释就是任意的将一个状态位去除。还是拿上面的例子来说,我们用4个状态位就足够反应上述5个类别的信息,也就是我们仅仅使用前四个状态位 [0,0,0,0] 就可以表达博士了。只是因为对于一个我们研究的样本,他已不是小学生、也不是中学生、也不是大学生、又不是研究生,那么我们就可以默认他是博士,是不是。(额,当然他现实生活也可能上幼儿园,但是我们统计的样本中他并不是,^-^)。所以,我们用哑变量编码可以将上述5类表示成:

      

one-hot编码和dummy编码:区别与联系

  通过上面的例子,我们可以看出它们的“思想路线”是相同的,只是哑变量编码觉得one-hot编码太罗嗦了(一些很明显的事实还说的这么清楚),所以它就很那么很明显的东西省去了。这种简化不能说到底好不好,这要看使用的场景。下面我们以一个例子来说明:

  假设我们现在获得了一个模型,这里自变量满足(因为特征是one-hot获得的,所有只有一个状态位为1,其他都为了0,所以它们加和总是等于1),故我们可以用表示第三个特征,将其带入模型中,得到:

     

这时,我们就惊奇的发现这两个参数是等价的!那么我们模型的稳定性就成了一个待解决的问题。这个问题这么解决呢?有三种方法:

(1)使用正则化手段,将参数的选择上加一个限制,就是选择参数元素值小的那个作为最终参数,这样我们得到的参数就唯一了,模型也就稳定了。

(2)把偏置项去掉,这时我们发现也可以解决同一个模型参数等价的问题。

    

  因为有了bias项,所以和我们去掉bias项的模型是完全不同的模型,不存在参数等价的问题。

(3)再加上bias项的前提下,使用哑变量编码代替one-hot编码,这时去除了,也就不存在之前一种特征可以用其他特征表示的问题了。

总结:我们使用one-hot编码时,通常我们的模型不加bias项 或者 加上bias项然后使用正则化手段去约束参数;当我们使用哑变量编码时,通常我们的模型都会加bias项,因为不加bias项会导致固有属性的丢失

选择建议:我感觉最好是选择正则化 + one-hot编码;哑变量编码也可以使用,不过最好选择前者。虽然哑变量可以去除one-hot编码的冗余信息,但是因为每个离散型特征各个取值的地位都是对等的,随意取舍未免来的太随意。

连续值的离散化为什么会提升模型的非线性能力?

  简单的说,使用连续变量的LR模型,模型表示为公式(1),而使用了one-hot或哑变量编码后的模型表示为公式(2)

     

式中表示连续型特征,分别是离散化后在使用one-hot或哑变量编码后的若干个特征表示。这时我们发现使用连续值的LR模型用一个权值去管理该特征,而one-hot后有三个权值管理了这个特征,这样使得参数管理的更加精细,所以这样拓展了LR模型的非线性能力。

  这样做除了增强了模型的非线性能力外,还有什么好处呢?这样做了我们至少不用再去对变量进行归一化,也可以加速参数的更新速度;再者使得一个很大权值管理一个特征,拆分成了许多小的权值管理这个特征多个表示,这样做降低了特征值扰动对模型为稳定性影响,也降低了异常数据对模型的影响,进而使得模型具有更好的鲁棒性

转载自:https://www.cnblogs.com/lianyingteng/p/7792693.html

one-hot与哑变量(dummy variable)的区别相关推荐

  1. 离散型变量的编码方式——one-hot与哑变量(dummy variable)

    我们在用模型去解决机器学习问题的时候,要提前进行"特征工程".而特征工程中很重要的就是对特征的预处理. 当你使用的是logistic回归这样的模型的时候,模型要求所有特征都应该是数 ...

  2. 哑变量(Dummy Variable)、独热编码(one-hot Encoding)、label-encoding归纳

    1 概念 1.1 定类型变量 定类类型就是纯分类,不排序,没有逻辑关系. 当某特征具有k个属性值,那么: a 哑变量(虚拟变量)-- 具有k-1个二进制特征,基准类别将被忽略,若基准类别选择不合理,仍 ...

  3. R语言一般线性模型(涉及因变量是虚拟变量(哑变量))

    R语言的一般线性模型 R语言的一般线性模型用函数:lm(),即可轻松实现. 例子 建立一般线性模型 NC.glm1 = lm(fmri.SFG_R_CerebellumGM_L ~ age + gen ...

  4. 自变量是分类变量的线性拟合+哑变量

    哑变量 dummy variable(也相当于对数据分类) 何时引入哑变量 顺序变量如(高,中,低)可按比例引入值(如1,3,5) 而分类变量,或连续变量的划分:(如:1-10,11-20,21-30 ...

  5. R语言中哑变量的设置

    原文来源:https://www.sohu.com/a/199698358_489312 在构建回归模型时,如果自变量X为连续性变量,回归系数β可以解释为:在其他自变量不变的条件下,X每改变一个单位, ...

  6. 哑变量的基本介绍及R语言设置

    哑变量的基本介绍及R语言设置 1. 哑变量的基本介绍[摘自医咖会] 1.1 什么是哑变量? 1.2 什么情况下需要设置哑变量? 1.3 如何设置哑变量的参照组? 1.4 设置哑变量时的注意事项 2. ...

  7. 给属性赋值_赋值方法:虚拟变量 Dummy Coding

    点击上方蓝色字体,关注我们 选择实验法获得的数据属于离散变量,因而使用离散选择模型进行分析,常见的是Logit模型.在使用中需要对获得数据进行处理,其中一个处理方式就是虚拟变量(Dummy Varia ...

  8. 在R中做含有哑变量的gam模型并可视化

    R中建立包含哑变量的gam模型需要使用mgcv包.下面是一个例子: library(mgcv) set.seed(1) # 生成模拟数据 n <- 100 x1 <- rnorm(n) x ...

  9. 机器学习总结之——Dummy Coding(哑变量)

    机器学习总结之--Dummy Coding 1.哑变量的概念   在构建回归模型时,如果自变量X为连续性变量,回归系数β可以解释为:在其他自变量不变的条件下,X每改变一个单位,所引起的因变量Y的平均变 ...

最新文章

  1. idea 快速定位到某一行的快捷键
  2. 微信小程序 - 支持html空格(提示)
  3. golang连接mysql报错:this authentication plugin is not supported 解决方案
  4. 【渝粤题库】广东开放大学 现代服务学概论 形成性考核 (2)
  5. 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
  6. Django 遇到的错误:expected str, bytes or os.PathLike object, not _io.TextIOWrapper
  7. linux查看文件的方法,查看linux文件的方法
  8. 小米八显示无服务器,二修小米8无服务案例
  9. 有哪些开源的小程序商城源码?
  10. Axure9元件库,如何自建,如何利用下载的元件库
  11. 计算机字体颜色太浅,我的打印机打字太淡,如何调,打印的字就能够颜色
  12. 常见笔顺错误的字_[转载]常见笔画笔顺易错字大全
  13. 手机的小窗口怎么弄_vivo怎么弄小窗口 vivo怎样弄小窗口
  14. WPF学习之绘图和动画--DarrenF
  15. vue中使用echart实现三维立体图
  16. 理解信号处理中的卷积
  17. 静下来读《一个人的村庄》
  18. CorelDRAW 2022中文精简64位直装版下载
  19. docker(5、网络2) 1、容器间通信的三种方式 2、 容器如何访问外部 3、 外部如何访问容器
  20. 治精神疾病不能光靠吃药,还要学会自救

热门文章

  1. Python:执行精确的浮点数运算
  2. Python真神奇,带你体验另类的“全自动编程”
  3. 年度数据与月度数据转化_山东工会新媒体传播力指数2020年12月数据、年度数据出炉...
  4. VS cmake 远程开发 opencv报错:CMake was unable to find a build program corresponding to “Ninja“.(换个构建方式)
  5. word怎么设置图片编号(图片下标,图片标签,图片序号,图片注释,题注)(交叉引用)
  6. vscode 代码莫名爆红(未定义标识符 “nullptr“)解决办法(VSCode 如何快速打开c_c++_properties.json文件)
  7. markdown怎么输入指数、幂、次方、上下标?(2^8^=256、a~0~=1)
  8. 初识Linux——菜鸟篇
  9. Optimal Strategy 组合数,dp,博弈论(济南)
  10. python把桢写入txt_ffmpeg 常用参数一览表及python 使用示例