49.95K
AI

Practical_Work_3_Iris_ML_FULL_black_text

1.

Практическая работа №3
Основы ИИ • CSE8802
Классификация набора Iris
Сравнение Decision Tree и Naive Bayes
Google Colab • Python • Scikit-learn
1

2.

Цель и задачи работы
Цель: обучить два классификатора на наборе Iris, оценить их качество и сравнить
результаты.
1. Подключить библиотеки и подготовить среду.
2. Загрузить Iris и изучить признаки и классы.
3. Разделить данные на обучающую и тестовую выборки.
4. Обучить Decision Tree и получить прогнозы.
5. Обучить Gaussian Naive Bayes и сравнить Accuracy.
6. Проанализировать confusion matrix и количество ошибок.
2

3.

Шаг 1. Подключение библиотек
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay
print("Библиотеки подключены")
Задание 1 — ответ
Scikit-learn используется для реализации алгоритмов
машинного обучения и оценки моделей.
Matplotlib — для визуализации и графиков.
Pandas — для работы с таблицами. Iris загружается из
sklearn.
3

4.

Шаг 2. Загрузка и изучение Iris
data = load_iris()
X = pd.DataFrame(
data.data,
columns=data.feature_names
)
y = data.target
display(X.head())
print("Размер таблицы:", X.shape)
print("Признаки:", list(X.columns))
print("Классы:", list(data.target_names))
print("Количество объектов:", X.shape[0])
Задание 2 — ответ
150 объектов и 4 признака.
X содержит длину/ширину чашелистика и лепестка. y
содержит правильные классы.
0 — setosa, 1 — versicolor, 2 — virginica.
Модель должна определить вид ириса по его
признакам.
4

5.

Шаг 3. Разделение данных 70/30
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.30, random_state=42, stratify=y
)
print("Размер X_train:", X_train.shape)
print("Размер X_test:", X_test.shape)
Задание 3 — ответ
Данные делятся на обучение и независимое
тестирование.
test_size=0.30:
• 70% = 105 объектов — обучение;
• 30% = 45 объектов — тест.
random_state=42 фиксирует разбиение, stratify=y
сохраняет пропорции классов.
5

6.

Шаг 4. Decision Tree: обучение и прогноз
tree_model = DecisionTreeClassifier(max_depth=3, random_state=42)
tree_model.fit(X_train, y_train)
y_pred_tree = tree_model.predict(X_test)
accuracy_tree = accuracy_score(y_test, y_pred_tree)
print(f"Accuracy Decision Tree: {accuracy_tree:.3f}")
Задание 4 — ответ
fit() обучает модель и ищет закономерности между
X_train и y_train.
predict() применяет выученные правила к X_test.
Accuracy Decision Tree = 0.978 (97.8% правильных
прогнозов).
max_depth=3 ограничивает глубину дерева и помогает
уменьшить риск переобучения.
6

7.

Шаг 4. Визуализация Decision Tree
plt.figure(figsize=(15, 7))
plot_tree(
tree_model,
feature_names=data.feature_names,
class_names=data.target_names,
filled=True,
rounded=True
)
plt.title("Decision Tree для набора Iris")
plt.show()
Как читать дерево
Корневой узел содержит первое условие разделения.
В корневом узле используется petal width (cm) —
ширина лепестка.
По ветвям объекты проходят в зависимости от
условий. Листья содержат конечные классы и
распределение объектов.
Дерево удобно интерпретировать: видно, по каким
правилам принимается решение.
7

8.

Шаг 5. Gaussian Naive Bayes
nb_model = GaussianNB()
nb_model.fit(X_train, y_train)
y_pred_nb = nb_model.predict(X_test)
accuracy_nb = accuracy_score(y_test, y_pred_nb)
print(f"Accuracy Naive Bayes: {accuracy_nb:.3f}")
Задание 5 — ответ
GaussianNB() создаёт классификатор Naive Bayes.
fit() обучает его на X_train и y_train. predict() получает
прогнозы для X_test.
Accuracy Naive Bayes = 0.911 (91.1%).
Decision Tree точнее: 0.978 против 0.911.
8

