Деревья решений SkLearn: пошаговое руководство
Scikit-learn — это модуль Python, который используется в реализациях машинного обучения. Он распространяется в соответствии с пунктом 3 BSD и построен на основе SciPy. Реализация Python обеспечивает согласованный интерфейс и предоставляет надежные инструменты машинного обучения и статистического моделирования, такие как регрессия, SciPy, NumPy и т. д. Эти инструменты являются основой пакета SkLearn и в основном созданы с использованием Python.
В этой статье мы узнаем все о деревьях решений Sklearn.
Пошаговое внедрение деревьев решений Sklearn
Прежде чем приступить к кодированию для реализации деревьев решений, нам необходимо собрать данные в правильном формате для построения дерева решений. Мы будем использовать набор данных iris из баз данных наборов данных sklearn, который относительно прост и демонстрирует, как построить классификатор дерева решений.
Преимущество древовидного классификатора Scikit-Decision Learn заключается в том, что целевая переменная может быть числовой или классифицированной. Учитывая набор данных ирисов, мы сохраним категориальную природу цветов для ясности.
Давайте теперь посмотрим, как мы можем реализовать деревья решений.
Импорт набора данных
импортировать панд как pd
импортировать numpy как np
из sklearn.datasets импортируйте load_iris
данные = load_iris()
#конвертировать в фрейм данных
df = pd.DataFrame(data.data, columns = data.feature_names)
#создаем столбец видов
df('Виды') = data.target
#замените это настоящими именами
цель = np.unique(data.target)
target_names = np.unique(data.target_names)
цели = dict(zip(target, target_names))
df('Виды') = df('Виды').replace(цели)
Следующий шаг будет использоваться для извлечения наших наборов данных для тестирования и обучения. Цель состоит в том, чтобы гарантировать, что модель не будет обучена на всех заданных данных, что позволит нам наблюдать, как она работает с данными, которые раньше не наблюдались. Если мы будем использовать все данные в качестве обучающих данных, мы рискуем переобучить модель, а это означает, что она будет плохо работать на неизвестных данных.
Извлечение наборов данных
x = df.drop(columns=”Виды”)
y = df(“Виды”)
Feature_names = x.columns
метки = y.unique()
#разделить набор данных
из sklearn.model_selection импорт train_test_split
X_train, test_x, y_train, test_lab = train_test_split(x,y,
test_size = 0,4,
случайное_состояние = 42)
Теперь, когда у нас есть данные в правильном формате, мы построим дерево решений, чтобы предугадать, как будут классифицироваться различные цветы. Первым шагом является импорт пакета DecisionTreeClassifier из библиотеки sklearn.
Импорт классификатора дерева решений
из sklearn.tree импортировать DecisionTreeClassifier
На следующем этапе нам нужно применить это к обучающим данным. Для этой цели классификатор инициализируется clf с максимальной глубиной = 3 и случайным состоянием = 42. Аргумент максимальной глубины управляет максимальной глубиной дерева. Мы используем это, чтобы гарантировать отсутствие переобучения и просто видеть, как был получен конечный результат. Параметр случайного состояния гарантирует повторяемость результатов в последующих исследованиях. Теперь мы адаптируем алгоритм к обучающим данным.
Поднимите свои навыки специалиста по данным на новый уровень с помощью магистерской программы Data Scientist от IBMExplore Programme
Подгонка алгоритма к обучающим данным
clf = DecisionTreeClassifier (max_глубина = 3, случайное_состояние = 42)
clf.fit(X_train, y_train)
Мы хотим иметь возможность понять, как работает алгоритм, и одним из преимуществ использования классификатора дерева решений является то, что выходные данные легко понять и визуализировать.
Проверка алгоритмов
Мы можем сделать это, используя следующие два способа:
- В виде древовидной диаграммы
- В виде текстовой диаграммы
Давайте теперь посмотрим на их детальную реализацию:
1. В виде древовидной диаграммы
из дерева импорта sklearn
импортировать matplotlib.pyplot как plt
plt.figure(figsize=(30,10), facecolor ='k')
а = Tree.plot_tree(clf,
имена_функций = имена_функций,
имена_классов = метки,
округлено = Истина,
заполнено = Истина,
размер шрифта = 14)
plt.show()
2. В виде текстовой диаграммы
из sklearn.tree импортировать экспорт_текста
Tree_rules = Export_text(clf,
Feature_names = список (feature_names))
печать (tree_rules)
Выход
|— Длина Лепесткасм
| |— класс: Ирис-шелковистый
|— PetalLengthCm > 2.45
| |— Ширина Лепесткасм
| | |— Длина Лепесткасм
| | | |— класс: Ирис разноцветный
| | |— PetalLengthCm > 5.35
| | | |— класс: Ирис виргинский
| |— PetalWidthCm > 1.75
| | |— Длина Лепесткасм
| | | |— класс: Ирис виргинский
| | |— PetalLengthCm > 4.85
| | | |— класс: Ирис виргинский
Первое подразделение основано на длине лепестка: растения размером менее 2,45 см классифицируются как Iris-setosa, а те, что больше, — как Iris-virginica. Для всех тех, у кого длина лепестков превышает 2,45, происходит дальнейшее разделение, за которым следуют еще два разделения для получения более точной окончательной классификации.
Здесь нас интересует не только то, насколько хорошо он сработал на обучающих данных, но и насколько хорошо он работает на неизвестных тестовых данных. Это означает, что нам нужно будет использовать его для прогнозирования класса на основе результатов теста, что мы и сделаем с помощью метода прогнозирования ().
Прогнозирование класса на основе тестовых значений
test_pred_decision_tree = clf.predict(test_x)
Нас беспокоят ложноотрицательные результаты (прогнозированные ложные, но на самом деле истинные), истинные положительные результаты (прогнозированные истинные и на самом деле истинные), ложноположительные (прогнозированные истинные, но на самом деле не истинные) и истинно негативные (предсказанные ложные и на самом деле ложные).
Одним из подходов к этому является изучение результатов в матрице путаницы. Матрица путаницы позволяет нам увидеть, как совпадают прогнозируемые и истинные метки, отображая фактические значения на одной оси и ожидаемые значения на другой. Это полезно для определения того, где мы можем получить ложноотрицательные или отрицательные результаты и насколько хорошо работает алгоритм.
из показателей импорта sklearn
импортировать seaborn как sns
импортировать matplotlib.pyplot как plt
путаница_матрица = metrics.confusion_matrix(test_lab,
test_pred_decision_tree)
матрица_df = pd.DataFrame(confusion_matrix)
топор = plt.axes()
sns.set(font_scale=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(“True Label”, fontsize=15)
ax.set_yticklabels(список(метки), вращение = 0)
plt.show()
В приведенном выше выводе только одно значение из класса Iris-versicolor не удалось спрогнозировать на основе невидимых данных. Это указывает на то, что этот алгоритм в целом хорошо справился с прогнозированием невидимых данных.