具有特征名称的 OneHot 向量

Posted

技术标签:

【中文标题】具有特征名称的 OneHot 向量【英文标题】:OneHot vectors with feature names 【发布时间】:2020-03-01 21:59:49 【问题描述】:

查看OneHotEncoder 的文档,似乎没有办法将特征名称包含为 OneHot 向量的前缀。有谁知道解决这个问题的方法?我错过了什么吗?

示例数据框:

df = pd.DataFrame('a':['c1', 'c1', 'c2', 'c1', 'c3'], 'b':['c1', 'c4', 'c1', 'c1', 'c1'])

from sklearn.preprocessing import OneHotEncoder

onehot = OneHotEncoder()
onehot.fit(df)

onehot.get_feature_names()
array(['x0_c1', 'x0_c2', 'x0_c3', 'x1_c1', 'x1_c4'], dtype=object)

如果给编码器提供了一个数据帧,我希望有可能获得类似的东西:

array(['a_c1', 'a_c2', 'a_c3', 'b_c1', 'b_c4'], dtype=object)

【问题讨论】:

【参考方案1】:

您需要执行以下操作以包含来自 get_feature_name 的功能名称。

onehot.get_feature_names(input_features=df.columns)

输出:

array(['a_c1', 'a_c2', 'a_c3', 'b_c1', 'b_c4'], dtype=object)

每个文档:

get_feature_name(self, input_features=None) 返回输出特征的特征名称。

参数:input_features:字符串列表,长度为n_features, 输入功能的可选字符串名称(如果可用)。默认, 使用“x0”、“x1”、……“xn_features”。

返回: output_feature_names :字符串数组,长度 n_output_features

【讨论】:

啊,有办法!谢谢@scott :) 出于确切原因,我已经更新了文档中的示例。看开发版文档here【参考方案2】:

让我们创建一个包含 3 列的数据框,每列都有一些分类值。

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

df_dict= 'Sex' :['m', 'f' ,'m' ,'f'] , 'City' : ['C1' , 'C2' , 'C3' , 'C4'] , 'States' :['S1' , 'S2', 'S3', 'S4']
df = pd.DataFrame.from_dict(df_dict)
cat_enc = OneHotEncoder(handle_unknown = 'ignore')
transformed_array = cat_enc.fit_transform(df).toarray()
transformed_df = pd.DataFrame(transformed_array , columns= cat_enc.get_feature_names(df.columns))
transformed_df.head()

我们将得到以下输出 -

City_C1 City_C2 City_C3 City_C4 Sex_f   Sex_m   States_S1   States_S2   States_S3   States_S4
0   1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0
1   0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0
2   0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0
3   0.0 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0

【讨论】:

以上是关于具有特征名称的 OneHot 向量的主要内容,如果未能解决你的问题,请参考以下文章

OneHot Encoder 和 Label Encoder

Spark VectorSlice 向量切片

使用 One Hot 编码后在列中显示特征名称

one-hot编码简介

TensorFlow2 特征列 feature_column

SciKit Learn 中决策树中的 Feature_importance 向量以及特征名称