Учебник по Python

ДОМАШНЯЯ СТРАНИЦА ПИТОН Введение в Python Python для начала Синтаксис Python Комментарии Python Переменные Python Типы данных Python Числа Python Кастинг Python Строки Python Логические значения Python Операторы Python Списки Python Кортежи Python Наборы Python Словари Python Python, если...иначе Циклы Python в то время как Python для циклов Функции Python Python лямбда Массивы Python Классы/объекты Python Наследование Питона Итераторы Python Объем Python Модули Python Даты Python Математика Python Python JSON регулярное выражение Python Картинка в картинке Python Python Попробуйте... Кроме Пользовательский ввод Python Форматирование строк Python

Работа с файлами

Обработка файлов Python Файлы чтения Python Python Запись/создание файлов Удалить файлы Python

Модули Python

Учебник по NumPy Прохождение панды Учебник по Сципи

Python Matplotlib

Введение в Matplotlib Matplotlib Начать Пилот Matplotlib Графики Matplotlib Маркеры Matplotlib Линия Matplotlib Метки Matplotlib Сетка Matplotlib Подсюжеты Matplotlib Матплотлиб Скаттер Бары Matplotlib Гистограммы Matplotlib Круговые диаграммы Matplotlib

Машинное обучение

Начиная Средняя медиана режима Среднеквадратичное отклонение Процентиль Распределение данных Нормальное распределение данных Точечная диаграмма Линейная регрессия Полиномиальная регрессия Множественная регрессия Масштаб Поезд/тест Древо решений

Python MySQL

Начать работу с MySQL MySQL Создать базу данных MySQL Создать таблицу Вставка MySQL Выбор MySQL MySQL Где Порядок MySQL MySQL Удалить Таблица удаления MySQL Обновление MySQL Лимит MySQL MySQL присоединиться

Python MongoDB

Начать работу с MongoDB MongoDB Создать базу данных MongoDB Создать коллекцию Вставка MongoDB MongoDB Найти Запрос MongoDB Сортировка MongoDB MongoDB Удалить Коллекция MongoDB Drop Обновление MongoDB Лимит MongoDB

Справочник по Python

Обзор Python Встроенные функции Python Строковые методы Python Методы списка Python Словарные методы Python Методы кортежей Python Методы набора Python Файловые методы Python Ключевые слова Python Исключения Python Глоссарий Python

Справочник по модулям

Случайный модуль Модуль запросов Модуль статистики Математический модуль cМатематический модуль

Python Как

Удалить дубликаты списка Перевернуть строку Добавить два числа

Примеры Python

Примеры Python Компилятор Python Упражнения на Python Питон Викторина Сертификат Python

Машинное обучение — дерево решений



Древо решений

В этой главе мы покажем вам, как составить «Дерево решений». Дерево решений — это блок-схема, которая может помочь вам принимать решения на основе предыдущего опыта.

В примере человек попытается решить, стоит ли ему идти на комедийное шоу или нет.

К счастью, человек из нашего примера регистрировался каждый раз, когда в городе проходило комедийное шоу, и регистрировал некоторую информацию о комике, а также регистрировался, пошел он или нет.

Возраст Опыт Классифицировать Национальность Идти
36 10 9 Соединенное Королевство НЕТ
42 12 4 США НЕТ
23 4 6 Н НЕТ
52 4 4 США НЕТ
43 21 8 США ДА
44 14 5 Соединенное Королевство НЕТ
66 3 7 Н ДА
35 14 9 Соединенное Королевство ДА
52 13 7 Н ДА
35 5 9 Н ДА
24 3 5 США НЕТ
18 3 7 Соединенное Королевство ДА
45 9 9 Соединенное Королевство ДА

Теперь, основываясь на этом наборе данных, Python может создать дерево решений, которое можно использовать для принятия решения о том, стоит ли посещать какие-либо новые шоу.



Как это работает?

Сначала импортируйте нужные вам модули и прочитайте набор данных с помощью pandas:

Пример

Прочитайте и распечатайте набор данных:

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

df = pandas.read_csv("shows.csv")

print(df)

Чтобы составить дерево решений, все данные должны быть числовыми.

Мы должны преобразовать нечисловые столбцы «Национальность» и «Идти» в числовые значения.

У Pandas есть map()метод, который берет словарь с информацией о том, как преобразовать значения.

{'UK': 0, 'USA': 1, 'N': 2}

Средства преобразуют значения «Великобритания» в 0, «США» в 1 и «N» в 2.

Пример

Измените строковые значения на числовые значения:

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)

print(df)

Затем мы должны отделить столбцы функций от целевого столбца.

Столбцы функций — это столбцы, которые мы пытаемся предсказать , а целевой столбец — это столбец со значениями, которые мы пытаемся предсказать.

Пример

Xэто столбцы функций, yэто целевой столбец:

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

Теперь мы можем создать фактическое дерево решений, подогнать его под наши детали и сохранить файл .png на компьютере:

Пример

Создайте дерево решений, сохраните его как изображение и покажите изображение:

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')

img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()


Объяснение результата

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

Давайте прочитаем различные аспекты дерева решений:

Классифицировать

Rank <= 6.5означает, что каждый комик с рангом 6,5 и ниже будет следовать за Trueстрелкой (влево), а остальные — за Falseстрелкой (вправо).

