Округление срезов деревьев решений - PullRequest
0 голосов
/ 10 января 2020

Я использую DecisionTreeClassifier из sci-kit выучить и получить следующее дерево:

    if 'Salary' <= 1216.2154586:
        if 'Age' <= 25.55487:
            leaf 1
        else: 
            leaf 2
    else:
        leaf 3

Я хотел бы знать, есть ли способ для алгоритма расщепления вырезать по критериям округления:

    if 'Salary' <= 1200:
        if 'Age' <= 25:
            leaf 1
        else: 
            leaf 2
    else:
        leaf 3

1 Ответ

0 голосов
/ 10 января 2020

Небольшое уточнение - это алгоритм расщепления, который делает срезы, часть обрезки приходит потом, и она используется только для уменьшения глубины дерева путем удаления некоторых узлов.

В любом случае, алгоритм разделения не сможет делать то, что вы хотите автоматически, так как он всегда будет брать середину наилучшего интервала разделения (это означает, что, когда он находит, между какими двумя значениями он должен разделить, он сохранит средняя точка как порог).
Однако вы, вероятно, можете сделать это вручную с помощью чего-то подобного:

estimator = DecisionTreeClassifier(...)
estimator.fit(X_train, y_train)

for elem in estimator.tree_.threshold:
    elem = round(elem,0)

Вы также должны иметь возможность сделать более сложное правило округления, если хотите, в зависимости от того, какая функция у вас есть (если вы не слишком много) Например, вы можете l oop сверх estimator.tree_ и округлить estimator.tree_.threshold на основе значения estimator.tree_.feature, учитывая, что вы, вероятно, хотите другой тип округления для зарплаты и возраста.

ОДНАКО - позвольте мне указать, что это может отрицательно повлиять на производительность вашего оценщика, так как вы больше не будете разбивать оптимальные точки.

...