Как изменить критерии разделения (Джини / энтропия) в алгоритме дерева решений в Scikit-Learn? - PullRequest
0 голосов
/ 24 апреля 2018

Я работаю с алгоритмом дерева решений для задачи двоичной классификации, и цель состоит в том, чтобы минимизировать ложные срабатывания (максимизировать positive predicted value) классификации (стоимость диагностического инструмента очень высока).

Есть ли способ ввести weight в критерии расщепления Джини / энтропии, чтобы штрафовать за ложные положительные ошибочные классификации?

Здесь например, модифицированный индекс Джини дается как:

enter image description here

Поэтому мне интересно, есть ли способ реализовать это в Scikit-learn?

EDIT

Игра с class_weight дала следующие результаты:

from sklearn import datasets as dts
iris_data = dts.load_iris()

X, y = iris_data.features, iris_data.targets
# take only classes 1 and 2 due to less separability
X = X[y>0]
y = y[y>0]
y = y - 1 # make binary labels

# define the decision tree classifier with only two levels at most and no class balance
dt = tree.DecisionTreeClassifier(max_depth=2, class_weight=None)

# fit the model, no train/test for simplicity
dt.fit(X[:55,:2], y[:55])

построить график решения и дерево Голубой положительный (1) :

enter image description here

При перевешивании класса меньшинства (или более ценного):

dt_100 = tree.DecisionTreeClassifier (max_depth = 2, class_weight = {1: 100})

enter image description here

1 Ответ

0 голосов
/ 24 апреля 2018

Классификаторы дерева решений поддерживают аргумент class_weight.

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

...