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

В этой статье мы собираемся реализовать алгоритм дерева решений в базе данных весов и расстояний весов, представленной на 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)

Отсутствующие значения атрибутов: нет Распределение классов:

  1. 46,08 процента составляют L
  2. 07,84 процента - B
  3. 46,08 процента составляют R

Вы можете найти более подробную информацию о наборе данных здесь.

Используемые пакеты Python:

  1. скачать:
  • В 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. Теперь разделите обучающий набор набора данных на подмножества. При создании подмножества убедитесь, что каждое подмножество обучающего набора данных должно иметь одинаковое значение атрибута.
  3. Найдите листовые узлы во всех ветвях, повторив 1 и 2 в каждом подмножестве.

При реализации дерева решений мы пройдем следующие два этапа:

  1. Этап строительства
  • Предварительно обработайте набор данных.
  • Отделите набор данных от обучения и протестируйте с помощью пакета 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 г.