9.

Шаг 6. Confusion Matrix
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
Задание 6 — часть 1
ConfusionMatrixDisplay(
confusion_matrix(y_test, y_pred_tree),
display_labels=data.target_names
).plot(ax=axes[0], colorbar=False)
axes[0].set_title("Decision Tree")
Главная диагональ confusion matrix содержит
правильные предсказания по каждому классу.
ConfusionMatrixDisplay(
confusion_matrix(y_test, y_pred_nb),
display_labels=data.target_names
).plot(ax=axes[1], colorbar=False)
axes[1].set_title("Naive Bayes")
plt.tight_layout()
plt.show()
Ячейки вне диагонали — ошибки, когда один класс
принят за другой.
Матрица показывает не только общее качество, но и
то, какие классы модель путает.
9

10.

Шаг 6. Подсчёт ошибок
errors_tree = (y_test != y_pred_tree).sum()
errors_nb = (y_test != y_pred_nb).sum()
print("Количество ошибок Decision Tree:", errors_tree)
print("Количество ошибок Naive Bayes:", errors_nb)
if errors_tree < errors_nb:
print("Меньше ошибок допустила модель: Decision Tree")
elif errors_nb < errors_tree:
print("Меньше ошибок допустила модель: Naive Bayes")
else:
print("Модели допустили одинаковое количество ошибок")
Задание 6 — часть 2
Decision Tree — 1 ошибка.
Naive Bayes — 4 ошибки.
Следовательно, Decision Tree допустило меньше
ошибок.
Это согласуется с Accuracy: при одинаковой тестовой
выборке больше правильных прогнозов означает
меньше ошибок.
10

11.

Итоговое сравнение моделей
Результаты на тестовой выборке:
Model
Accuracy
Errors
Decision Tree
0.978
1
Naive Bayes
0.911
4
Вывод: Decision Tree имеет более высокую Accuracy и меньше ошибок.
11

12.

Контрольные вопросы 1–5
1. Зачем делить данные на train и test?
Чтобы обучить модель на одной части данных и объективно проверить её на
ранее неиспользованных объектах.
2. Что делает fit()?
Обучает модель: подбирает закономерности/параметры по признакам и
правильным ответам обучающей выборки.
3. Что делает predict()?
Предсказывает классы новых объектов на основе уже выученной моделью
зависимости.
4. Что показывает accuracy?
Долю правильных предсказаний среди всех предсказаний.
5. Что показывает confusion matrix?
Количество правильных и ошибочных предсказаний отдельно по каждому
классу.
12

13.

Контрольные вопросы 6–10
6. Разница между X_train и X_test?
X_train — признаки для обучения; X_test — признаки для независимого
тестирования.
7. Какие три класса Iris?
0 — setosa, 1 — versicolor, 2 — virginica.
8. Зачем нужен max_depth?
Ограничивает глубину дерева, помогает предотвращать переобучение и
делает модель понятнее.
9. Что означают числа на главной диагонали?
Количество объектов каждого класса, которые модель классифицировала
правильно.
10. Как сравнивать два классификатора?
По Accuracy, количеству ошибок и confusion matrix; здесь лучше Decision
Tree.
13

14.

Итоговый вывод
В работе рассмотрен полный цикл классификации:
1) подключение библиотек;
2) загрузка и анализ Iris;
3) разделение train/test;
4) обучение Decision Tree;
5) обучение Gaussian Naive Bayes;
6) оценка Accuracy и confusion matrix.
Результаты:
• Decision Tree — Accuracy 0.978, 1 ошибка;
• Naive Bayes — Accuracy 0.911, 4 ошибки.
Следовательно, на данной тестовой выборке Decision Tree показал лучший результат.
Для защиты: модель обучается на train, проверяется на test, затем качество сравнивается по
метрикам.
14
English     Русский Правила