精华内容
下载资源
问答
  • 借助虚拟变量, 在线性回归模型中引入品质标志, 使模型更完善; 运用虚拟变 量改变回归直线的截距、斜率; 虚拟变量既可作自变量, 又可作因变量; 灵活应用虚拟变量可以使许多复杂的问题简单化。
  • 最近偶尔在重温统计学,发现自己工作后用了各种高级的统计分析方法,各种统计模型...哑变量(Dummy Variable),也叫虚拟变量引入哑变量的目的是,将不能够定量处理的变量量化,如职业、性别对收入的影响,战争、...

     

    最近偶尔在重温统计学,发现自己工作后用了各种高级的统计分析方法,各种统计模型,却忽视了统计学中一些最基础的知识,而这些知识是所有这些高级方法的基础,基础不扎实,高级方法用起来真觉得底气不足,今天看到哑变量在回归分析中的应用,总结如下:

    哑变量(Dummy Variable),也叫虚拟变量,引入哑变量的目的是,将不能够定量处理的变量量化,如职业、性别对收入的影响,战争、自然灾害对GDP的影响,季节对某些产品(如冷饮)销售的影响等等。 这种“量化”通常是通过引入“哑变量”来完成的。根据这些因素的属性类型,构造只取“0”或“1”的人工变量,通常称为哑变量(dummy variables),记为D。

    举一个例子,假设变量“职业”的取值分别为:工人、农民、学生、企业职员、其他,5种选项,我们可以增加4个哑变量来代替“职业”这个变量,分别为D1(1=工人/0=非工人)、D2(1=农民/0=非农民)、D3(1=学生/0=非学生)、D4(1=企业职员/0=非企业职员),最后一个选项“其他”的信息已经包含在这4个变量中了,所以不需要再增加一个D5(1=其他/0=非其他)了。这个过程就是引入哑变量的过程,其实在结合分析(conjoint analysis)中,就是利用哑变量来分析各个属性的效用值的。

    在线性回归分析中引入哑变量的目的是,可以考察定性因素对因变量的影响,引入哑变量有两种方式:加法方式与乘法方式。

    所谓加法方式是指,哑变量作为单独的自变量,有独立的系数,从几何意义上来讲,就是只改变回归直线的截距(constant),不改变斜率(B);

    而乘法方式则正好相反,不改变截距,只改变斜率,因为哑变量在回归方程中不是作为一个独立的自变量,而是与其中某一个自变量相乘后作为一个自变量。

    当然,也可以同时使用加法和乘法来引入哑变量,即同时改变截距和斜率。

    由于哑变量的取值只有0和1,它起到的作用像是一个“开关”的作用,它可以屏蔽掉D=0的case,使之不进入分析,在spss软件中就是filter的作用。我试验了一下,确实如此。

    利用spss软件自带的data:car.sav,分析汽车的功率与100米加速时间的关系,将变量“filter_$”作为哑变量,我们分别run两次线性回归分析,然后对比这2次的结果,来说明上面的想法。

    第一次:将哑变量“filter_$”纳入到分析中,同时利用加法和乘法来引入,将“accel”作为因变量,“horse”、“filter_$”、“filter_$*horse”作为自变量,进行线性回归分析;

    第二次,利用变量“filter_$”进行筛选case,即不分析filter_$=0的case,同样将“accel”作为因变量,而只将“horse”作为自变量;

    两次的线性回归结果分别为:

    第一次:accel=20.495-0.049*horse-0.007*"filter_$*horse"+0.738*filter_$

    第二次:accel=21.234-0.056*horse

    当filter_$=1时,第一次计算的公式正好等于第二次机算的公式。


     

    虚拟变量(Dummy Variable),又称名义变量或哑变量,是量化了的质变量,通常取值为0或1。在研究一个因变量的时候,解释变量中除了定量变量,有时候会有一些定性变量,比如性别、年龄、宗教、民族、婚姻状况、教育程度等。这些定性变量也可以成为指标变量或分类变量。此时需要使用虚拟变量。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到俩个方程的作用,而且接近现实。如果某个因素有n种选择,则将其用哑变量引入模型时,要设置n-1个哑变量,以避免完全的多重共线性。如性别的选择有两种,则引入一个哑变量,是男则数值为1,否则为0,当然也可以设置为女为1,否则为0。季节的选择有4个,则引入3个哑变量,哑变量1:春为1,否则为0.哑变量2:夏为1,否则为0.哑变量3:秋为1,否则为0.

    对于有序变量,如轻、中、重,则要酌情考虑。如果样本量足够大的话,也进行哑变量化,这样可以得到不同级别的差异。但是如果样本量不够大时,哑变量化造成变量数目上升,使回归结果变得不可靠,只能适得其反。

    哑变量设置的原则
    在模型中引入多个哑变量时,哑变量的个数应按下列原则确定:如果有n种互斥的属性类型,在模型中引入(n-1)个哑变量。例如,文化程度分小学、初中、高中、大学、研究生5类,引用4个哑变量

    回归分析
    spss中,logistics回归中,有专门的选项来处理需要哑变量化的变量,只需单击“Categorical..”进行设置即可。但是对于多元线性回归就没有那么幸运了。
    computer或recode设置一组哑变量。由于哑变量是一个整体变量,所以进行变量筛选时必须共同进退。因此,将所有哑变量同一般变量一下直接进行筛选是不对的,会出现一部分变量进入一部分变量未进入的情形。解决的方法是:将同一因素下的哑变量进行归组,在纳入方法中选择了“ENTER”来确保这些哑变量同进同出,而其它连续型变量和二分类变量则归为另一组,纳入方法为STEPWISE。然后在没有纳入这组哑变量的情况下再做一次STEPWISE,再来比较是不是应该纳入这组哑变量。

    sas中,哑变量的设置需要另外写程序,但是在回归程序中,则比较简单。eg.因变量y,自变量x1,x2,哑变量组x31 x32 x33,
    proc reg;
      model y=x1 x2 {x31 x32 x33} /selection=stepwise;
    run;
    即,把哑变量组用{}括起来就可以了。

    转载于:https://www.cnblogs.com/sddai/p/8834373.html

    展开全文
  • 引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方程的作用,而且接近现实。 二、为什么使用虚拟变量     在回归分析,自变量X既可以是定量数据也可以定类数据。回归分析计算...

    一、虚拟变量概念

        虚拟变量 ( Dummy Variables) 又称虚设变量名义变量哑变量用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方程的作用,而且接近现实。

    二、为什么使用虚拟变量

        在回归分析中,自变量X既可以是定量数据也可以定类数据回归分析计算时是将所有自变量X视为数字,但当数据为定类数据时,此时数字代表类别,数字大小本身没有比较意义。因此,这类数据在做回归分析时,需要设置成虚拟变量才能纳入回归分析正确分析数据。

    三、使用范围

        通常情况下,回归分析,逐步回归,分层回归,Logistic回归,PLS回归等这类影响关系研究的方法时,才可能涉及到虚拟变量设置。其它分析方法并不会涉及。

    四、设置原则

        在模型中引入多个虚拟变量时,虚拟变量的个数应按下列原则确定:

        (1)如果回归模型有截距项:有m种互斥的属性类型,在模型中引入(m-1)个虚拟变量。
        (2)如果回归模型无截距项,有m个特征,设置m个虚拟变量

    五、举例

    1、方法

    pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False)
    

    2、参数

    data : array-like, Series, or DataFrame 输入的数据
    prefix : get_dummies转换后,列名的前缀
    *columns :指定需要实现类别转换的列名
    dummy_na : bool, default False 增加一列表示空缺值,如果False就忽略空缺值
    drop_first : bool, default False 获得k中的k-1个类别值,去除第一个
    

    3、例子

    在这里插入图片描述
        没有设置虚拟变量的结果:
    在这里插入图片描述
        设置了虚拟变量的结果:

    在这里插入图片描述
        对指定列设置虚拟变量:
    在这里插入图片描述
        对指定列设置虚拟变量后并将其结果合并到原始数据中:
    在这里插入图片描述

    展开全文
  • 哑变量(DummyVariable),也叫虚拟变量,引入哑变量的目的是,将不能够定量处理的变量量化,在线性回归分析中引入哑变量的目的是,可以考察定性因素对因变量的影响,它是人为虚设的变量,通常取值为0或1,来反映...

    一、哑变量定义

    哑变量(DummyVariable),也叫虚拟变量,引入哑变量的目的是,将不能够定量处理的变量量化,在线性回归分析中引入哑变量的目的是,可以考察定性因素对因变量的影响,它是人为虚设的变量,通常取值为0或1,来反映某个变量的不同属性。对于有n个分类属性的自变量,通常需要选取1个分类作为参照,因此可以产生n-1个哑变量。如职业、性别对收入的影响,战争、自然灾害对GDP的影响,季节对某些产品(如冷饮)销售的影响等等。这种“量化”通常是通过引入“哑变量”来完成的。根据这些因素的属性类型,构造只取“0”或“1”的人工变量,通常称为哑变量(dummyvariables),记为D。

    举一个例子,假设变量“职业”的取值分别为:工人、农民、学生、企业职员、其他,5种选项,我们可以增加4个哑变量来代替“职业”这个变量,分别为D1(1=工人/0=非工人)、D2(1=农民/0=非农民)、D3(1=学生/0=非学生)、D4(1=企业职员/0=非企业职员),最后一个选项“其他”的信息已经包含在这4个变量中了,所以不需要再增加一个D5(1=其他/0=非其他)了。这个过程就是引入哑变量的过程,其实在结合分析(ConjointAnalysis)中,就是利用哑变量来分析各个属性的效用值的。

    此时,我们通常会将原始的多分类变量转化为哑变量,每个哑变量只代表某两个级别或若干个级别间的差异,通过构建回归模型,每一个哑变量都能得出一个估计的回归系数,从而使得回归的结果更易于解释,更具有实际意义。

    补充:
    一般的,n个分类需要设置n-1个哑变量(为什么不是n个?请继续看)。
    举个例子,有一个“年龄”变量,分为:青年,中年,老年三类,那么我们可以用两个哑变量来代替:
     年龄  变量1 变量2 
     青年 1
     中年 1
     老年 0 0

    变量1 = 1代表青年,0代表非青年

    变量2 = 1代表中年,0代表非中年
     
    变量1和变量2都等于0代表老年
     
    所以用2个变量就可以表示3个类别。
     

    二、什么情况下需要设置哑变量

    1. 对于无序多分类变量,引入模型时需要转化为哑变量

    举一个例子,如血型,一般分为A、B、O、AB四个类型,为无序多分类变量,通常情况下在录入数据的时候,为了使数据量化,我们常会将其赋值为1、2、3、4。

    从数字的角度来看,赋值为1、2、3、4后,它们是具有从小到大一定的顺序关系的,而实际上,四种血型之间并没有这种大小关系存在,它们之间应该是相互平等独立的关系。如果按照1、2、3、4赋值并带入到回归模型中是不合理的,此时我们就需要将其转化为哑变量。

    2. 对于有序多分类变量,引入模型时需要酌情考虑

    例如疾病的严重程度,一般分为轻、中、重度,可认为是有序多分类变量,通常情况下我们也常会将其赋值为1、2、3(等距)或1、2、4(等比)等形式,通过由小到大的数字关系,来体现疾病严重程度之间一定的等级关系。

    但需要注意的是,一旦赋值为上述等距或等比的数值形式,这在某种程度上是认为疾病的严重程度也呈现类似的等距或等比的关系。而事实上由于疾病在临床上的复杂性,不同的严重程度之间并非是严格的等距或等比关系,因此再赋值为上述形式就显得不太合理,此时可以将其转化为哑变量进行量化。

    3. 对于连续性变量,进行变量转化时可以考虑设定为哑变量

    对于连续性变量,很多人认为可以直接将其带入到回归模型中即可,但有时我们还需要结合实际的临床意义,对连续性变量作适当的转换。例如年龄,以连续性变量带入模型时,其解释为年龄每增加一岁时对于因变量的影响。但往往年龄增加一岁,其效应是很微弱的,并没有太大的实际意义。

    此时,我们可以将年龄这个连续性变量进行离散化,按照10岁一个年龄段进行划分,如0-10、11-20、21-30、31-40等等,将每一组赋值为1、2、3、4,此时构建模型的回归系数就可以解释为年龄每增加10岁时对因变量的影响。

    以上赋值方式是基于一个前提,即年龄与因变量之间存在着一定的线性关系。但有时候可能会出现以下情况,例如在年龄段较低和较高的人群中,某种疾病的死亡率较高,而在中青年人群中,死亡率却相对较低,年龄和死亡结局之间呈现一个U字型的关系,此时再将年龄段赋值为1、2、3、4就显得不太合理了。

    因此,当我们无法确定自变量和因变量之间的变化关系,将连续性自变量离散化时,可以考虑进行哑变量转换。

    还有一种情况,例如将BMI按照临床诊断标准分为体重过低、正常体重、超重、肥胖等几种分类时,由于不同分类之间划分的切点是不等距的,此时赋值为1、2、3就不太符合实际情况,也可以考虑将其转化为哑变量。

    三、如何选择哑变量的参照组

    在上面的内容中我们提到,对于有n个分类的自变量,需要产生n-1个哑变量,当所有n-1个哑变量取值都为0的时候,这就是该变量的第n类属性,即我们将这类属性作为参照。

    例如上面提到的以职业因素为例,共分为学生、农民、工人、公务员、其他共5个分类,设定了4哑变量,其中职业因素中“其它”这个属性,每个哑变量的赋值均为0,此时我们就将“其它”这个属性作为参照,在最后进行模型解释时,所有类别哑变量的回归系数,均表示该哑变量与参照相比之后对因变量的影响。

    在设定哑变量时,应该选择哪一类作为参照呢?

    1. 一般情况下,可以选择有特定意义的,或者有一定顺序水平的类别作为参照

    例如,婚姻状态分为未婚、已婚、离异、丧偶等情况,可以将“未婚”作为参照;或者如学历,分为小学、中学、大学、研究生等类别,存在着一定的顺序,可以将“小学”作为参照,以便于回归系数更容易解释。

    2. 可以选择临床正常水平作为参照

    例如,BMI按照临床诊断标准分为体重过低、正常体重、超重、肥胖等类别,此时可以选择“正常体重”作为参照,其他分类都与正常体重进行比较,更具有临床实际意义。

    3. 还可以将研究者所关注的重点类别作为参照

    例如血型,分为A、B、O、AB四个类型,研究者更关注O型血的人,因此可以将O型作为参照,来分析其他血型与O型相比后对于结局产生影响的差异。

     四、One-hot encoding(与Dummy Coding对比)

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

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

     4.1 one-hot的基本思想

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

     

    4.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.]])
    

    4.3keras进行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

    4.4哑变量编码

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

     

    4.5 pandas进行哑变量编码 

    pandas中提供了get_dummies()函数:

    • pandas.get_dummies(prefix=) prefix参数设置编码后的变量名,也可以选择默认
    # 导入数据
    import pandas as pd
    file = open('D:/myCode/spark/Test/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

    说明

    get_dummies可以对多列(字符型和数值型)直接进行哑变量编码
    缺点:如果在测试集中出现了训练集没有出现过的类型,简单的用get_dummies会出现错误,比如训练集中的性别是男、女,而在测试集中有男、女、未知这三种类型的特征出现,直接用get_dummies处理的话两个数据集生成的哑变量特征数不一致。 

    4.6 One-hot编码和Dummy编码:区别与联系 

    • One-Hot编码和哑变量编码都只能对离散型变量进行编码。
    • One-Hot编码之后生成的新特征数等于对应特征的不同种类取值个数,feature1中共有3种不同的取值,One-Hot编码之后生成的新特征数就是3。而哑变量编码之后生成的新特征数比对应特征的取值个数少1个。
    • One-Hot编码之所以叫One-Hot编码,是因为每个取值对应的编码中有且只有一个是1,其余都是0。而哑变量编码允许不出现1。
    • One-Hot编码形成的新特征都是二值型特征,比如,上述One-Hot编码形成的三个新维度的意义为:feature1是否为3,feature1是否为2,feature1是否为1;哑变量编码在这一点上与One-Hot类似,只不过当编码全为0是表示 feature1既不是1也不是2,这种情况下默认feature1为3。

    通过上面的例子,我们可以看出它们的“思想路线”是相同的,只是哑变量编码觉得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编码的冗余信息,但是因为每个离散型特征各个取值的地位都是对等的,随意取舍未免来的太随意。

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

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

         

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

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

    注:参考文章地址:https://www.cnblogs.com/lianyingteng/p/7792693.html 

    展开全文
  • 虚拟变量的定义作用 计量经济学虚拟变量给出了定义、作用及使用场景,进一步的深入了解可以系统性学习。 定义:虚拟变量 ( Dummy Variables) ,用...作用:引入哑变量可使线形回归模型变得更复杂,但对问题描述...

    虚拟变量的定义作用

    计量经济学中对虚拟变量给出了定义、作用及使用场景,进一步的深入了解可以系统性学习。

    定义:虚拟变量 ( Dummy Variables) ,用以反映无法定量度量的因素,譬如性别对收入的影响,是量化了的质变量,通常取值为0或1。

    另外一些名字:又称哑变量、虚设变量、名义变量、属性变量、双值变量、定性变量、二院型变量等

    作用:引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方程的作用,而且接近现实

    简单点说,如果有一个数据字段“性别”,里面只有两个元素“男”、“女”,那么转换成为0(男)、1(女)的量化方式,并将每个元素形成一列,便是虚拟变量。譬如:

    image

    虚拟变量模型

    模型定义

    image

    引入到模型有两种基本方式:

    image
    image
    image

    虚拟变量的设置原则

    若定性因素有m个相互排斥的类型或属性,只能引入(m-1)个虚拟变量,否则会陷入"虚拟变量陷阱",产生完全共线性。(如果f(x)没有截距项,应引入m个虚拟变量)

    一般情况,虚拟变量取“0”值代表比较的基准

    虚拟变量在单一方程中,可以作为解释变量,也可以作为被解释变量

    image
    image
    image
    image
    image

    python的几种实现方式

    准备工作,载入相关的包,准备数据集

    import pandas as pd
    import numpy as np
    from sklearn.preprocessing import OneHotEncoder,LabelEncoder
    oenc=OneHotEncoder(sparse=False)
    lenc=LabelEncoder()
    store=pd.DataFrame({'gender':[0.0,11.0,'unknow']})
    

    image

    方式1:通过pandas中的get_dummies生成,

    dummies = pd.get_dummies(store['gender'], prefix='gender' )
    df=pd.concat([store,dummies],axis=1)
    print(df)
    

    image

    
    # 通过apply自己构建
    df1=store.copy()
    for col_feat in df1.gender.unique():
        add_col='gender_{}'.format(col_feat)
        df1[add_col]=df1['gender'].apply(lambda x:1 if x==col_feat else 0)
    print(df1)
    

    image

    # one-hot 先序列化,然后再做独热编码
    arr=np.array(store[['gender']].astype(str)).ravel()
    lenc_code=lenc.fit_transform(arr)
    oenc_code=oenc.fit_transform(lenc_code.reshape(-1,1))
    add_col=list(map(lambda x:'gender_{}'.format(x),np.unique(arr)))
    df_onehot=pd.concat([store,pd.DataFrame(oenc_code,columns=add_col)],axis=1)
    print(df_onehot)
    

    image

    参考《计量经济学:虚拟变量模型》

    展开全文
  • 虚拟变量又称哑变量,是人为设定的用于将分类变量引入模型中的方法。 为什么要使用虚拟变量回归分析中,自变量X既可以是定量数据也可以定类数据。回归分析计算时是将所有自变量X视为数字,但当数据为定类数据...
  • 变量在SPSS和SAS进行回归分析应用

    万次阅读 2016-01-06 10:23:49
    引入变量可使线形回归模型变得更复杂,但对问题描述更简明。  名义变量引入回归分析,必须进行数量化。如,职业有工人、农民、教师,分别赋值0,1,2。但是0,1,2代表的实际意义又不是由小到大的关系。所以这在...
  • 模型中引入多个虚拟变量时,虚拟变量的个数应按下列原则确定: 1.回归模型有截距:一般的,若该特征下n个属性均互斥(如,男/女;儿童/青年/中年/老年),在生成虚拟变量时,应该生成 n-1个虚变量,这样可以避免...
  • 逻辑回归

    2018-07-06 17:35:00
    一、逻辑回归 ...引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到俩个方程的作用,而且接近现实。例如,反映文程度的虚拟变量可取为:1:本科学历;0:非本科学历 ...
  • 所谓的“虚拟变量陷阱”就是当一个定性变量含有m个类别时,模型引入m个虚拟变量,造成了虚拟变量之间产生完全多重共线性,无法估计回归参数。 下图例子若同时加入New York和California的虚拟变量则会使得D2=1-D1...
  • 变量引入使得回归模型变得更复杂,但对问题描述更简明而且接近现实。 对于二分类变量,实际在模型中的取值只有“0”和“1”两个值,无论是以连续型还是哑变量变量纳入模型结果都是一样的,无非是参照水平是0...
  • 客户信用风险预测——基于logit模型

    千次阅读 2020-01-23 22:34:56
    在上一篇文章,介绍了多元线性回归,该模型一般只是用来衡量数值型变量间的线性关系,当解释变量或者被解释变量为分类型变量时,可能就不再适用,需要引入新的方法,比如设置虚拟变量和选择其它分类模型。...
  • 一文看懂逻辑回归

    2020-05-20 09:13:31
    目录问题引入模型建构模型构建损失函数...可以用虚拟变量1和0分别表示。我们用y代表已知的考试结果,x为已知的投入时间,发现其中还有一个隐藏变量:知识掌握程度,可以先设为z,假设z(x)线性变化,当然z(x)的具体
  • 接着引入Cobb-Douglas生产函数建立回归模型, 并用岭回归估计,修正了最小二乘回归系数易受多重共线性影响的缺点;最后运用虚拟变量法对回归方程的结构稳定性进行了检验。研究结果表明:工程建设标准和经济增长之间...
  • 针对“少量多样” 的混合制程, 利用逐步回归算法挑选该制程的关键变量, 引入产品的效益因子, 建立混合制程的虚拟测量模型; 为克服系统扰动对模型精度的影响, 以产品效益因子为状态量建立该制程的状态方程, 利用...
  • spss基础-5.13

    2021-05-13 09:18:12
    昨日内容 回归分析 包含哑变量:一元、多元回归分析 不包含哑变量:逻辑回归 回归分析的步骤 1.... 2.... 3.进行相关分析,确定回归...当定性变量只有两个水平时,可在回归中引入一个哑变量。一般而言,如果定性自变量
  • asp.net知识库

    2015-06-18 08:45:45
    利用反射来查看对象的私有变量 关于反射创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

回归模型中引入虚拟变量