如果为真,决策树分类器输出“男性”,如果为假,则输出“男性”?

Posted

技术标签:

【中文标题】如果为真,决策树分类器输出“男性”,如果为假,则输出“男性”?【英文标题】:Decision Tree Classifier outputs "Male" if true and "Male" if false? 【发布时间】:2019-05-08 23:37:16 【问题描述】:

我正在使用决策树分类器来尝试根据节目类型预测男性或女性。一旦我使用 graphviz 可视化决策树,该图将 Male 输出为 True 和 False。我在这个问题上遇到了麻烦。

有可能不是我的代码错误,而是我的特征和目标变量。 这是 jupyter notebook 块中的代码:

Male = tmp[tmp['gender'] == 'M']
Female = tmp[tmp['gender'] == 'F' ]
X = tmp.loc[:, ['Fantasy', 'Romance']]
# 'Cars', 'Drama', 'Game','SliceofLife','Music', 'Psychological', 'Fantasy', 'Horror','Historical','Space','Sci-Fi', 'Magic', 'Adventure', 'Samurai', 'ShounenAi', 'Mecha', 'Thriller', 'Demons', 'Kids', 'Romance', 'Sports', 'Seinen', 'School', 'ShoujoAi', 'Comedy']]
y = tmp['gender']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

model_dtc = DecisionTreeClassifier() 
model_dtc = model_dtc.fit(X_train, y_train)
y_pred = model_dtc.predict(X_test)

df_dtc = pd.DataFrame('Actual': y_test, 'Predicted': y_pred)  

tree.export_graphviz(model_dtc, out_file='gender_classifier.dot', feature_names=['Fantasy', 'Romance'],class_names=tmp['gender'] ,filled=True, rounded=True,special_characters=True)

dot_data = tree.export_graphviz(model_dtc, out_file=None, feature_names = ['Fantasy','Romance'], class_names = tmp['gender'] , filled=True, rounded=True, special_characters=True)
graph = graphviz.Source(dot_data)
graph 

graphviz 输出

任何想法或建议都会非常有帮助!

【问题讨论】:

为什么你的图片(树)没有女性类? 请显示您的训练数据样本Xy - 确实不清楚Female 是否存在... 【参考方案1】:

我认为它不是完整的树。你是说 predict 方法总是输出 Male 吗?

从图中我观察到了几点:

    也许我在这一点上错了,但是如果您的数据有两个类,那么图中的 value 数组应该只包含 2 个 val,我看到了三个。 你还没有设置任何max_depth参数吗?如果不是,那么树应该扩展直到节点是纯的,这不是这里的情况。

也许尝试将其转换为 png ? 用这个 - dot -Tpng tree.dot -o tree.png

【讨论】:

以上是关于如果为真,决策树分类器输出“男性”,如果为假,则输出“男性”?的主要内容,如果未能解决你的问题,请参考以下文章

决策树分类器,多标签输出

GBDT 梯度提升决策树简述

将决策树训练分类器的模型输出保存为 Spark Scala 平台中的文本文件

如果另一个互斥参数为真,则将默认值设置为假

文档分类的决策树

决策树分类器 sklearn 中节点的不同颜色表示啥?