1

我想知道是否可以获得 pandas.get_dummies 的功能名称,以便将其传递给 export_graphviz。我正在使用 get_dummies 为 sklearn DecisionTreeClassifier 编码我的数据集。当我导出树时,我希望节点的输出更易于阅读。

先感谢您!

编辑:

这是我要完成的一个示例:

#Concatenate the sets
concated = pd.concat([train_file, test_file])

#Get the encoded set
concated_encoded = pd.get_dummies(concated, columns=cols_to_retain)
#Separate the sets
train = concated_encoded[concated_encoded["Train"] == 1]
test = concated_encoded[concated_encoded["Train"] == 0]
train = train.drop(["Train"], axis=1)
test = test.drop(["Train"], axis=1)

X_train, X_val, y_train, y_val = train_test_split(train, train_outcome, test_size=0.15)

clf = DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(X_train,y_train)
y_pred_val = clf.predict(X_val)

import StringIO
import pydot
dot_data = StringIO.StringIO() 

我希望能够使用 feature_names 参数标记功能

export_graphviz(clf, out_file=dot_data, feature_names=()) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
graph.write_png('tree.png') 
4

3 回答 3

2

pd.get_dummies实际上返回一个 DataFrame(或 sparseDataFrame)。对于 DataFrame df,您可以像访问每个 DataFrame 一样访问列(或特征)名称,方法是使用请求 DataFrame 对象的 columns 属性,df.columns如以下示例所示:

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                'C': [1, 2, 3]})  #creates sample dataframe

>>> df_dummified = pd.get_dummies(df)  #returns new coded dataframe

>>> columns = df_dummified.columns  #returns index object holding new column names

>>> columns.tolist()  #converts the index object to a list

['C', 'A_a', 'A_b', 'B_a', 'B_b', 'B_c']
于 2018-10-31T13:55:05.107 回答
0

当您使用pd.get_dummies时,新列将接收与数据框中该特征的值相对应的名称。在文档的以下示例中,您可以看到虚拟列如何接收名称<prefix>_<value>

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                    'C': [1, 2, 3]})
>>> pd.get_dummies(df, prefix=['col1', 'col2'])
   C  col1_a  col1_b  col2_a  col2_b  col2_c
0  1       1       0       0       1       0
1  2       0       1       1       0       0
2  3       1       0       0       0       1

因此,您可能只需要使用:

feature_names = list(train.columns)
export_graphviz(clf, out_file=dot_data, feature_names=feature_names)
于 2016-06-18T09:46:34.200 回答
0

这是另一个利用prefix参数的想法get_dummies()。下面的单个字符串用于为创建的所有功能名称添加前缀。您可以制定一个更复杂的方案,prefix也可以采用字典或列表。

visa_data_copy = pd.get_dummies(visa_data_copy, columns=categorical_cols, prefix='UID_001')

added_dummy_cols = [item for item in list(visa_data_copy.columns.values) if item.startswith('UID_001')]

因此added_dummy_cols最终将成为get_dummies()为您添加的列名列表,您可以稍后根据需要使用它。

于 2017-09-21T14:52:52.370 回答