我想在数据集经过SKLearn的OneHotEncoder转换后,获取其特征名称。
在OneHotEncoder的active_features_属性中,可以看到对n_values_
、feature_indices_
和active_features_
如何在执行transform()
后被填充的非常好的解释。
我的问题是:
例如,对于基于DataFrame的输入数据:
data = pd.DataFrame({"a": [0, 1, 2,0], "b": [0,1,4, 5], "c":[0,1,4, 5]}).as_matrix()
如何编写代码,从原始特征名称a
、b
和c
转换到变换后的特征名称列表(例如:
a-0
,a-1
, a-2
, b-0
, b-1
, b-2
, b-3
, c-0
, c-1
, c-2
, c-3
或
a-0
,a-1
, a-2
, b-0
, b-1
, b-2
, b-3
, b-4
, b-5
, b-6
, b-7
, b-8
或任何有助于看到编码列与原始列之间分配关系的内容)。
背景:我想查看一些算法的特征重要性,以了解哪些特征对所使用的算法影响最大。
回答:
你可以使用pd.get_dummies()
:
pd.get_dummies(data["a"],prefix="a")
会得到:
a_0 a_1 a_20 1 0 01 0 1 02 0 0 13 1 0 0
这可以自动生成列名。你可以将此应用于所有列,然后获取列名。无需将它们转换为numpy矩阵。
因此,对于:
df = pd.DataFrame({"a": [0, 1, 2,0], "b": [0,1,4, 5], "c":[0,1,4, 5]})data = df.as_matrix()
解决方案如下所示:
columns = df.columnsmy_result = pd.DataFrame()temp = pd.DataFrame()for runner in columns: temp = pd.get_dummies(df[runner], prefix=runner) my_result[temp.columns] = tempprint(my_result.columns)>>Index(['a_0', 'a_1', 'a_2', 'b_0', 'b_1', 'b_4', 'b_5', 'c_0', 'c_1', 'c_4', 'c_5'], dtype='object')