Деревья решений Python-классы в терминальных узлах - PullRequest
1 голос
/ 15 марта 2019

Я реализую деревья решений с помощью Python.Я делаю перекрестную проверку с помощью grid-поиска, чтобы определить оптимальные параметры модели дерева.

dtc = DecisionTreeClassifier()

parameter_grid = {'splitter': ['best', 'random'], 
        'min_samples_split': [2, 3, 4, 5, 6, 7, 8, 9, 10],
        'min_samples_leaf': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
        'criterion': ['gini', 'entropy'],
        'random_state': [0],
        'max_depth':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        }


    cross_validation = StratifiedKFold(n_splits=10)
    grid_search = GridSearchCV(dtc, param_grid=parameter_grid, cv=cross_validation)
    grid_search.fit(x, y)

dtree = grid_search.best_estimator_

    dtree.fit(x,y)

На рисунке показано результирующее дерево с комбинацией grid_search.best_params_, получающей лучший grid_search.best_score_.

enter image description here

Я не понимаю, почему правый конечный узел в левой ветви дерева все еще имеет значения = [97, 148].Я не понимаю, почему другие комбинации параметров модели, которые снова разделяют этот конечный узел, не получают лучшую точность при перекрестной проверке и поиске по сетке.У меня действительно нет объяснения этому терминальному узлу, совсем не чисто.Может кто-нибудь объяснить, почему дерево с таким терминальным узлом получает лучшую точность, чем дерево с дальнейшим разбиением?

...