https://github.com/mindlessmuse666/iris-ml-based-on-decision-trees
Проект демонстрирует применение моделей машинного обучения на основе деревьев решений и случайного леса для классификации набора данных Iris. Включает в себя загрузку данных, обучение моделей, оценку производительности и визуализацию результатов. Предназначен для изучения основ машинного обучения и анализа данных.
https://github.com/mindlessmuse666/iris-ml-based-on-decision-trees
classification data-analysis data-visualization decision-trees iris-dataset machine-learning model-evaluation python random-forest scikit-learn
Last synced: 8 months ago
JSON representation
Проект демонстрирует применение моделей машинного обучения на основе деревьев решений и случайного леса для классификации набора данных Iris. Включает в себя загрузку данных, обучение моделей, оценку производительности и визуализацию результатов. Предназначен для изучения основ машинного обучения и анализа данных.
- Host: GitHub
- URL: https://github.com/mindlessmuse666/iris-ml-based-on-decision-trees
- Owner: MindlessMuse666
- License: mit
- Created: 2025-03-01T07:15:22.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-01T17:15:03.000Z (over 1 year ago)
- Last Synced: 2025-05-20T07:13:21.375Z (about 1 year ago)
- Topics: classification, data-analysis, data-visualization, decision-trees, iris-dataset, machine-learning, model-evaluation, python, random-forest, scikit-learn
- Language: Python
- Homepage:
- Size: 569 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Обучение модели Ирисов Фишера на основе деревьев принятия решений 
## 1. Описание проекта
**Проект по дисциплине:** МДК 13.01 Основы применения методов искусственного интеллекта в программировании.
**Практическое занятие №8:** Обучение моделей на основе деревьев принятия решений. Объединение множества деревьев с помощью случайных лесов.
В рамках работы была исследована задача классификации набора данных Iris с использованием моделей деревьев принятия решений и случайного леса. Произведено обучение моделей, оценка их производительности и анализ важности признаков. Использовались библиотеки *Pandas* для обработки данных, *Scikit-learn* для обучения моделей машинного обучения, *Matplotlib* и *Seaborn* для визуализации данных и результатов.
**Цель работы:** изучение и применение на практике методов машинного обучения на основе деревьев решений, а также сравнение их эффективности с другими подходами.
## 2. Скриншоты выполненного задания и конспекта лекции
### 2.1. Скриншоты выполненного задания
#### 2.1.1. Основной скрипт [main.py](src/main.py)
#### 2.1.2. Скрипт загрузки данных [data_loader.py](src/utils/data_loader.py)
#### 2.1.3. Скрипт визуализации данных [data_visualizer.py](src/visualization/data_visualizer.py)
#### 2.1.4. Модель дерева принятия решений [decision_tree.py](src/models/decision_tree.py)
#### 2.1.5. Модель K-Nearest Neighbors (KNN) [knn.py](src/models/knn.py)
#### 2.1.6. Модель случайного леса [random_forest.py](src/models/random_forest.py)
### 2.2. Конспект лекции
## 3. Методика и подходы
### 3.1. Методы
* **Загрузка данных:** Использован метод load_iris из библиотеки Scikit-learn для загрузки набора данных Iris.
* **Разделение данных:** Данные разделены на обучающую и тестовую выборки с использованием функции train_test_split.
* **Обучение модели дерева решений:** Модель DecisionTreeClassifier обучена на обучающей выборке.
* **Обучение модели случайного леса:** Модель RandomForestClassifier обучена на обучающей выборке с использованием различных гиперпараметров.
* **Оценка результатов:** Произведена оценка производительности моделей с использованием метрик accuracy, precision и recall.
* **Визуализация:** Данные и результаты визуализированы с использованием библиотек Matplotlib и Seaborn.
### 3.2. Алгоритмы
* **Дерево принятия решений:** Алгоритм построения дерева решений с использованием критериев Gini и entropy.
* **Случайный лес:** Алгоритм построения ансамбля деревьев решений с использованием случайного выбора признаков и данных.
### 3.3. Подходы
**Принципы KISS и DRY:** Предприняты попытки следовать принципам KISS и DRY для упрощения и переиспользования кода.
### 3.4. Допущения и ограничения
* Набор данных Iris считается достаточно простым, и результаты могут не отражать производительность моделей на более сложных данных.
* Гиперпараметры моделей не оптимизировались с использованием сложных методов (например, grid search).
### 3.5. Инструменты, библиотеки и технологии
* Python
* Pandas
* Scikit-learn
* Matplotlib
* Seaborn
## 4. Результаты
### 4.1. Краткое описание данных
* **Источник данных:** `load_iris` из библиотеки Scikit-learn.
* **Формат данных:** Набор данных, представленный в виде массива NumPy.
* **Описание набора данных:** Набор данных Iris содержит измерения четырех признаков (длина и ширина чашелистика и лепестка) для трех видов ирисов (setosa, versicolor и virginica).
### 4.2. Предварительная обработка данных
* Разделение данных на признаки (X) и целевую переменную (y).
* Разделение данных на обучающую и тестовую выборки с использованием `train_test_split`.
* Масштабирование признаков (StandardScaler или MinMaxScaler) (указать, если использовалось).
### 4.3. Графики и диаграммы
#### 4.3.1. Дерево решений
#### 4.3.2. График важности признаков
## 5. Анализ результатов
### 5.1. Результаты обучения дерева решений
Метрики на тестовой выборке:
* Accuracy: `1.0`
* Precision: `1.0`
* Recall: `1.0`
* F1: `1.0`
Результаты кросс-валидации:
* Accuracy: `0.9333333333333333`
* Precision: `0.9386243386243386`
* Recall: `0.9333333333333333`
* F1: `0.9330770769846399`

