sklearn.preprocessing.OneHotEncoder
是 Scikit-learn 中预处理模块中的一个函数,用于将分类数据编码为独热编码。独热编码是一种对离散值进行编码的方法,可以将非数值型特征转换为可用于机器学习算法的数值型特征。
使用方法:
- 导入包和加载数据:
import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
data = pd.read_csv('data.csv')
- 定义需要进行独热编码处理的列:
cat_cols = ['color', 'size']
- 初始化 OneHotEncoder 对象:
onehot_encoder = OneHotEncoder()
- 对需要进行独热编码处理的数据进行拟合和变换:
onehot_encoder.fit(data[cat_cols])
onehot_encoded = onehot_encoder.transform(data[cat_cols])
其中,拟合方法和变换方法可以通过 fit_transform() 方法来实现:
onehot_encoder.fit_transform(data[cat_cols])
- 将变换后的独热编码结果存储到 DataFrame 中:
onehot_encoded_df = pd.DataFrame(onehot_encoded.toarray(), columns = onehot_encoder.get_feature_names(cat_cols))
这样,我们就得到了一个 DataFrame,其中包含了使用独热编码处理后的结果。
实例1:
假设我们要对一批产品数据进行独热编码处理,其中颜色和尺寸是分类数据:
data = pd.DataFrame({'product': ['A', 'B', 'C', 'D'], 'color': ['red', 'blue', 'green', 'red'], 'size': ['M', 'L', 'S', 'M']})
产品 颜色 尺码
A 红 M
B 蓝 L
C 绿 S
D 红 M
我们需要将颜色和尺寸这两列分类数据进行独热编码处理:
cat_cols = ['color', 'size']
onehot_encoder = OneHotEncoder()
onehot_encoder.fit(data[cat_cols])
onehot_encoded = onehot_encoder.transform(data[cat_cols])
onehot_encoded_df = pd.DataFrame(onehot_encoded.toarray(), columns = onehot_encoder.get_feature_names(cat_cols))
将变换后的数据存储到 DataFrame 中:
result = pd.concat([data, onehot_encoded_df], axis=1).drop(cat_cols, axis=1)
print(result)
输出结果:
product color_blue color_green color_red size_L size_M size_S
0 A 0.0 0.0 1.0 0.0 1.0 0.0
1 B 1.0 0.0 0.0 1.0 0.0 0.0
2 C 0.0 1.0 0.0 0.0 0.0 1.0
3 D 0.0 0.0 1.0 0.0 1.0 0.0
实例2:
对于多类别分类问题,这一函数也是很有用的。下面我们使用一个鸢尾花数据集,该数据集有三个类别,就是鸢尾花的三个品种:山鸢尾(Iris Setosa)、变色鸢尾(Iris Versicolour)和维吉尼亚鸢尾(Iris Virginica),然后我们对这三个品种进行编码。
from sklearn.datasets import load_iris
dataset = load_iris()
data = pd.DataFrame(dataset.data, columns=dataset.feature_names)
target = pd.DataFrame(dataset.target, columns=["target"])
数据集长这样:
数据集长这样:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
.. ... ... ... ...
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
[150 rows x 4 columns]
然后我们对target列进行编码:
onehot_encoder = OneHotEncoder()
target_ohc = onehot_encoder.fit_transform(target)
print(pd.DataFrame(target_ohc.toarray()).head())
输出结果:
0 1 2
0 1.0 0.0 0.0
1 1.0 0.0 0.0
2 1.0 0.0 0.0
3 1.0 0.0 0.0
4 1.0 0.0 0.0