Skip to content

Проект демонстрирует применение алгоритма k-ближайших соседей (KNN) для классификации набора данных Iris. Включает загрузку данных, обучение модели, оценку производительности и визуализацию результатов с использованием библиотек Pandas, Scikit-learn, Matplotlib, Seaborn и Plotly.

License

Notifications You must be signed in to change notification settings

MindlessMuse666/iris-knn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KNN-классификация датасэта Ирисов Фишера MIT-License image

1. Описание проекта

Данный проект выполнен в рамках дисциплины "МДК 13.01 Основы применения методов искусственного интеллекта в программировании".

Практическое занятие №9

Тема: Метод k ближайших соседей (KNN) - алгоритм ленивого обучения

В этом проекте реализован алгоритм KNN для классификации набора данных Iris (Ирисы Фишера). Этот набор данных широко используется в задачах машинного обучения для демонстрации алгоритмов классификации. Мы загрузили данные, обучили модель KNN, оценили её производительность и визуализировали результаты.

Целью работы было изучение и применение метода KNN для решения задачи классификации, а также анализ и визуализация результатов с использованием различных библиотек Python.

2. Скриншоты выполненного задания и конспекта лекции

2.1. Скриншоты выполненного задания

2.1.1. Основной скрипт main.py

main.py

2.1.2. Скрипт загрузки данных data_loader.py

data_loader.py

2.1.3. Скрипт обучения и предсказания с использованием KNN knn_model.py

knn_model.py

2.1.4. Скрипт расчета метрик оценки модели metrics.py

metrics.py

2.1.5. Скрипт визуализации результатов knn_model.py

visualization.py

2.2. Конспект лекции

lecture-notes-1.jpg lecture-notes-2.jpg lecture-notes-3.jpg

3. Методика и подходы

3.1. Методы

В данном проекте были использованы следующие методы:

  • Загрузка данных: Использовалась функция load_iris из библиотеки scikit-learn для загрузки набора данных Iris.
  • Разделение данных: Данные были разделены на обучающую и тестовую выборки с помощью функции train_test_split из scikit-learn.
  • Обучение модели: Модель KNN была обучена на обучающей выборке с использованием метода fit.
  • Предсказание классов: Классы для тестовой выборки были предсказаны с использованием метода predict.
  • Оценка результатов: Производительность модели была оценена с использованием метрик accuracy, precision, recall и F1-score, а также с использованием кросс-валидации.
  • Визуализация результатов: Результаты были визуализированы с использованием библиотек Matplotlib, Seaborn и Plotly.

3.2. Алгоритмы

  • KNN (k-Nearest Neighbors): Алгоритм классификации, основанный на принципе близости. Класс нового экземпляра данных определяется на основе классов k ближайших соседей.
  • Алгоритмы построения графиков и диаграмм из библиотек Matplotlib, Seaborn и Plotly.

3.3. Подходы

  • Объектно-ориентированное программирование (ООП): Проект был разработан с использованием принципов ООП. Основные компоненты проекта (загрузка данных, обучение модели, оценка метрик, визуализация) реализованы в виде отдельных классов.
  • Принципы SOLID, KISS и DRY: При разработке кода старались следовать принципам SOLID, KISS и DRY для обеспечения модульности, читаемости и переиспользуемости кода.

3.4. Допущения и ограничения

  • Набор данных Iris считается относительно простым для классификации.
  • Параметры модели KNN (количество соседей, алгоритм поиска) были выбраны без проведения тщательной оптимизации.
  • Визуализация границ решений строится только для первых двух признаков.

3.5. Инструменты, библиотеки и технологии

  • Python: Основной язык программирования.
  • Pandas: Для работы с данными в формате DataFrame.
  • Scikit-learn: Для загрузки данных, разделения на обучающую и тестовую выборки, обучения модели KNN и оценки её производительности.
  • Matplotlib: Для построения базовых графиков и диаграмм.
  • Seaborn: Для улучшения визуализации данных и создания более информативных графиков.
  • Plotly: Для создания интерактивных графиков.

4. Результаты

4.1. Краткое описание данных

  • Источник данных: scikit-learn (набор данных встроен в библиотеку).
  • Формат данных: Массив NumPy.
  • Описание набора данных: Набор данных Iris содержит информацию о 150 экземплярах ирисов, каждый из которых характеризуется четырьмя признаками: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Каждый экземпляр относится к одному из трех классов: Iris setosa, Iris versicolor или Iris virginica.

4.2. Предварительная обработка данных

  • Данные были разделены на признаки (X) и целевую переменную (y).
  • Данные были разделены на обучающую и тестовую выборки с использованием функции train_test_split из scikit-learn.
  • Масштабирование данных не производилось, так как алгоритм KNN не очень чувствителен к масштабу признаков.

4.3. Графики и диаграммы

4.3.1. График предсказанных и истинных значений: отображает предсказанные классы и истинные классы для тестовой выборки

predictions_vs_actual

4.3.2. Pairplot (Plotly): визуализирует взаимосвязи между всеми парами признаков

pairplot

4.3.3. Границы решений KNN: визуализирует границы решений, построенные алгоритмом KNN.

decision_boundaries

5. Анализ результатов

Метрики, использованные для оценки результатов:

  • 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)

console_output

6. Выводы

В результате выполнения проекта была успешно реализована классификация набора данных Iris с использованием алгоритма KNN. Метрики, полученные на тестовой выборке, показывают идеальную точность, полноту и F1-меру, что может указывать на переобучение модели или слишком простую задачу. Однако, результаты кросс-валидации показывают более реалистичную оценку точности (около 96.7%) с некоторым разбросом (стандартное отклонение около 4.5%). Это подтверждает, что модель хорошо обобщается на новые данные, но не является идеально точной.

7. Обсуждение возможных улучшений

  • Провести более тщательную оптимизацию параметров модели KNN (количество соседей, алгоритм поиска).
  • Использовать другие алгоритмы классификации и сравнить их производительность с KNN.
  • Применить методы регуляризации для борьбы с переобучением.
  • Расширить набор данных, добавив новые признаки или экземпляры.
  • Рассмотреть возможность использования более сложных методов оценки модели, таких как кривые обучения.

8. Заключение

В ходе выполнения данной практической работы были получены навыки применения метода KNN для решения задачи классификации, а также навыки анализа и визуализации результатов с использованием различных библиотек Python.

9. Лицензия

Этот проект распространяется под лицензией MIT - смотрите файл LICENSE для деталей.

10. Автор

Бедин Владислав (MindlessMuse666)

About

Проект демонстрирует применение алгоритма k-ближайших соседей (KNN) для классификации набора данных Iris. Включает загрузку данных, обучение модели, оценку производительности и визуализацию результатов с использованием библиотек Pandas, Scikit-learn, Matplotlib, Seaborn и Plotly.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages