我们的原始数据有很多的文本型变量,比如国家,性别这类变量我们需要将其数值化,才能将这些特征导入机器学习的模式里面,只有处理成数值的形式,计算机才能理解。下面是常用的几种数值化方法
数值化技巧
- 使用独热编码(One-hot encoding)对分类型变量(如性别,国家等)进行数值化
使用哈希编码对高分类(属于分类型变量的一种,但是值由很多)的变量进行数值化
import category_encoders as ce
encoder_city = ce.HashingEncoder(cols=['city'])
city_he = encoder_city.fit_transform(train2['city'], train2['target'])
train2=train2.drop(columns=['city'])
train2= pd.concat([train2, city_he],axis=1)
- 首先需要导入[[category_encoders]]库
- 接下来实例化
- 和sklearn一样需要使用fit进行拟合,这样就数值化好了一个新的列
- 使用drop删掉原来数据中的未数值化的那列
- 使用concat方法将数据拼接在一起
哈希编码的执行速度比较慢
- 含有顺序的分类型变量用label encoding进行填充 ```python from sklearn.preprocessing import LabelEncoder as le from collections import defaultdict d = defaultdict(le) #实例化 le_train = train2[[‘relevent_experience’,’education_level’,’experience’,’last_new_job’]].apply(lambda x: d[x.name].fit_transform(x),axis=0) train2 = train2.drop(columns=[‘relevent_experience’,’education_level’,’experience’,’last_new_job’]) train2 = pd.concat([train2,le_train],axis=1)
下面这种方式直接在原数据上面修改
from sklearn import preprocessing f_names = [‘CentralAir’, ‘Neighborhood’] ##需要处理的数据标签 for x in f_names: label = preprocessing.LabelEncoder() data_train[x] = label.fit_transform(data_train[x]) ##数据标准化 ```
data['Self_Employed'] = np.where((data['Self_Employed'] == 'Yes'), 1, 0)
使用np.where可以对数值化,np.where的用法和excel的if函数有点像,第一个参数时一个布尔值,通过在数据中的筛选返回True或False的布尔值,True就返回1,False就返回0- 当分类特征是离散的,无序的时(如性别有男、女,城市有北京,上海,深圳等),采用独热编码(one hot encode)对数据进行处理
- sklearn中的独热编码
from sklearn.preprocessing import OneHotEncoder
导入库 ohe=OneHotEncoder()
实例化df=pd.get_dummies(df)
pandas中处理独热编码,参数如下- data : array-like, Series, or DataFrame 输入的数据
- prefix : string, list of strings, or dict of strings, default None。get_dummies转换后,列名的前缀
- columns : list-like, default None。指定需要实现类别转换的列名
- dumm_na : bool, default False,增加一列表示空缺值,如果False就忽略空缺值
- drop_first : bool, default False,获得k中的k-1个类别值,去除第一个。
- 在用get_dummies方法进行转换的时候,会将聚合的数据打散
- prefix : string, list of strings, or dict of strings, default None。get_dummies转换后,列名的前缀
- data : array-like, Series, or DataFrame 输入的数据
- sklearn中的独热编码