账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    get_dummies,LabelEncoder,OneHotEncoder,label_binarize在编码时的区别?
    54
    0

    用上面四种方法都能实现编码,他们的区别在哪里呢?当然脚本长度不同我已经看出来了。

    get_dummies方法

    df7 = DataFrame({'key':list('bbacab'),
                    'data1':range(6)})
    
    dummies = pd.get_dummies(df7.key,prefix = 'key')
    
    dummies
    dummies
    0    0    1    0
    1    0    1    0
    2    1    0    0
    3    0    0    1
    4    1    0    0
    5    0    1    0

    LabelEncoder加get_dummies方法

    这个方法主要还是用的get_dummies

    le = LabelEncoder()
    # le.fit(df7['key'])
    df7['key2'] = le.fit_transform(df7['key'])
    
    pd.get_dummies(df7.key2)
    0    0    1    0
    1    0    1    0
    2    1    0    0
    3    0    0    1
    4    1    0    0
    5    0    1    0

    label_binarize方法

    lab = label_binarize(df7['key'],classes = ['a','b','c'])
    lab
    array([[0, 1, 0],
           [0, 1, 0],
           [1, 0, 0],
           [0, 0, 1],
           [1, 0, 0],
           [0, 1, 0]])
    
    columns = 
    df7.join(pd.DataFrame(lab)).rename(columns = {0:'key_a',1:'key_b',2:'key_c'})
    
    0    0    b    1    0    1    0
    1    1    b    1    0    1    0
    2    2    a    0    1    0    0
    3    3    c    2    0    0    1
    4    4    a    0    1    0    0
    5    5    b    1    0    1    0

    OneHotEncoder

    onehot_encoder = OneHotEncoder(sparse=False)
    integer_encoded = df7['key2'].values.reshape(len(df7['key2']), 1)
    onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
    onehot_encoded 
    # 这里生成的arry数组和label_binarize生成的一样,所以他们的区别在哪里呢?当然整数和小数的区别不算。
    array([[ 0.,  1.,  0.],
           [ 0.,  1.,  0.],
           [ 1.,  0.,  0.],
           [ 0.,  0.,  1.],
           [ 1.,  0.,  0.],
           [ 0.,  1.,  0.]])
    
    pd.DataFrame(onehot_encoded)
    # 然后再用join方法即可
    0    0.0    1.0    0.0
    1    0.0    1.0    0.0
    2    1.0    0.0    0.0
    3    0.0    0.0    1.0
    4    1.0    0.0    0.0
    5    0.0    1.0    0.0
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 森眸暖光 普通会员 1楼

      get_dummies, LabelEncoder, OneHotEncoder, label_binarize都是Python中处理数据集时常用的函数,它们在编码数据时有以下区别:

      1. get_dummies: 它用于将分类数据集中的类别(如'Yes', 'No', 'Other'等)转换为数值型变量。对于数值型变量,get_dummies会将其映射为二进制码(0或1),并保留原始类别名。例如,对于LabelEncoder中的类别,get_dummies会将其转换为0和1的二进制码。这种方法的优点是可以避免在编码时丢失原始类别的信息,但缺点是会增加数据的维度。

      2. LabelEncoder: 它用于将分类数据集中的标签(如'Yes', 'No', 'Other'等)转换为数值型变量。例如,LabelEncoder会将其转换为0和1的二进制码,但保留原始类别名。这种方法的优点是可以准确地表示类别,但缺点是会增加数据的维度。

      3. OneHotEncoder: 它用于将分类数据集中的数值型变量转换为一维码。例如,OneHotEncoder会将每个数值变量转换为一个离散的向量,每个向量表示一个类别。这种方法的优点是可以有效地表示类别,但缺点是会增加数据的维度。

      4. label_binarize: 它用于将分类数据集中的数值型变量转换为二进制码。例如,label_binarize会将每个数值变量转换为0和1的二进制码。这种方法的优点是可以准确地表示类别,但缺点是会增加数据的维度。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部