← Назад к вопросам
Python: Реализовать decision tree с нуля
2.8 Senior🔥 181 комментариев
#Python#Машинное обучение
Условие
Реализуйте алгоритм дерева решений для классификации с нуля на Python.
Требования:
- Критерий разбиения (Gini или Entropy)
- Рекурсивное построение дерева
- Предсказание и оценка точности
- Визуализация дерева
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: Decision Tree классификатор с нуля
Структура: 2 класса (Node, DecisionTree)
1. Gini Index (критерий примеси)
Gini = 1 - sum(p_i^2)
- Минимум 0: чистый узел
- Максимум 0.5: 50/50 класс
2. Информационный прирост
IG = Gini(parent) - (N_left/N * Gini(left) + N_right/N * Gini(right))
Выше IG → лучше разбиение.
3. Алгоритм (рекурсивный)
Базовый случай (листовой узел):
- Достигнута max_depth
- Меньше min_samples_split объектов
- Чистый узел (один класс)
- IG = 0 (нет улучшения)
Рекурсивный случай:
- Перебрать все признаки
- Для каждого признака: перебрать все пороги
- Вычислить IG для каждого разбиения
- Выбрать разбиение с максимальным IG
- Рекурсивно строить левое и правое поддеревья
4. Предсказание
Для каждого объекта:
- Начать с корня
- Если листовой узел → вернуть значение
- Если x[feature] <= threshold → идти влево
- Иначе → идти вправо
5. Оценка
Accuracy = количество правильных / общее количество
Ключевые методы
- gini(y): вычислить индекс Gini
- entropy(y): альтернатива (информационная энтропия)
- _best_split(X, y): найти лучшее разбиение
- _build_tree(X, y, depth): рекурсивное построение
- fit(X, y): обучение
- predict(X): предсказание
- score(X, y): точность
Временная сложность
- Обучение: O(n log n * d * k), где n=объекты, d=признаки, k=глубина
- Предсказание: O(k) для одного объекта
Пример
tree = DecisionTree(max_depth=5, criterion='gini')
tree.fit(X_train, y_train)
accuracy = tree.score(X_test, y_test)
predictions = tree.predict(X_test)