Деревья решений — одна из самых мощных и широко используемых моделей с учителем, которая может выполнять либо регрессию, либо классификацию. В этом уроке мы сосредоточимся только на настройке классификации.
Дерево решений состоит из правил, которые мы используем, чтобы сформулировать решение о прогнозе точки данных. По сути, это последовательность простых правил if/else.
Мы можем визуализировать дерево решений как структуру, основанную на последовательности процессов принятия решений, от которых можно ожидать другого результата.
Построение дерева решений:
Важно понимать, как построить дерево решений. Итак, давайте возьмем простой пример и построим дерево решений вручную.
Предположим, что дан следующий обучающий набор данных. Нам нужно определить метку класса, используя четыре функции: возраст, доход, учащийся, кредит_рейтинг.
Есть три разных способа разделить дерево решений.
- Прирост информации и энтропия
- Индекс Джини
- Коэффициент усиления
В этом руководстве мы увидим, как определить, по какой функции следует разделить, на основе энтропии и прироста информации.
ЭНТРОПИЯ И ИНФОРМАЦИЯ:
Энтропия пришла из теории информации и измеряет, насколько случайным образом распределяются значения атрибутов. Это мера случайности или неопределенности.
Энтропия определяется следующим образом
Предположим, что если мы подбрасываем беспристрастную честную монету с 50% вероятностью выпадения орла и 50% вероятностью выпадения решки, то энтропия будет следующей:
С другой стороны, если у нас есть смещенная монета с 25% вероятностью выпадения орла и 75% вероятностью выпадения решки, то энтропия равна
Дерево решений пытается найти расщепления, которые уменьшают энтропию и повышают однородность внутри групп.
Теперь мы хотим определить, какой атрибут наиболее полезен. Получение информации говорит нам, насколько важен атрибут.
Чтобы описать прирост информации, нам сначала нужно вычислить энтропию распределения меток. У нас есть девять кортежей класса «да» и пять кортежей класса «нет». Энтропия, принадлежащая начальному распределению, выглядит следующим образом.
Формула для получения информации дается следующим образом
Теперь нам нужно вычислить энтропию для каждого атрибута и выбрать атрибут с наибольшим приростом информации в качестве корневого узла.
Рассчитаем энтропию для атрибута возраста.
Следовательно, прирост информации для разделения в возрасте равен
Точно так же прирост информации для остальных атрибутов равен
Инфоприрост(доход) = 0,029
Прирост информации (студент) = 0,151
Прирост информации (кредит_рейтинг) = 0,048
Здесь возраст атрибута имеет самый высокий информационный прирост 0,246, поэтому мы можем выбрать возраст в качестве атрибута разделения.
Корневой узел помечается как возраст, а ветви растут для каждого из значений атрибута.
Возраст атрибута может принимать три значения: низкий, средний и высокий.
Поскольку все экземпляры, попадающие в раздел middle_aged, принадлежат к одному и тому же классу, мы сделаем его конечным узлом с пометкой «да».
Теперь снова мы должны рекурсивно повторить процесс, чтобы сформировать дерево решений в каждом разделе.
Полностью сформированное дерево решений приведено ниже.
КРИТЕРИИ ОСТАНОВКИ:
Дерево решений растет до тех пор, пока все конечные узлы не станут чистыми, т. е. все точки в листовом узле принадлежат одному классу. Такие деревья могут привести к переоснащению и снижению точности невидимых данных.
По мере увеличения глубины дерева точность обучающих данных может повышаться, но она не будет обобщаться для невидимых данных.
Поэтому нам нужно найти компромисс между максимальной глубиной дерева и точностью.
Некоторые из часто используемых критериев остановки:
- Ни один атрибут не удовлетворяет минимальному порогу получения информации.
- Дерево выросло на максимальную глубину
- Количество выборок в поддереве меньше порогового значения
Теперь давайте реализуем дерево решений с помощью scikit-learn.
импортировать numpy как np из sklearn.tree; импортировать DecisionTreeClassifier из sklearn.datasets; импортировать load_iris из sklearn.model_selection; target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) clf = DecisionTreeClassifier() clf.fit(X_train, y_train) y_pred = clf.predict(X_test) print(accuracy_score(y_test, y_pred))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
Импортировать пустышка как нп от склерн.дерево Импортировать Дерево решенийКлассификатор от склерн.наборы данных Импортировать load_iris от склерн.model_selection Импортировать train_test_split от склерн.показатели Импортировать точность_оценка нп.случайный.семя(2020) данные “=” load_iris() Икс “=” данные.данные у “=” данные.цель X_train, X_тест, y_train, y_test “=” train_test_split(Икс, у, test_size“=”0,3) clf “=” Дерево решенийКлассификатор() clf.соответствовать(X_train, y_train) y_pred “=” clf.предсказывать(X_тест) Распечатать(точность_оценка(y_test, y_pred)) |
ЗАКЛЮЧЕНИЕ:
Дерево решений — это контролируемый алгоритм машинного обучения, который может выполнять либо классификацию, либо регрессию. Дерево решений строится рекурсивно сверху вниз.
Различные компоненты дерева
КОРНЕВОЙ УЗЕЛ: Корневой узел представляет всю выборку.
УЗЕЛ РЕШЕНИЯ: Узлы — это место, где принимается решение.
ВЕТВЬ: Ветвь показывает, как выбор может привести к решению.
ЛИСТОВОЙ УЗЕЛ: Последний узел в дереве решений. Каждый листовой узел содержит метку класса.
Код для этого руководства можно найти в этом репозитории Github.