one-hot 编码2
DictVectorizer
考虑一个两列构成的输入数据:
city | temperature |
---|---|
New York | 70 |
San Francisco | 50 |
可以看到,这里第一列是一个类别特征,第二列是一个实数型特征。前面我们通过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 York | city=San Francisco | temperature |
---|---|---|
1 | 0 | 70. |
0 | 1 | 50. |
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.]]
作者的才华横溢,让这篇文章成为了一篇不可多得的艺术品。
文章紧扣主题,观点鲜明,展现出深刻的思考维度。
?金句式评语?
实验数据可增加误差分析以提高严谨性。