sklearn.tree.DecisionTreeClassifier застревает при прогнозировании наиболее частой категории? - PullRequest
0 голосов
/ 30 октября 2019

Ниже приведена подробная информация о моем коде, который, я думаю, имеет отношение к моему вопросу.

  1. Я создал целевую двоичную переменную PP следующим образом, с подключенным распределением PP. Как видите, False/0 ~ 66% и True/1 = 34%
pandas_df['PP'] =(pandas_df['DET'].fillna(0) <1).astype('str')  

False    48114
True     25089
Name: FP, dtype: int64
Ниже приведен код модели. Цель состоит в том, чтобы предсказать вероятность ИСТИНА, поскольку большинство моделей делают
X= pandas_df[predictors]
y2= pandas_df.PP
tree_clf =DecisionTreeClassifier(max_depth=3, random_state=42,min_samples_leaf=500)
tree_clf.fit(X, y2)
Затем я визуализирую модель, как показано ниже (я намеренно оставил пустые имена элементов, поскольку она длинная)
 dot_data2 =tree.export_graphviz(tree_clf,out_file=None,feature_names=(),....                                           

 pydot_graph = pydotplus.graph_from_dot_data(dot_data2)
 pydot_graph.set_size('"0.5,0.5!"')
 pydot_graph.write_png('resized_tree.png')
 DTgraph=graphviz.Source(dot_data2)
 DTgraph  

Код не содержит ошибок. График выглядит значимым.

НО: на каждом отображаемом листе / узле написано Class=False. Я запустил тест, создав другую переменную PP2, чтобы просто перевернуть PP 0 на 1 и 1 на 0. Затем он говорит Class = True, потому что в PP2 значение True составляет 66%.

Я могу жить с PP2,немного поверните мою голову, чтобы понять это правильно. Но кошмар, чтобы представить дерево бизнес-аудитории. Я прочитал sklearn документацию и руководство пользователя. Не нашел способов заставить его предсказать вероятность ИСТИНА. Я неправильно понял Class = False?

...