{"id":28262921,"url":"https://github.com/mindlessmuse666/iris-knn","last_synced_at":"2025-08-17T16:40:34.352Z","repository":{"id":280288105,"uuid":"941500802","full_name":"MindlessMuse666/iris-knn","owner":"MindlessMuse666","description":"Проект демонстрирует применение алгоритма k-ближайших соседей (KNN) для классификации набора данных Iris. Включает загрузку данных, обучение модели, оценку производительности и визуализацию результатов с использованием библиотек Pandas, Scikit-learn, Matplotlib, Seaborn и Plotly.","archived":false,"fork":false,"pushed_at":"2025-03-02T16:17:25.000Z","size":877,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-20T07:13:14.507Z","etag":null,"topics":["algorithm","classification","data-analysis","data-visualization","iris-dataset","knn","lazy-learning","machine-learning","python","scikit-learn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MindlessMuse666.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-02T12:54:27.000Z","updated_at":"2025-03-02T16:17:28.000Z","dependencies_parsed_at":"2025-03-02T14:44:27.508Z","dependency_job_id":null,"html_url":"https://github.com/MindlessMuse666/iris-knn","commit_stats":null,"previous_names":["mindlessmuse666/iris-knn"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MindlessMuse666/iris-knn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-knn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-knn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-knn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-knn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MindlessMuse666","download_url":"https://codeload.github.com/MindlessMuse666/iris-knn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-knn/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260175676,"owners_count":22970027,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm","classification","data-analysis","data-visualization","iris-dataset","knn","lazy-learning","machine-learning","python","scikit-learn"],"created_at":"2025-05-20T07:13:15.181Z","updated_at":"2025-06-16T14:31:02.128Z","avatar_url":"https://github.com/MindlessMuse666.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# KNN-классификация датасэта Ирисов Фишера \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"MIT-License image\"\u003e\u003c/a\u003e\n\n## 1. Описание проекта\n\nДанный проект выполнен в рамках дисциплины \"МДК 13.01 Основы применения методов искусственного интеллекта в программировании\".\n\n**Практическое занятие №9**\n\n**Тема:** Метод k ближайших соседей (KNN) - алгоритм ленивого обучения\n\nВ этом проекте реализован алгоритм KNN для классификации набора данных Iris (Ирисы Фишера). Этот набор данных широко используется в задачах машинного обучения для демонстрации алгоритмов классификации. Мы загрузили данные, обучили модель KNN, оценили её производительность и визуализировали результаты.\n\nЦелью работы было изучение и применение метода KNN для решения задачи классификации, а также анализ и визуализация результатов с использованием различных библиотек Python.\n\n## 2. Скриншоты выполненного задания и конспекта лекции\n\n### 2.1. Скриншоты выполненного задания\n\n#### 2.1.1. Основной скрипт [main.py](src/main.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/89174305-aaab-473d-bd4b-8c58e7560234\" alt=\"main.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.2. Скрипт загрузки данных [data_loader.py](src/data_loader.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/a89d2b4c-dd77-4714-bc1a-4e26bb27e1d1\" alt=\"data_loader.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.3. Скрипт обучения и предсказания с использованием KNN [knn_model.py](src/knn_model.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/e05a9044-0f2e-40c7-8d05-fd3d261523a2\" alt=\"knn_model.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.4. Скрипт расчета метрик оценки модели [metrics.py](src/metrics.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/5373d464-5d78-477d-9074-a493192fdaf8\" alt=\"metrics.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.5. Скрипт визуализации результатов [knn_model.py](src/visualization.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/4907dc65-5d26-4526-ba34-764dafed76b2\" alt=\"visualization.py\"\u003e\n\u003c/p\u003e\n\n### 2.2. Конспект лекции\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\lecture-notes\\lecture-notes-1.jpg\" alt=\"lecture-notes-1.jpg\"\u003e\n  \u003cimg src=\"report\\lecture-notes\\lecture-notes-2.jpg\" alt=\"lecture-notes-2.jpg\"\u003e\n  \u003cimg src=\"report\\lecture-notes\\lecture-notes-3.jpg\" alt=\"lecture-notes-3.jpg\"\u003e\n\u003c/p\u003e\n\n## 3. Методика и подходы\n\n### 3.1. Методы\nВ данном проекте были использованы следующие методы:\n\n* **Загрузка данных:** Использовалась функция load_iris из библиотеки scikit-learn для загрузки набора данных Iris.\n* **Разделение данных:** Данные были разделены на обучающую и тестовую выборки с помощью функции train_test_split из scikit-learn.\n* **Обучение модели:** Модель KNN была обучена на обучающей выборке с использованием метода fit.\n* **Предсказание классов:** Классы для тестовой выборки были предсказаны с использованием метода predict.\n* **Оценка результатов:** Производительность модели была оценена с использованием метрик accuracy, precision, recall и F1-score, а также с использованием кросс-валидации.\n* **Визуализация результатов:** Результаты были визуализированы с использованием библиотек Matplotlib, Seaborn и Plotly.\n\n### 3.2. Алгоритмы\n\n* **KNN (k-Nearest Neighbors):** Алгоритм классификации, основанный на принципе близости. Класс нового экземпляра данных определяется на основе классов k ближайших соседей.\n* **Алгоритмы** построения графиков и диаграмм из библиотек Matplotlib, Seaborn и Plotly.\n\n### 3.3. Подходы\n\n* **Объектно-ориентированное программирование (ООП):** Проект был разработан с использованием принципов ООП. Основные компоненты проекта (загрузка данных, обучение модели, оценка метрик, визуализация) реализованы в виде отдельных классов.\n* **Принципы SOLID, KISS и DRY:** При разработке кода старались следовать принципам SOLID, KISS и DRY для обеспечения модульности, читаемости и переиспользуемости кода.\n\n### 3.4. Допущения и ограничения\n\n* Набор данных Iris считается относительно простым для классификации.\n* Параметры модели KNN (количество соседей, алгоритм поиска) были выбраны без проведения тщательной оптимизации.\n* Визуализация границ решений строится только для первых двух признаков.\n\n### 3.5. Инструменты, библиотеки и технологии\n\n* **Python:** Основной язык программирования.\n* **Pandas:** Для работы с данными в формате DataFrame.\n* **Scikit-learn:** Для загрузки данных, разделения на обучающую и тестовую выборки, обучения модели KNN и оценки её производительности.\n* **Matplotlib:** Для построения базовых графиков и диаграмм.\n* **Seaborn:** Для улучшения визуализации данных и создания более информативных графиков.\n* **Plotly:** Для создания интерактивных графиков.\n\n## 4. Результаты\n\n### 4.1. Краткое описание данных\n\n* **Источник данных:** scikit-learn (набор данных встроен в библиотеку).\n* **Формат данных:** Массив NumPy.\n* **Описание набора данных:** Набор данных Iris содержит информацию о 150 экземплярах ирисов, каждый из которых характеризуется четырьмя признаками: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Каждый экземпляр относится к одному из трех классов: Iris setosa, Iris versicolor или Iris virginica.\n\n### 4.2. Предварительная обработка данных\n\n* Данные были разделены на признаки (X) и целевую переменную (y).\n* Данные были разделены на обучающую и тестовую выборки с использованием функции `train_test_split` из scikit-learn.\n* Масштабирование данных не производилось, так как алгоритм KNN не очень чувствителен к масштабу признаков.\n\n### 4.3. Графики и диаграммы\n\n#### 4.3.1. График предсказанных и истинных значений: отображает предсказанные классы и истинные классы для тестовой выборки\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\graphics\\predictions_vs_actual.png\" alt=\"predictions_vs_actual\"\u003e\n\u003c/p\u003e\n\n#### 4.3.2. Pairplot (Plotly): визуализирует взаимосвязи между всеми парами признаков\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\graphics\\iris_dataset_pairplot.png\" alt=\"pairplot\"\u003e\n\u003c/p\u003e\n\n#### 4.3.3. Границы решений KNN: визуализирует границы решений, построенные алгоритмом KNN.\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\graphics\\decision_boundaries.png\" alt=\"decision_boundaries\"\u003e\n\u003c/p\u003e\n\n## 5. Анализ результатов\nМетрики, использованные для оценки результатов:\n\n* **Accuracy (точность):** Доля правильно классифицированных экземпляров.\n* **Precision (точность):** Доля правильно предсказанных положительных экземпляров среди всех экземпляров, которые были предсказаны как положительные.\n* **Recall (полнота):** Доля правильно предсказанных положительных экземпляров среди всех фактических положительных экземпляров.\n* **F1-score:** Среднее гармоническое между точностью и полнотой.\n* **Кросс-валидация (accuracy):** Оценка точности модели на основе 10-кратной кросс-валидации.\n\nМетрики оценки (на тестовой выборке):\n* **accuracy:** `1.0`\n* **precision:** `1.0`\n* **recall:** `1.0`\n* **f1\\_score:** `1.0`\n\n**Кросс-валидация (accuracy):** `0.9666666666666668 (+/- 0.04472135954999579)`\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/297177ed-f8a4-44be-88f8-ce191f285517\" alt=\"console_output\"\u003e\n\u003c/p\u003e\n\n## 6. Выводы\n\nВ результате выполнения проекта была успешно реализована классификация набора данных Iris с использованием алгоритма KNN.  Метрики, полученные на тестовой выборке, показывают идеальную точность, полноту и F1-меру, что может указывать на переобучение модели или слишком простую задачу. Однако, результаты кросс-валидации показывают более реалистичную оценку точности (около 96.7%) с некоторым разбросом (стандартное отклонение около 4.5%). Это подтверждает, что модель хорошо обобщается на новые данные, но не является идеально точной.\n\n## 7. Обсуждение возможных улучшений\n\n* Провести более тщательную оптимизацию параметров модели KNN (количество соседей, алгоритм поиска).\n* Использовать другие алгоритмы классификации и сравнить их производительность с KNN.\n* Применить методы регуляризации для борьбы с переобучением.\n* Расширить набор данных, добавив новые признаки или экземпляры.\n* Рассмотреть возможность использования более сложных методов оценки модели, таких как кривые обучения.\n\n## 8. Заключение\n\nВ ходе выполнения данной практической работы были получены навыки применения метода KNN для решения задачи классификации, а также навыки анализа и визуализации результатов с использованием различных библиотек Python.\n\n## 9. Лицензия\n\nЭтот проект распространяется под лицензией MIT - смотрите файл [LICENSE](LICENSE) для деталей.\n\n## 10. Автор\n\nБедин Владислав ([MindlessMuse666](https://github.com/MindlessMuse666))\n\n* GitHub: [MindlessMuse666](https://github.com/MindlessMuse666 \"Владислав: https://github.com/MindlessMuse666\")\n* Telegram: [@mindless_muse](t.me/mindless_muse)\n* Gmail: [mindlessmuse.666@gmail.com](mindlessmuse.666@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindlessmuse666%2Firis-knn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmindlessmuse666%2Firis-knn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindlessmuse666%2Firis-knn/lists"}