### 5.2. Результаты обучения случайного леса
Метрики на тестовой выборке:
* Accuracy: `1.0`
* Precision: `1.0`
* Recall: `1.0`
* F1: `1.0`
Результаты кросс-валидации:
* Accuracy: `0.9428571428571428`
* Precision: `0.9493386243386244`
* Recall: `0.9428571428571428`
* F1: `0.9425520464596093`

### 5.3. Результаты обучения KNN
Метрики на тестовой выборке:
* Accuracy: `1.0`
* Precision: `1.0`
* Recall: `1.0`
* F1: `1.0`
Результаты кросс-валидации:
* Accuracy: `0.9428571428571428`
* Precision: `0.9531481481481482`
* Recall: `0.9428571428571428`
* F1: `0.942022945930509`

## 6. Выводы
Все три модели (Decision Tree, Random Forest и KNN) показали высокую эффективность на тестовой выборке, достигнув идеальных значений метрик accuracy, precision, recall и F1-score. Это свидетельствует о хорошей способности моделей к классификации на данном наборе данных.
Результаты кросс-валидации выявили небольшие различия между моделями. Модели Random Forest и KNN продемонстрировали незначительно более высокую обобщающую способность по сравнению с одиночным деревом решений, что может указывать на их лучшую устойчивость к переобучению на данном наборе данных. KNN показал себя немного точнее и полнее.
В целом, все три модели оказались эффективными для решения задачи классификации ирисов, однако модели Random Forest и KNN продемонстрировали небольшое преимущество в обобщающей способности, что делает их потенциально более надежными для использования на новых, ранее не виденных данных.
## 7. Обсуждение возможных улучшений
* Для улучшения результатов можно попробовать использовать другие модели машинного обучения, оптимизировать гиперпараметры моделей с использованием grid search.
* Провести более детальный анализ данных для выявления дополнительных признаков.
## 8. Заключение
В ходе выполнения данной работы были изучены и применены на практике методы машинного обучения на основе деревьев решений и случайных лесов. Получены навыки работы с библиотеками Pandas, Scikit-learn, Matplotlib и Seaborn. Проведено сравнение эффективности различных моделей и анализ важности признаков.
## 9. Лицензия
Этот проект распространяется под лицензией MIT - смотрите файл [LICENSE](LICENSE) для деталей.
## 10. Автор
Бедин Владислав ([MindlessMuse666](https://github.com/MindlessMuse666))
* GitHub: [MindlessMuse666](https://github.com/MindlessMuse666 "Владислав: https://github.com/MindlessMuse666")
* Telegram: [@mindless_muse](t.me/mindless_muse)
* Gmail: [mindlessmuse.666@gmail.com](mindlessmuse.666@gmail.com)