{"id":28262954,"url":"https://github.com/mindlessmuse666/iris-ml-based-on-decision-trees","last_synced_at":"2025-10-17T09:43:05.718Z","repository":{"id":280146477,"uuid":"940975471","full_name":"MindlessMuse666/iris-ml-based-on-decision-trees","owner":"MindlessMuse666","description":"Проект демонстрирует применение моделей машинного обучения на основе деревьев решений и случайного леса для классификации набора данных Iris. Включает в себя загрузку данных, обучение моделей, оценку производительности и визуализацию результатов. Предназначен для изучения основ машинного обучения и анализа данных.","archived":false,"fork":false,"pushed_at":"2025-03-01T17:15:03.000Z","size":583,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-20T07:13:21.375Z","etag":null,"topics":["classification","data-analysis","data-visualization","decision-trees","iris-dataset","machine-learning","model-evaluation","python","random-forest","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-01T07:15:22.000Z","updated_at":"2025-03-01T17:17:20.000Z","dependencies_parsed_at":"2025-03-01T15:30:58.647Z","dependency_job_id":"7b505b74-bf46-4a1d-9a5d-d00f1746674f","html_url":"https://github.com/MindlessMuse666/iris-ml-based-on-decision-trees","commit_stats":null,"previous_names":["mindlessmuse666/iris-ml-based-on-decision-trees"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MindlessMuse666/iris-ml-based-on-decision-trees","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-ml-based-on-decision-trees","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-ml-based-on-decision-trees/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-ml-based-on-decision-trees/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-ml-based-on-decision-trees/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MindlessMuse666","download_url":"https://codeload.github.com/MindlessMuse666/iris-ml-based-on-decision-trees/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MindlessMuse666%2Firis-ml-based-on-decision-trees/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260481735,"owners_count":23015791,"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":["classification","data-analysis","data-visualization","decision-trees","iris-dataset","machine-learning","model-evaluation","python","random-forest","scikit-learn"],"created_at":"2025-05-20T07:13:18.247Z","updated_at":"2025-10-17T09:43:05.703Z","avatar_url":"https://github.com/MindlessMuse666.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Обучение модели Ирисов Фишера на основе деревьев принятия решений \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**Проект по дисциплине:** МДК 13.01 Основы применения методов искусственного интеллекта в программировании.\n\n**Практическое занятие №8:** Обучение моделей на основе деревьев принятия решений. Объединение множества деревьев с помощью случайных лесов.\n\nВ рамках работы была исследована задача классификации набора данных Iris с использованием моделей деревьев принятия решений и случайного леса. Произведено обучение моделей, оценка их производительности и анализ важности признаков. Использовались библиотеки *Pandas* для обработки данных, *Scikit-learn* для обучения моделей машинного обучения, *Matplotlib* и *Seaborn* для визуализации данных и результатов.\n\n**Цель работы:** изучение и применение на практике методов машинного обучения на основе деревьев решений, а также сравнение их эффективности с другими подходами.\n\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/11393e1d-edec-4987-a1d4-bda5e692a1dd\" alt=\"main.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.2. Скрипт загрузки данных [data_loader.py](src/utils/data_loader.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/6bf443d6-8f48-48b3-a74f-eb3208c5216e\" alt=\"data_loader.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.3. Скрипт визуализации данных [data_visualizer.py](src/visualization/data_visualizer.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/6a1220ba-2ae7-4c57-a64b-f0f58bfac5b8\" alt=\"data_visualizer.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.4. Модель дерева принятия решений [decision_tree.py](src/models/decision_tree.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/e721b12a-ed81-4908-bdd1-39c82f9b788e\" alt=\"src/models/decision_tree.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.5. Модель K-Nearest Neighbors (KNN) [knn.py](src/models/knn.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/80eebd54-9fea-47c5-904c-a182a1a63d07\" alt=\"src/models/knn.py\"\u003e\n\u003c/p\u003e\n\n#### 2.1.6. Модель случайного леса [random_forest.py](src/models/random_forest.py)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/9a7f5b17-8854-495a-8aca-568e07bd5624\" alt=\"src/models/random_forest.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\u003c/p\u003e\n\n## 3. Методика и подходы\n\n### 3.1. Методы\n\n* **Загрузка данных:** Использован метод load_iris из библиотеки Scikit-learn для загрузки набора данных Iris.\n* **Разделение данных:** Данные разделены на обучающую и тестовую выборки с использованием функции train_test_split.\n* **Обучение модели дерева решений:** Модель DecisionTreeClassifier обучена на обучающей выборке.\n* **Обучение модели случайного леса:** Модель RandomForestClassifier обучена на обучающей выборке с использованием различных гиперпараметров.\n* **Оценка результатов:** Произведена оценка производительности моделей с использованием метрик accuracy, precision и recall.\n* **Визуализация:** Данные и результаты визуализированы с использованием библиотек Matplotlib и Seaborn.\n\n### 3.2. Алгоритмы\n* **Дерево принятия решений:** Алгоритм построения дерева решений с использованием критериев Gini и entropy.\n* **Случайный лес:** Алгоритм построения ансамбля деревьев решений с использованием случайного выбора признаков и данных.\n\n### 3.3. Подходы\n\n**Принципы KISS и DRY:**  Предприняты попытки следовать принципам KISS и DRY для упрощения и переиспользования кода.\n\n### 3.4. Допущения и ограничения\n\n* Набор данных Iris считается достаточно простым, и результаты могут не отражать производительность моделей на более сложных данных.\n* Гиперпараметры моделей не оптимизировались с использованием сложных методов (например, grid search).\n\n### 3.5. Инструменты, библиотеки и технологии\n\n* Python\n* Pandas\n* Scikit-learn\n* Matplotlib\n* Seaborn\n\n## 4. Результаты\n\n### 4.1. Краткое описание данных\n\n* **Источник данных:** `load_iris` из библиотеки Scikit-learn.\n* **Формат данных:** Набор данных, представленный в виде массива NumPy.\n* **Описание набора данных:** Набор данных Iris содержит измерения четырех признаков (длина и ширина чашелистика и лепестка) для трех видов ирисов (setosa, versicolor и virginica).\n\n### 4.2. Предварительная обработка данных\n\n* Разделение данных на признаки (X) и целевую переменную (y).\n* Разделение данных на обучающую и тестовую выборки с использованием `train_test_split`.\n* Масштабирование признаков (StandardScaler или MinMaxScaler) (указать, если использовалось).\n\n### 4.3. Графики и диаграммы\n\n#### 4.3.1. Дерево решений\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\graphics\\decision_tree.dot.png\" alt=\"decision-tree\"\u003e\n\u003c/p\u003e\n\n#### 4.3.2. График важности признаков\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\graphics\\feature_importance.png\" alt=\"feature-importance\"\u003e\n\u003c/p\u003e\n\n## 5. Анализ результатов\n\n### 5.1. Результаты обучения дерева решений\n\nМетрики на тестовой выборке:\n* Accuracy: `1.0`\n* Precision: `1.0`\n* Recall: `1.0`\n* F1: `1.0`\n\nРезультаты кросс-валидации:\n* Accuracy: `0.9333333333333333`\n* Precision: `0.9386243386243386`\n* Recall: `0.9333333333333333`\n* F1: `0.9330770769846399`\n\n![image](https://github.com/user-attachments/assets/bf81dfda-68e1-4230-9580-f93ba8c803bc)\n\n### 5.2. Результаты обучения случайного леса\n\nМетрики на тестовой выборке:\n* Accuracy: `1.0`\n* Precision: `1.0`\n* Recall: `1.0`\n* F1: `1.0`\n\nРезультаты кросс-валидации:\n* Accuracy: `0.9428571428571428`\n* Precision: `0.9493386243386244`\n* Recall: `0.9428571428571428`\n* F1: `0.9425520464596093`\n\n![image](https://github.com/user-attachments/assets/1be280ac-5b9a-4f7d-8dd3-8090f6853cec)\n\n### 5.3. Результаты обучения KNN\n\nМетрики на тестовой выборке:\n* Accuracy: `1.0`\n* Precision: `1.0`\n* Recall: `1.0`\n* F1: `1.0`\n\nРезультаты кросс-валидации:\n* Accuracy: `0.9428571428571428`\n* Precision: `0.9531481481481482`\n* Recall: `0.9428571428571428`\n* F1: `0.942022945930509`\n\n![image](https://github.com/user-attachments/assets/20b2c170-12b7-467c-a097-8563f8cb78a5)\n\n## 6. Выводы\nВсе три модели (Decision Tree, Random Forest и KNN) показали высокую эффективность на тестовой выборке, достигнув идеальных значений метрик accuracy, precision, recall и F1-score. Это свидетельствует о хорошей способности моделей к классификации на данном наборе данных.\n\nРезультаты кросс-валидации выявили небольшие различия между моделями. Модели Random Forest и KNN продемонстрировали незначительно более высокую обобщающую способность по сравнению с одиночным деревом решений, что может указывать на их лучшую устойчивость к переобучению на данном наборе данных. KNN показал себя немного точнее и полнее.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"report\\graphics\\model_comparison_cv.png\" alt=\"model-comparison-cv\"\u003e\n\u003c/p\u003e\n\nВ целом, все три модели оказались эффективными для решения задачи классификации ирисов, однако модели Random Forest и KNN продемонстрировали небольшое преимущество в обобщающей способности, что делает их потенциально более надежными для использования на новых, ранее не виденных данных.\n\n## 7. Обсуждение возможных улучшений\n\n* Для улучшения результатов можно попробовать использовать другие модели машинного обучения, оптимизировать гиперпараметры моделей с использованием grid search.\n* Провести более детальный анализ данных для выявления дополнительных признаков.\n\n## 8. Заключение\n\nВ ходе выполнения данной работы были изучены и применены на практике методы машинного обучения на основе деревьев решений и случайных лесов. Получены навыки работы с библиотеками Pandas, Scikit-learn, Matplotlib и Seaborn. Проведено сравнение эффективности различных моделей и анализ важности признаков.\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-ml-based-on-decision-trees","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmindlessmuse666%2Firis-ml-based-on-decision-trees","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindlessmuse666%2Firis-ml-based-on-decision-trees/lists"}