如果为真,决策树分类器输出“男性”,如果为假,则输出“男性”?
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 输出
任何想法或建议都会非常有帮助!
【问题讨论】:
为什么你的图片(树)没有女性类? 请显示您的训练数据样本X
和y
- 确实不清楚Female
是否存在...
【参考方案1】:
我认为它不是完整的树。你是说 predict 方法总是输出 Male 吗?
从图中我观察到了几点:
-
也许我在这一点上错了,但是如果您的数据有两个类,那么图中的 value 数组应该只包含 2 个 val,我看到了三个。
你还没有设置任何max_depth参数吗?如果不是,那么树应该扩展直到节点是纯的,这不是这里的情况。
也许尝试将其转换为 png ?
用这个 -
dot -Tpng tree.dot -o tree.png
【讨论】:
以上是关于如果为真,决策树分类器输出“男性”,如果为假,则输出“男性”?的主要内容,如果未能解决你的问题,请参考以下文章