Нам понадобятся некоторые базовые библиотеки для обработки и визуализации данных, такие как pandas, NumPy и matplotlib. Нам также понадобится sklearn для некоторых вспомогательных функций, таких как train_test_split и precision_score. И, конечно же, нам понадобится сам LightGBM.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn
from sklearn.model_selection import train_test_split, KFold
from sklearn.metrics import accuracy_score
import lightgbm as lgb
import warnings
warnings.filterwarnings('ignore')
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'

Шаг 2: Загрузите и подготовьте данные

В этом уроке я буду использовать знаменитый набор данных Iris из библиотеки Seaborn, который содержит 150 образцов трех разных видов цветков ириса, а также четыре характеристики: длина чашелистика, ширина чашелистика, длина лепестка, и ширина лепестка. Наша цель — создать классификатор, который сможет предсказать виднового цветка на основе этих признаков.

Набор данных Iris является одним из наиболее широко используемых наборов данных в машинном обучении, потому что он прост, но сложен. Он был введен британским статистиком и биологом Рональдом Фишером в 1936 году как пример линейного дискриминантного анализа. Набор данных также известен как набор данных Fisher’s Iris или набор данных Anderson’s Iris.

Мы можем загрузить данные с помощью pandas, а затем разделить их на X (функции) и y (метки). Мы также преобразуем метки из строк в целые числа, поскольку LightGBM ожидает числовые значения.

df = sns.load_dataset('iris')
X = df.drop('species', axis=1)
y = df['species'].map({'setosa': 0, 'versicolor': 1, 'virginica': 2})

Шаг 3: Создайте и обучите модель LightGBM

Теперь самое интересное. Мы создадим объект классификатора LightGBM с некоторыми параметрами по умолчанию. Вы можете настроить эти параметры, чтобы оптимизировать производительность вашей модели, но пока мы будем придерживаться значений по умолчанию.

Мы также создадим объект Kfold с k = 10, что означает, что мы разделим данные на 10 кратностей. Затем мы пройдемся по каждой сгибке и используем одну складку в качестве проверочного набора, а остальные — в качестве тренировочного набора. Мы подгоним модель к тренировочному набору, а затем оценим ее на проверочном наборе, используя показатель точности. Мы также будем отслеживать баллы для каждой складки списка.

model = lgb.LGBMClassifier()
kf = KFold(n_splits=10)
scores = []
for train_index, val_index in kf.split(X):
    X_train, X_val = X.iloc[train_index], X.iloc[val_index]
    y_train, y_val = y.iloc[train_index], y.iloc[val_index]
    model.fit(X_train, y_train)
    y_pred = model.predict(X_val)
    score = accuracy_score(y_val, y_pred)
    scores.append(score)
    print(f'Fold {len(scores)}, Accuracy: {score:.4f}')

Шаг 4: Анализ результатов

После запуска приведенного выше кода мы должны увидеть что-то вроде этого:

Сгиб 1, точность: 1,0000

Сгиб 2, точность: 1,0000

Сгиб 3, точность: 1,0000

Сгиб 4, точность: 1,0000

Fold 5, Точность: 0,8667

Fold 6, Точность: 0,8667

Сгиб 7, точность: 1,0000

Fold 8, Точность: 0,8667

Фолд 9, точность: 0,7333

Fold 10, Точность: 0,9333

Мы видим, что модель достигла высокой точности на каждой складке, от 73% до 100%. Мы также можем рассчитать среднее значение и стандартное отклонение оценок, чтобы получить сводную информацию о производительности.

mean_score = np.mean(scores)
std_score = np.std(scores)
print(f'Mean accuracy: {mean_score:.4f}, Standard deviation: {std_score:.4f}')
Mean accuracy: 0.9267, Standard deviation: 0.0867

Кроме того, мы видим, что средняя точность очень близка к 93%, что впечатляет для такой простой модели. Стандартное отклонение также низкое (0,0867), что означает, что модель постоянна для разных складок.

Мы также можем построить оценки, используя matplotlib, чтобы визуализировать распределение.

plt.figure(figsize=(8,6))
plt.bar(range(1,11), scores)
plt.xlabel('Fold')
plt.ylabel('Accuracy')
plt.title('Kfold cross validation results for LightGBM Classifier');

Мы видим, что оценки в основном сгруппированы вокруг 0,93. Это говорит о том, что модель устойчива и надежна и может хорошо обрабатывать различные подмножества данных.

Вот и все! Мы успешно использовали перекрестную проверку Kfold для классификатора LightGBM в наборе данных Iris. Надеюсь, вам понравился этот урок и вы узнали что-то новое. Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии ниже. Спасибо за прочтение!

Рекомендации