@(131 - Machine Learning | 机器学习)html
直观来讲就是有多少个状态就有多少比特,并且只有一个比特为1,其余全为0的一种码制
{sex:{male, female}}机器学习
获得独热码为{100}男性 ,{010}女性学习
虚拟变量的含义
虚拟变量又称虚设变量、名义变量或哑变量,用以反映质的属性的一我的工变量,是量化了的质变量,一般取值为0或1。引入哑变量可以使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到俩个方程的做用,并且接近现实。编码
虚拟变量的做用
最开始用树的模型没有考虑过要处理类别型变量,可是SVM貌似必须是数值型的,因此无法子,这块内容仍是要看看的~code
虚拟变量的设置原则
在模型中引入多个虚拟变量时,虚拟变量的个数应按下列原则肯定:
若是有m种互斥的属性类型,在模型中引入(m-1)个虚拟变量。
例如,性别有2个互斥的属性,引用2-1=1个虚拟变量;再如,文化程度分小学、初中、高中、大学、研究生5类,引用4个虚拟变量。
【该原则的解释会在dummy variable 和 one-hot encoding中差别中说起。】htm
也是处理类别型变量的一种方法,举例而言:若是变量X表示文化程度,共有{初中,高中,本科}三种取值。那么虚拟变量能够是X_初中,X_高中。而One-Hot为X_初中,X_高中,X_本科。各个新生成变量的取值为{0,1}。索引
One-Hot编码的含义
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每一个状态都由他独立的寄存器位,而且在任意时候只有一位有效。
One-Hot编码是分类变量做为二进制向量的表示。这首先要求将分类值映射到整数值。而后,每一个整数值被表示为二进制向量,除了整数的索引以外,它都是零值,它被标记为1。get
One-Hot 做用
解决了分类器很差处理属性数据的问题
在必定程度上也起到了扩充特征的做用
二者的差异
从上面的介绍上看,onehot会比dummy多生成一个变量。是否对模型有不一样的影响呢?
这部分参看知乎上的回答,虽然不大明白,可是先把他们的回答贴在这里,备查&有空再学习下。
以线性回归为例,在使用onehot的时候,新生成的变量其实是线性相关的,即同一个样本,同一个变量生成的onehot变量的和为1。即在上文的例子中,X_初中+X_高中+X_本科=1 。这样会致使【知乎中王赟的回答】存在的问题:pandas
“若是你不使用regularization,那么one-hot encoding的模型会有多余的自由度。这个自由度体如今你能够把某一个分类型变量各个值对应的权重都增长某一数值,同时把另外一个分类型变量各个值对应的权重都减少某一数值,而模型不变。在dummy encoding中,这些多余的自由度都被统摄到intercept里去了。这么看来,dummy encoding更好一些。io
若是你使用regularization,那么regularization就可以处理这些多余的自由度。此时,我以为用one-hot encoding更好,由于每一个分类型变量的各个值的地位就是对等的了。”
评论中穆文的解释还算明白,摘抄于此:
以线性模型举例, 分类超平面是 wx+b =0,dummy下的话 w 有惟一解,one-hot 下 w 有无穷解 (就是答主说的 一部分权重增长点,另外一部分权重减小点),这样每一个变量的权重就没有解释意义了,也使得模型没有真正的预测效果。加了正则化以后,至关于约束了 w 的解空间,使得 w 相对有意义
one-hot无穷解的缘由我本身猜想下:若是从线性回归最终是解一个方程的角度来理解可能方便些。方程的系数矩阵存在线性相关的变量,假设原模型中有两个类别型变量x1,x2,通过one-hot转化为x1_1,x1_2,x2_1,x2_2,且x1_1+x1_2=x2_1+x2_2=1,那么能够对这四个变量的系数作相应的变化,如x1的系数统一变成1.5倍,而x2的系数变为原来的0.5倍,而且方程等式关系依旧成立,可是致使会出现无穷解的状况。
其实线性回归的前提假设中就包含了变量独立性的要求。
至于正则化和约束解空间我仍是不清楚,等学习到了在来填坑。安利下《ISLR》,回归讲的挺清楚的,比统计课本好的感受。
>>> import pandas as pd >>> s = pd.Series(list('abca')) >>> pd.get_dummies(s) a b c 0 1 0 0 1 0 1 0 2 0 0 1 3 1 0 0