数据预处理:非数值型特征如何进行编码

 

一般机器学习数据预处理过程中,对于非数值型特征编码可以采用如下几种方式:

1、one-hot编码(独热编码)

2、映射有序特征

one-hot编码(独热编码):

如果该特征下可以分为多个类别,且各类别是并列关系,则适合使用one-hot编码方式进行处理。例如,衣服的颜色red、green、yellow就是属于这种并列关系

一般机器学习数据预处理过程中,对于非数值型特征编码可以采用如下几种方式:

1、one-hot编码(独热编码)

2、映射有序特征

one-hot编码(独热编码):

如果该特征下可以分为多个类别,且各类别是并列关系,则适合使用one-hot编码方式进行处理。例如,衣服的颜色red、green、yellow就是属于这种并列关系

映射有序特征:

如果该特征下多个类别有一定的顺序关系,则可以采用映射有序特征的方式。例如,衣服的尺码大小size可以分为S、M、L、XL,它们是可以按照顺序排列的

如果该特征下多个类别有一定的顺序关系,则可以采用映射有序特征的方式。例如,衣服的尺码大小size可以分为S、M、L、XL,它们是可以按照顺序排列的

 

python 案例(以下代码在jupyter中运行):

import pandas as pd
import numpy as np

#原始数据
df = pd.DataFrame([['green', 'M', 10.1, 'male'],
                  ['red', 'L', 13.5, 'female'],
                  ['yellow', 'XL', '12.1', 'male']])
                   
df.columns = ['colors', 'size', 'price', 'sex']

df

#对有序特征数据进行编码
col_mappings = {
    'size':{
        'XL': 3,
        'L': 2,
        'M': 1
    },
    'sex':{
        'male': 0,
        'female': 1
    }
}

 1、使用OneHotEncoding进行编码,但是该方式有一个缺点:即编码后变成了array形式,无法得知编码后的列的代表了什么

 


#使用OneHotEncoding进行编码
#对并列关系特征数据编码
colors_mapping = {label:idx for idx, label in enumerate(np.unique(df['colors']))}
col_mappings['colors'] = colors_mapping

#将映射结果映射到原始数据中
for col_mapping in col_mappings:
    df[col_mapping] = df[col_mapping].map(col_mappings[col_mapping])

from sklearn.preprocessing import OneHotEncoder

#categorical_features[0] 表示对第0列进行one-hot运算
#n_values=[3] 指用3位表示第0列的数据,
#即0使用[1,0,0]表示,1用[0,1,0]表示,2用[0,0,1]表示
ohe = OneHotEncoder(categorical_features=[0], n_values=[3])
data = np.array(df)
ohe.fit(data)
ans = ohe.transform(data).toarray()

ans

 

2、使用get_dummies进行编码

df = pd.get_dummies(df,columns=['colors'],prefix_sep='_',dummy_na=False,drop_first=False)

此时传入的df是已经映射过有序特征之后的:

最后使用get_dummes编码后的df为:

 

 

reference:

1、scikit-learn 中 OneHotEncoder 解析

2、https://blog.csdn.net/luguanyou/article/details/80598122

3、https://blog.csdn.net/qq_43404784/article/details/89486442

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值