#python #machine-learning #scikit-learn #random-forest #graphviz
#python #машинное обучение #scikit-learn #случайный лес #graphviz
Вопрос:
Я обучаю классификатор случайного леса с 10 оценками. Затем я сохраняю все древовидные графики с помощью graphviz в виде файлов dot и png. Наконец, я делаю randomForest.predict.
Из выходных данных прогноза я выбрал один из предсказанных классов и искал их на графиках с помощью поиска в точечном файле (просто поиск обычного текста с помощью STRG F, который работал с другой моделью). Но я не могу найти этот класс. Когда я смотрю в png-файл, я вижу только один класс в узлах. (Я не могу показать графики здесь). Это странно, потому что, если бы не было ни одного узла с разными классами, он не мог бы их предсказать.
Моя цель — проследить путь, по которому объект данных получает свой предсказанный класс.
Вот соответствующие части моего кода:
rfclf = RandomForestClassifier(class_weight = 'balanced')
rfclf.fit(x,y)
вывод:
RandomForestClassifier(bootstrap=True, class_weight=’balanced’, criterion=’gini’, max_depth=Нет, max_features=’auto’, max_leaf_nodes=Нет, min_impurity_decrease=0.0, min_impurity_split=Нет, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0,0, n_estimators=10, n_jobs=Нет,oob_score=False, random_state=None, verbose=0, warm_start=False)
estimator=rfclf.estimators_[8] #or [0],[1],[2],.....[9] because there are 10 estimators
# Export as dot-file
export_graphviz(estimator, out_file='Graphs/rfclf8.dot',
feature_names = x.columns,
class_names = y,
rounded = True, proportion = False,
precision = 2, filled = True)
# convert to PNG with system command (needs Graphviz)
from subprocess import call
call(['dot', '-Tpng', 'Graphs/rfclf8.dot', '-o', 'Graphs/rfclf8.png', '-Gdpi=600'])
#predict
rfclf.predict(dfP)
вывод: массив([‘-разные классы-, dtype=object)
Что-то не так в коде? Это хорошо работало для другого набора данных.
Комментарии:
1. Невозможно ответить, не увидев графики или хотя бы их часть (листья). Загружайте их в виде файлов PNG
Ответ №1:
Чтобы отследить пути, используемые для классификации конкретной выборки, вы должны использовать decision_path() RandomForestClassifier . Он доступен начиная с scikit-learn 0.18.0
Пример кода доступен по адресу https://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_structure.html