Деревья решений SkLearn: пошаговое руководство
Scikit-learn — это модуль Python, который используется в реализациях машинного обучения. Он распространяется в соответствии с BSD 3-clause и построен на основе SciPy. Реализация Python обеспечивает согласованный интерфейс и предоставляет надежные инструменты машинного обучения и статистического моделирования, такие как регрессия, SciPy, NumPy и т. д. Эти инструменты являются основой пакета SkLearn и в основном построены с использованием Python.
В этой статье мы узнаем все о деревьях решений Sklearn.
Пошаговая реализация деревьев решений Sklearn
Прежде чем приступить к кодированию для реализации деревьев решений, нам нужно собрать данные в правильном формате для построения дерева решений. Мы будем использовать набор данных iris из баз данных наборов данных sklearn, который относительно прост и демонстрирует, как построить классификатор дерева решений.
Преимущество Scikit-Decision Learn's Tree Classifier заключается в том, что целевая переменная может быть как числовой, так и категоризированной. Учитывая набор данных ирисов, мы сохраним категориальную природу цветов для ясности.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Давайте теперь посмотрим, как можно реализовать деревья решений.
Импорт набора данных
импортировать панды как pd
импортировать numpy как np
из sklearn.datasets импортировать load_iris
данные = load_iris()
#конвертировать в фрейм данных
df = pd.DataFrame(данные.данные, столбцы = данные.имена_объектов)
#создать столбец видов
df('Виды') = данные.цель
#замените это реальными именами
цель = np.уникальный(данные.цель)
target_names = np.unique(data.target_names)
цели = dict(zip(цель, имена_целей))
df('Виды') = df('Виды').replace(цели)
Следующий шаг будет использован для извлечения наших тестовых и обучающих наборов данных. Цель состоит в том, чтобы гарантировать, что модель не обучается на всех данных, что позволит нам наблюдать, как она работает на данных, которые ранее не встречались. Если мы используем все данные в качестве обучающих данных, мы рискуем переобучить модель, то есть она будет плохо работать на неизвестных данных.
Извлечение наборов данных
x = df.drop(columns=”Виды”)
y = df(“Виды”)
feature_names = x.столбцы
метки = y.unique()
#разделить набор данных
из sklearn.model_selection импорт train_test_split
X_train, test_x, y_train, test_lab = train_test_split(x,y,
размер_теста = 0,4,
случайное_состояние = 42)
Теперь, когда у нас есть данные в правильном формате, мы построим дерево решений, чтобы предвидеть, как будут классифицированы различные цветы. Первым шагом является импорт пакета DecisionTreeClassifier из библиотеки sklearn.
Импорт классификатора дерева решений
из sklearn.tree импорт DecisionTreeClassifier
В рамках следующего шага нам нужно применить это к обучающим данным. Для этой цели классификатор инициализируется в clf с максимальной глубиной = 3 и случайным состоянием = 42. Аргумент максимальной глубины управляет максимальной глубиной дерева. Мы используем это, чтобы гарантировать, что не будет переобучения, и что мы можем просто увидеть, как был получен конечный результат. Параметр случайного состояния гарантирует, что результаты будут повторяемыми в последующих исследованиях. Теперь мы подгоним алгоритм к обучающим данным.
Станьте специалистом по обработке данных с помощью практического обучения!Программа магистратуры для специалистов по обработке данныхИзучить программу
Подгонка алгоритма к обучающим данным
clf = DecisionTreeClassifier(макс_глубина =3, случайное_состояние = 42)
clf.fit(X_train, y_train)
Мы хотим понять, как работает алгоритм, и одним из преимуществ использования классификатора на основе дерева решений является то, что выходные данные легко понять и визуализировать.
Проверка алгоритмов
Это можно сделать двумя способами:
- В виде древовидной диаграммы
- В виде текстовой диаграммы
Давайте теперь рассмотрим подробную реализацию этих идей:
1. В виде древовидной диаграммы
из дерева импорта sklearn
импортировать matplotlib.pyplot как plt
plt.figure(figsize=(30,10), facecolor ='k')
а = дерево.plot_tree(clf,
имена_функций = имена_функций,
class_names = метки,
округлено = Правда,
заполнено = Истина,
размер шрифта = 14)
plt.show()
2. Как текстовая диаграмма
из sklearn.tree импорт экспорт_текст
tree_rules = экспорт_текста(clf,
feature_names = список(feature_names))
печать(дерево_правил)
Выход
|— ДлинаЛепесткаСм <= 2.45
| |— класс: Ирис-шелковистый
|— ДлинаЛепесткаСм > 2.45
| |— Ширина лепестка см <= 1,75
| | |— ДлинаЛепесткаСм <= 5.35
| | | |— класс: Iris-versicolor
| | |— ДлинаЛепесткаСм > 5.35
| | | |— класс: Iris-virginica
| |— Ширина лепестка см > 1,75
| | |— ДлинаЛепесткаСм <= 4.85
| | | |— класс: Iris-virginica
| | |— ДлинаЛепесткаСм > 4.85
| | | |— класс: Iris-virginica
Первое разделение основано на длине лепестка: те, что меньше 2,45 см, классифицируются как Iris-setosa, а те, что больше, как Iris-virginica. Для всех тех, у кого длина лепестка больше 2,45, происходит дальнейшее разделение, за которым следуют еще два разделения для получения более точной окончательной классификации.
Здесь нас интересует не только то, насколько хорошо он справился с тренировочными данными, но и то, насколько хорошо он работает с неизвестными тестовыми данными. Это подразумевает, что нам нужно будет использовать его для прогнозирования класса на основе результатов теста, что мы и сделаем с помощью метода predict().
Предсказать класс по тестовым значениям
test_pred_decision_tree = clf.predict(test_x)
Нас беспокоят ложноотрицательные результаты (предсказанные ложные, но на самом деле истинные), истинноположительные результаты (предсказанные истинные и на самом деле истинные), ложноположительные результаты (предсказанные истинные, но на самом деле не истинные) и истинноотрицательные результаты (предсказанные ложные и на самом деле ложные).
Одним из подходов к этому является изучение результатов в матрице путаницы. Матрица путаницы позволяет нам увидеть, как совпадают предсказанные и истинные метки, отображая фактические значения на одной оси и ожидаемые значения на другой. Это полезно для определения того, где мы можем получить ложные отрицательные или отрицательные результаты и насколько хорошо сработал алгоритм.
из sklearn импортировать метрики
импортировать seaborn как sns
импортировать matplotlib.pyplot как plt
матрица_замешательства = метрики.матрица_замешательства(тестовая_лаборатория,
тестовое_дерево_предварительного_решения)
matrix_df = pd.DataFrame(матрица_смешения)
ax = plt.оси()
sns.set(масштаб шрифта=1.3)
plt.figure(figsize=(10,7))
sns.heatmap(matrix_df, annot=True, fmt=”g”, ax=ax, cmap=”magma”)
ax.set_title('Матрица путаницы – Дерево решений')
ax.set_xlabel(“Прогнозируемая метка”, размер шрифта =15)
ax.set_xticklabels(('')+метки)
ax.set_ylabel(“Истинная метка”, размер шрифта=15)
ax.set_yticklabels(список(метки), вращение = 0)
plt.show()
В выходных данных выше только одно значение из класса Iris-versicolor не удалось предсказать по невидимым данным. Это говорит о том, что этот алгоритм хорошо справился с предсказанием невидимых данных в целом.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)