Данный проект выполнен в рамках дисциплины "МДК 13.01 Основы применения методов искусственного интеллекта в программировании".
Практическое занятие №9
Тема: Метод k ближайших соседей (KNN) - алгоритм ленивого обучения
В этом проекте реализован алгоритм KNN для классификации набора данных Iris (Ирисы Фишера). Этот набор данных широко используется в задачах машинного обучения для демонстрации алгоритмов классификации. Мы загрузили данные, обучили модель KNN, оценили её производительность и визуализировали результаты.
Целью работы было изучение и применение метода KNN для решения задачи классификации, а также анализ и визуализация результатов с использованием различных библиотек Python.
2.1.1. Основной скрипт main.py
2.1.2. Скрипт загрузки данных data_loader.py
2.1.3. Скрипт обучения и предсказания с использованием KNN knn_model.py
2.1.4. Скрипт расчета метрик оценки модели metrics.py
2.1.5. Скрипт визуализации результатов knn_model.py
В данном проекте были использованы следующие методы:
- Загрузка данных: Использовалась функция load_iris из библиотеки scikit-learn для загрузки набора данных Iris.
- Разделение данных: Данные были разделены на обучающую и тестовую выборки с помощью функции train_test_split из scikit-learn.
- Обучение модели: Модель KNN была обучена на обучающей выборке с использованием метода fit.
- Предсказание классов: Классы для тестовой выборки были предсказаны с использованием метода predict.
- Оценка результатов: Производительность модели была оценена с использованием метрик accuracy, precision, recall и F1-score, а также с использованием кросс-валидации.
- Визуализация результатов: Результаты были визуализированы с использованием библиотек Matplotlib, Seaborn и Plotly.
- KNN (k-Nearest Neighbors): Алгоритм классификации, основанный на принципе близости. Класс нового экземпляра данных определяется на основе классов k ближайших соседей.
- Алгоритмы построения графиков и диаграмм из библиотек Matplotlib, Seaborn и Plotly.
- Объектно-ориентированное программирование (ООП): Проект был разработан с использованием принципов ООП. Основные компоненты проекта (загрузка данных, обучение модели, оценка метрик, визуализация) реализованы в виде отдельных классов.
- Принципы SOLID, KISS и DRY: При разработке кода старались следовать принципам SOLID, KISS и DRY для обеспечения модульности, читаемости и переиспользуемости кода.
- Набор данных Iris считается относительно простым для классификации.
- Параметры модели KNN (количество соседей, алгоритм поиска) были выбраны без проведения тщательной оптимизации.
- Визуализация границ решений строится только для первых двух признаков.
- Python: Основной язык программирования.
- Pandas: Для работы с данными в формате DataFrame.
- Scikit-learn: Для загрузки данных, разделения на обучающую и тестовую выборки, обучения модели KNN и оценки её производительности.
- Matplotlib: Для построения базовых графиков и диаграмм.
- Seaborn: Для улучшения визуализации данных и создания более информативных графиков.
- Plotly: Для создания интерактивных графиков.
- Источник данных: scikit-learn (набор данных встроен в библиотеку).
- Формат данных: Массив NumPy.
- Описание набора данных: Набор данных Iris содержит информацию о 150 экземплярах ирисов, каждый из которых характеризуется четырьмя признаками: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Каждый экземпляр относится к одному из трех классов: Iris setosa, Iris versicolor или Iris virginica.
- Данные были разделены на признаки (X) и целевую переменную (y).
- Данные были разделены на обучающую и тестовую выборки с использованием функции
train_test_split
из scikit-learn. - Масштабирование данных не производилось, так как алгоритм KNN не очень чувствителен к масштабу признаков.
4.3.1. График предсказанных и истинных значений: отображает предсказанные классы и истинные классы для тестовой выборки
Метрики, использованные для оценки результатов:
- Accuracy (точность): Доля правильно классифицированных экземпляров.
- Precision (точность): Доля правильно предсказанных положительных экземпляров среди всех экземпляров, которые были предсказаны как положительные.
- Recall (полнота): Доля правильно предсказанных положительных экземпляров среди всех фактических положительных экземпляров.
- F1-score: Среднее гармоническое между точностью и полнотой.
- Кросс-валидация (accuracy): Оценка точности модели на основе 10-кратной кросс-валидации.
Метрики оценки (на тестовой выборке):
- accuracy:
1.0
- precision:
1.0
- recall:
1.0
- f1_score:
1.0
Кросс-валидация (accuracy): 0.9666666666666668 (+/- 0.04472135954999579)
В результате выполнения проекта была успешно реализована классификация набора данных Iris с использованием алгоритма KNN. Метрики, полученные на тестовой выборке, показывают идеальную точность, полноту и F1-меру, что может указывать на переобучение модели или слишком простую задачу. Однако, результаты кросс-валидации показывают более реалистичную оценку точности (около 96.7%) с некоторым разбросом (стандартное отклонение около 4.5%). Это подтверждает, что модель хорошо обобщается на новые данные, но не является идеально точной.
- Провести более тщательную оптимизацию параметров модели KNN (количество соседей, алгоритм поиска).
- Использовать другие алгоритмы классификации и сравнить их производительность с KNN.
- Применить методы регуляризации для борьбы с переобучением.
- Расширить набор данных, добавив новые признаки или экземпляры.
- Рассмотреть возможность использования более сложных методов оценки модели, таких как кривые обучения.
В ходе выполнения данной практической работы были получены навыки применения метода KNN для решения задачи классификации, а также навыки анализа и визуализации результатов с использованием различных библиотек Python.
Этот проект распространяется под лицензией MIT - смотрите файл LICENSE для деталей.
Бедин Владислав (MindlessMuse666)
- GitHub: MindlessMuse666
- Telegram: @mindless_muse
- Gmail: mindlessmuse.666@gmail.com