Дерево решений — один из самых мощных и популярных алгоритмов. Алгоритм дерева решений относится к категории алгоритмов обучения с учителем. Он работает как для непрерывных, так и для категориальных выходных переменных.
В этой статье мы собираемся реализовать алгоритм дерева решений в базе данных весов и расстояний весов, представленной на UCI.
Описание набора данных:
Title : Balance Scale Weight & Distance Database Number of Instances: 625 (49 balanced, 288 left, 288 right) Number of Attributes: 4 (numeric) + class name = 5 Attribute Information:
- L [конец балансировочной шкалы слева]
- B [шкала баланса должна быть сбалансирована]
- R [кончик весов вправо]
- Вес слева: 5 (1, 2, 3, 4, 5)
- Расстояние влево: 5 (1, 2, 3, 4, 5)
- Правильный вес: 5 (1, 2, 3, 4, 5)
- Правое расстояние: 5 (1, 2, 3, 4, 5)
Отсутствующие значения атрибутов: нет Распределение классов:
- 46,08 процента составляют L
- 07,84 процента - B
- 46,08 процента составляют R
Вы можете найти более подробную информацию о наборе данных здесь.
Используемые пакеты Python:
- скачать:
- В python sklearn — это пакет машинного обучения, который включает в себя множество алгоритмов ML.
- Здесь мы используем некоторые из его модулей, такие как train_test_split, DecisionTreeClassifier и precision_score.
2. NumPy:
- Это числовой модуль Python, который предоставляет быстрые математические функции для вычислений.
- Он используется для чтения данных в массивах numpy и для манипуляций.
3. Панды:
- Используется для чтения и записи различных файлов.
- Манипулировать данными можно легко с помощью фреймов данных.
Установка пакетов:
В Python sklearn — это пакет, который содержит все необходимые пакеты для реализации алгоритма машинного обучения. Вы можете установить пакет sklearn, следуя приведенным ниже командам.
используя pip :
pip install -U scikit-learn
Перед использованием приведенной выше команды убедитесь, что у вас установлены пакеты scipy и numpy.
Если у вас нет пип. Вы можете установить его с помощью
python get-pip.py
используя conda :
conda install scikit-learn
Предположения, которые мы делаем при использовании дерева решений:
- В начале считаем всю обучающую выборку корневой.
- Предполагается, что атрибуты являются категориальными для получения информации, а для индекса Джини атрибуты предполагаются непрерывными.
- На основе значений атрибутов записи распределяются рекурсивно.
- Мы используем статистические методы для упорядочения атрибутов как корневого или внутреннего узла.
Псевдокод :
- Найдите лучший атрибут и поместите его в корневой узел дерева.
- Теперь разделите обучающий набор набора данных на подмножества. При создании подмножества убедитесь, что каждое подмножество обучающего набора данных должно иметь одинаковое значение атрибута.
- Найдите листовые узлы во всех ветвях, повторив 1 и 2 в каждом подмножестве.
При реализации дерева решений мы пройдем следующие два этапа:
- Этап строительства
- Предварительно обработайте набор данных.
- Отделите набор данных от обучения и протестируйте с помощью пакета Python sklearn.
- Обучить классификатор.
2. Оперативный этап
- Делать предсказания.
- Рассчитать точность.
Импорт данных:
- Для импорта данных и управления ими мы используем пакет pandas, предоставляемый в python.
- Здесь мы используем URL-адрес, который напрямую извлекает набор данных с сайта UCI, и нет необходимости загружать набор данных. Когда вы пытаетесь запустить этот код в своей системе, убедитесь, что в системе должно быть активное подключение к Интернету.
- Поскольку набор данных разделен знаком «», поэтому мы должны передать значение параметра sep как «,».
- Еще одно замечание: набор данных не содержит заголовка, поэтому мы передадим значение параметра Header как none. Если мы не передадим параметр заголовка, то он будет считать первую строку набора данных заголовком.
Нарезка данных:
- Перед обучением модели мы должны разделить набор данных на набор данных для обучения и тестирования.
- Чтобы разделить набор данных для обучения и тестирования, мы используем модуль sklearn train_test_split.
- Прежде всего, мы должны отделить целевую переменную от атрибутов в наборе данных.
X = balance_data.values[:, 1:5] Y = balance_data.values[:,0]
- Выше приведены строки кода, разделяющие набор данных. Переменная X содержит атрибуты, а переменная Y содержит целевую переменную набора данных.
- Следующим шагом является разделение набора данных для обучения и тестирования.
X_train, X_test, y_train, y_test = train_test_split( X, Y, test_size = 0.3, random_state = 100)
- Над строкой разделите набор данных для обучения и тестирования. Поскольку мы разделяем набор данных в соотношении 70:30 между обучением и тестированием, мы передаем значение параметра test_size равным 0,3.
- Переменная random_state — это состояние генератора псевдослучайных чисел, используемое для случайной выборки.
Термины, используемые в коде:
Индекс Джини и получение информации оба этих метода используются для выбора из n атрибутов набора данных, какой атрибут будет помещен в корневой узел или во внутренний узел.
Индекс Джини
- Индекс Джини — это показатель, измеряющий, как часто случайно выбранный элемент будет неправильно идентифицирован.
- Это означает, что предпочтение следует отдавать атрибуту с более низким индексом Джини.
- Sklearn поддерживает критерии «джини» для индекса Джини и по умолчанию принимает значение «джини».
Энтропия
- Энтропия является мерой неопределенности случайной величины, она характеризует нечистоту произвольного набора примеров. Чем выше энтропия, тем больше информативность.
Получение информации
- Энтропия обычно меняется, когда мы используем узел в дереве решений для разделения обучающих экземпляров на более мелкие подмножества. Прирост информации является мерой этого изменения энтропии.
- Sklearn поддерживает критерии «энтропии» для получения информации, и если мы хотим использовать метод получения информации в sklearn, мы должны указать это явно.
Показатель точности
Оценка точности используется для расчета точности обученного классификатора.
Матрица путаницы
Матрица путаницы используется для понимания поведения обученного классификатора в тестовом наборе данных или проверки набора данных.
Ниже приведен код Python для дерева решений.
Data Infomation: Dataset Length: 625 Dataset Shape: (625, 5) Dataset: 0 1 2 3 4 0 B 1 1 1 1 1 R 1 1 1 2 2 R 1 1 1 3 3 R 1 1 1 4 4 R 1 1 1 5Results Using Gini Index: Predicted values: ['R' 'L' 'R' 'R' 'R' 'L' 'R' 'L' 'L' 'L' 'R' 'L' 'L' 'L' 'R' 'L' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'L' 'R' 'L' 'L' 'L' 'R' 'L' 'L' 'L' 'R' 'L' 'L' 'L' 'L' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'L' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'L' 'L' 'R' 'R' 'L' 'L' 'L' 'L' 'L' 'R' 'R' 'L' 'L' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'R' 'L' 'R' 'L' 'L' 'L' 'L' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'L' 'L' 'R' 'R' 'L' 'L' 'L' 'R' 'L' 'R' 'R' 'R' 'R' 'R' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'R' 'R' 'R' 'L' 'R' 'L' 'L' 'L' 'L' 'L' 'L' 'L' 'R' 'R' 'R' 'R' 'L' 'R' 'R' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'L' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'R' 'R' 'R' 'L' 'R' 'R' 'R' 'R' 'R' 'L' 'L' 'R' 'R' 'R' 'R' 'L' 'R' 'R' 'R' 'L' 'R' 'L' 'L' 'L' 'L' 'R' 'R' 'L' 'R' 'R' 'L' 'L' 'R' 'R' 'R'] Confusion Matrix: [[ 0 6 7] [ 0 67 18] [ 0 19 71]] Accuracy : 73.4042553191 Report : precision recall f1-score support B 0.00 0.00 0.00 13 L 0.73 0.79 0.76 85 R 0.74 0.79 0.76 90 avg/total 0.68 0.73 0.71 188Results Using Entropy: Predicted values: ['R' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'R' 'R' 'R' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'L' 'L' 'L' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'L' 'R' 'L' 'L' 'R' 'L' 'L' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'R' 'L' 'L' 'R' 'L' 'L' 'R' 'L' 'L' 'L' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'R' 'L' 'R' 'L' 'L' 'L' 'L' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'L' 'L' 'R' 'R' 'L' 'L' 'L' 'R' 'L' 'L' 'R' 'R' 'R' 'R' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'L' 'R' 'R' 'R' 'L' 'L' 'L' 'L' 'L' 'R' 'R' 'R' 'R' 'L' 'R' 'R' 'R' 'L' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'L' 'R' 'L' 'R' 'R' 'R' 'R' 'R' 'L' 'R' 'R' 'R' 'R' 'R' 'R' 'L' 'R' 'L' 'R' 'R' 'L' 'R' 'L' 'R' 'L' 'R' 'L' 'L' 'L' 'L' 'L' 'R' 'R' 'R' 'L' 'L' 'L' 'R' 'R' 'R'] Confusion Matrix: [[ 0 6 7] [ 0 63 22] [ 0 20 70]] Accuracy : 70.7446808511 Report : precision recall f1-score support B 0.00 0.00 0.00 13 L 0.71 0.74 0.72 85 R 0.71 0.78 0.74 90 avg / total 0.66 0.71 0.68 188
Первоначально опубликовано на https://www.geeksforgeeks.org 30 ноября 2017 г.