DictVectorizer

考虑一个两列构成的输入数据:

citytemperature
New York70
San Francisco50

可以看到,这里第一列是一个类别特征,第二列是一个实数型特征。前面我们通过LabelBinarizer对标签进行one-hot编码,这里我们可以通过DictVectorizer实现对输入特征的自动one-hot编码:

data = [{'city': 'New York', 'temperature': 70}, 
        {'city': 'San Francisco', 'temperature': 50}]
vec = feature_extraction.DictVectorizer(sparse=False)
transformed_data = vec.fit_transform(data)

print(transformed_data)  
print(vec.get_feature_names_out())

输出的内容为:

[[ 1.  0. 70.]
 [ 0.  1. 50.]]

['city=New York' 'city=San Francisco' 'temperature']

在这里,这个DictVectorizer把原来特征中的类别型特征扩展为多列,每个类别一个列名(独热编码);把数值型特征保持原样,直接作为一列输出。所以,新的特征类似于:

city=New Yorkcity=San Franciscotemperature
1070.
0150.

OneHotEncoder

上面的DictVectorizer虽然方便,但是在有些情况下,又难免有失精细。我们可以使用OneHotEncoder搭配ColumnTransformer来定向操作:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
import pandas

df = pandas.DataFrame({
    'city': ['New York', 'San Francisco'],
    'temperature': [70, 50]
})

transformer = ColumnTransformer([
    ('onehot', OneHotEncoder(), ['city']),   # 对 city 进行独热编码
    ('scaler', StandardScaler(), ['temperature'])  # 对 temperature 进行标准化
])

transformed_data = transformer.fit_transform(df)
print(transformed_data)

输出类似于:

[[ 1.  0.  1.]
 [ 0.  1. -1.]]

标签: none

已有 4 条评论

  1. 作者的才华横溢,让这篇文章成为了一篇不可多得的艺术品。

  2. 文章紧扣主题,观点鲜明,展现出深刻的思考维度。

  3. ?金句式评语?

  4. 实验数据可增加误差分析以提高严谨性。

添加新评论