Нам понадобятся некоторые базовые библиотеки для обработки и визуализации данных, такие как 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. Надеюсь, вам понравился этот урок и вы узнали что-то новое. Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии ниже. Спасибо за прочтение!