在机器学习中,大多数场景都只能处理数值型数据,但在现实场景中,很多特征和标签在采集完毕后,都不是以数字呈现的,比如说学历可能是 ['小学', '初中', '高中', '大学'],付费方式可能包含 ['支付宝', '微信', '现金'],这种情况下为了让数据适应算法和库,我们必须对数据进行编码,即文字型数据转化为数值型

标签编码

preprocessing.LabelEncoder:标签专用,能够将分类转化为分类数值。sklearn数据集中,label都已经被处理过了,所以本例中以 Embarked 为例。

import pandas as pd
from sklearn.preprocessing import LabelEncoder

data = pd.read_csv('./datas/titanic.csv')
data.dropna(subset=['Embarked'], inplace=True)

le = LabelEncoder()
le.fit(data['Embarked'])  # 生成classes_
res = le.transform(['S', 'Q', 'C'])  # 编码

print(res)
print(le.classes_)  # 查看编码list

# 逆转
res = le.inverse_transform([0, 1, 2])
print(res)

# 不需要展示中间过程时简写
from sklearn.preprocessing import LabelEncoder
data['Embarked'] = LabelEncoder().fit_transform(data['Embarked'])

特征编码

preprocessing.OrdinalEncoder:特征专用,能够将分类特征转为为分类数值。本例中以 Embarked 和 Sex 两个特征为例。

from sklearn.preprocessing import OrdinalEncoder
data = pd.read_csv('./datas/titanic.csv')
data.dropna(subset=['Embarked'], inplace=True)

# 注意:本方法只接受二维特征
cates = OrdinalEncoder().fit(data[['Sex', 'Embarked']]).categories_
print(cates)

data[['Sex', 'Embarked']] = OrdinalEncoder().fit_transform(data[['Sex', 'Embarked']])
print(data['Sex'].unique())

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/264