特征编码
我们要做的就是将数据的一列目标字段编码
import pandas as pd
data={
'size':['XL','L','M','L','M'],
'color':['red','green','blue','green','red'],
'gender':['female','male','male','female','female'],
'price':[199.0,89.0,99.0,129.0,79.0],
'weight':[500,450,300,380,410],
'bought':['yes','no','yes','no','yes']
}
df=pd.DataFrame(data=data)
df
这是我们的数据的DataFrame图,我们要做的是将最后一列编码
1.导入函数库
from sklearn.preprocessing import LabelEncoder
LabelEncoder
是 scikit-learn
库中的一个预处理工具,它用于将分类数据(目标变量或特征)中的标签转换为数字值。这在机器学习中非常有用,因为许多算法需要数值输入,而不是文本标签。
2.创建一个实例。
labelEncoder=LabelEncoder()
3.编码
df["bought"]=labelEncoder.fit_transform(df["bought"])
df
转化“bought”列,转化的结果。
labelEncoder.classes_
在 scikit-learn
的 LabelEncoder
类中,属性 classes_
存储了在调用 fit
或 fit_transform
方法后学习到的类别。这个属性是一个数组,包含了所有经过编码的类别的排序列表,顺序是它们首次出现在输入数据中的顺序。
请注意,classes_
属性是在调用 fit
或 fit_transform
方法之后才可用的,因为在这些方法中 LabelEncoder
会学习数据中的类别。如果尝试在拟合之前访问 classes_
,将会得到一个空数组。
4.逆转化
问题:若我想知道0,1代表的是什么字符串怎么办?
答:逆转化
labelEncoder.inverse_transform(df["bought"])
使用逆转化就能知道编码代表的是什么字符串。
5.one-hot编码,进行01编码变成数字类型
#普通的特征列转化为数字
from sklearn.preprocessing import OneHotEncoder
oneHotEncoder=OneHotEncoder(sparse=False)
oneHotEncoder.fit(df[["size"]])
oneHotEncoder.transform(df[["size"]])
在 scikit-learn
中,OneHotEncoder
是一个预处理类,用于将分类特征的整数或名义数据转换为一个二进制(0或1)矩阵。这种转换通常用于机器学习模型,特别是那些需要数值输入的模型
OneHotEncoder
的主要参数和方法包括:
-
sparse=False
: 指定输出格式是否为稀疏矩阵。如果设置为True
(默认值),输出将是稀疏矩阵格式,这对于具有高维稀疏数据的大规模数据集很有用。 -
fit(X)
: 计算输入数据 X 中类别的频率,构建一个类别到整数索引的映射。 -
transform(X)
: 将输入数据 X 转换为二进制矩阵,其中每一行代表一个样本,每一列代表一个类别。 -
get_feature_names_out()
: 获取转换后特征的名称。