gini = 0.497 относится к качеству разделения и всегда представляет собой число от 0,0 до 0,5, где 0,0 означает, что все образцы получили одинаковый результат, а 0,5 означает, что разделение выполняется точно посередине.

samples = 13 означает, что на данный момент в решении осталось 13 комиков, то есть все они, поскольку это первый шаг.

value = [6, 7] означает, что из этих 13 комиков 6 получат «НЕТ», а 7 получат «ПРОДОЛЖЕНИЕ».

Джини

Есть много способов разделить образцы, в этом уроке мы используем метод GINI.

В методе Джини используется следующая формула:

Gini = 1 - (x/n)2 - (y/n)2

Где xколичество положительных ответов («GO»), nколичество выборок и yколичество отрицательных ответов («НЕТ»), что дает нам этот расчет:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

Следующий шаг содержит два ящика: один ящик для комиков с «Рангом» 6,5 или ниже и один ящик с остальными.

Правда - 5 комиков заканчиваются здесь:

gini = 0.0 означает, что все образцы получили одинаковый результат.

samples = 5 означает, что в этой ветке осталось 5 юмористов (5 комиков с рангом 6,5 и ниже).

value = [5, 0] означает, что 5 получит «НЕТ», а 0 получит «ПРОДОЛЖЕНИЕ».

Ложь - 8 комиков Продолжение:

Национальность

Nationality <= 0.5 означает, что комики со значением национальности менее 0,5 будут следовать за стрелкой влево (это означает, что все из Великобритании), а остальные будут следовать за стрелкой вправо.

gini = 0.219 означает, что около 22% выборок будут идти в одном направлении.

samples = 8 означает, что в этой ветке осталось 8 юмористов (8 комиков с рангом выше 6,5).

value = [1, 7] означает, что из этих 8 комиков 1 получит «НЕТ», а 7 получат «ПРОДОЛЖЕНИЕ».




Правда - 4 Юмориста Продолжение:

Возраст

Age <= 35.5 означает, что комики в возрасте 35,5 лет и младше будут следовать за стрелкой влево, а остальные - за стрелкой вправо.

gini = 0.375 означает, что около 37,5 % проб пойдет в одном направлении.

samples = 4 означает, что в этой ветке осталось 4 комика (4 комика из Великобритании).

value = [1, 3] означает, что из этих 4 комиков 1 получит "НЕТ", а 3 - "ДА".

Ложь - 4 комика заканчиваются здесь:

gini = 0.0 означает, что все образцы получили одинаковый результат.

samples = 4 означает, что в этой ветке осталось 4 комика (4 комика не из Великобритании).

value = [0, 4] означает, что из этих 4 комиков 0 получит «НЕТ», а 4 получат «ПРОДОЛЖЕНИЕ».




Правда - 2 комика заканчиваются здесь:

gini = 0.0 означает, что все образцы получили одинаковый результат.

samples = 2 означает, что в этой ветке осталось 2 комика (2 комика в возрасте 35,5 лет и младше).

value = [0, 2] означает, что из этих 2 комиков 0 получит «НЕТ», а 2 получат «ПРОДОЛЖЕНИЕ».

Ложь - 2 Юмористы Продолжают:

Опыт

Experience <= 9.5 означает, что юмористы со стажем 9,5 лет и менее будут следовать за стрелкой влево, а остальные - за стрелкой вправо.

gini = 0.5 означает, что 50% выборок будут идти в одном направлении.

samples = 2 означает, что в этой ветке осталось 2 юмориста (2 комика старше 35,5 лет).

value = [1, 1] означает, что из этих двух комиков 1 получит «НЕТ», а 1 получит «ПРОДОЛЖЕНИЕ».




Правда - 1 комик заканчивается здесь:

gini = 0.0 означает, что все образцы получили одинаковый результат.

samples = 1 означает, что в этой ветке остался 1 юморист (1 юморист со стажем 9,5 лет и менее).

value = [0, 1] означает, что 0 получит «НЕТ», а 1 получит «ПРОДОЛЖЕНИЕ».

Ложь - 1 комик заканчивается здесь:

gini = 0.0 означает, что все образцы получили одинаковый результат.

samples = 1 означает, что в этой ветке остался 1 юморист (1 юморист со стажем более 9,5 лет).

value = [1, 0] означает, что 1 получит «НЕТ», а 0 получит «ПРОДОЛЖЕНИЕ».


Предсказать значения

Мы можем использовать дерево решений для прогнозирования новых значений.

Пример: стоит ли мне пойти на шоу с участием 40-летнего американского комика с 10-летним стажем и рейтингом комедий 7?

Пример

Используйте метод predict() для прогнозирования новых значений:

print(dtree.predict([[40, 10, 7, 1]]))

Пример

Каким был бы ответ, если бы ранг комедии был 6?

print(dtree.predict([[40, 10, 6, 1]]))


Разные результаты

Вы увидите, что дерево решений дает разные результаты, если вы запускаете его достаточное количество раз, даже если вы вводите в него одни и те же данные.

Это потому, что дерево решений не дает нам стопроцентно определенного ответа. Он основан на вероятности исхода, и ответ будет разным.