字符型特征处理
一、介绍
1.原因
逻辑回归、svm、k近邻等算法只能处理数值型数据,而不能处理文字,因此有时候我们应对文字型数据进行编码,转化为数值型数据。在sklearn中,除了专用于处理文字的算法,其他算法输入数据时全部要求输入数组或矩阵,不能导入文字型数据。
2.两种编码方式
当分类变量的取值之间有大小意义时,如【小学、初中、大学】,可以使用分类编码,将其编码为【0,1,2】。
当分类变量的取值之间没有大小意义时,如【蓝色、黄色、红色】,则使用独热编码。
二、分类编码
1.标签的编码
一般来说,标签都使用分类编码。如【收入低于5k,收入高于5k】,可以使用sklearn.preprocessing.LabelEncoder转换为分类数值【0,1】。
from sklearn.preprocessing import LabelEncoder
#一步到位的写法
data.loc[:,-1] = LabelEncoder().fit_transform(data.loc[:,-1])
# 分部写法
y = data.iloc[:,-1]
le = LabelEncoder()
le = le.fit(y)
label = le.transform(y)
#查看标签中共有多少类别
le.classes_
2.特征的分类编码
当分类变量存在顺序关系(有序变量)时,如【小学、初中、高中】,可以使用sklearn.preprocessing.OrdinalEncoder进行编码
from sklearn.preprocessing import OrdinalEncoder
# 将数据备份一下
data_ = data
#一步到位的写法
data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.loc[:,-1,1])
#分部写法
oe = OrdinalEncoder()
oe = oe.fit(data.iloc[:,1:-1])
data_.iloc[:,1,-1] = oe.transform(data.iloc[:,1,-1])
#查看一共分类的种数
oe.categories_
三、独热编码
在变量取值彼此独立(名义变量)的情况下,使用独热编码将变量转化为哑变量。
特点:
1.在类别数量比较多时,会导致特征空间变得比较大,可以结合pca进行降维。
2.树模型不太需要独热编码,因为对于树模型,数值只是类别符号,没有偏序关系。若树模型使用独热编码则一般起到增加树深度的作用。
使用sklearn.preprocessing.OneHotEncoder可以对特征进行独热编码。
from sklearn.preprocessing import OneHotEncoder
x = data.iloc[:,1:-1]
#一步到位完成独热编码
OneHotEncoder(categories = 'auto').fit_transform(x).toarray()
#分部进行
enc = OneHotEncoder(categories = 'auto').fit(x)
result = enc.transform(x).toarray()
#编码还原
pd.Dataframe(enc.inverse_transform(result))
#查看哑变量的每列是什么特征的什么取值
enc.get_feature_names()
使用pandas的get_dummies函数也可以进行独热编码,而且默认对所有字符串类型的列进行独热编码。
import pandas as pd
pd.get_dummies(x)
本文介绍了在机器学习中,如何对字符型特征进行预处理。内容包括分类编码和独热编码两种方法,适用于有序和无序的分类特征。标签编码用于无顺序的类别,如【收入低于5k,收入高于5k】;而独热编码适用于无序类别,如颜色。独热编码可能导致特征空间膨胀,可以结合PCA降维。在实际应用中,树模型对独热编码的需求较低。
442

被折叠的 条评论
为什么被折叠?



