2016-05-06 39 views
1

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

预先感谢您!

编辑:

这里是什么,我试图完成一个例子:

#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') 
+0

也许你可以尝试重新说一下这个,也可能举一个例子,这将大大有助于理解你在问什么。 [如何创建一个最小化,完整和可验证的示例](http://stackoverflow.com/help/mcve) – Thanos

+0

@Thanos我添加了我正在尝试做的示例。我希望功能名称出现在我的树中,并被导出。 –

回答

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) 
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()添加您的列名的列表,但是你需要,你可以在以后使用它。

相关问题