05.12: Готов отчёт по лр 3

main
Ogarkov Ilya 2 дней назад
Родитель 31c70b9a1b
Сommit d346cd7d64

@ -4,95 +4,100 @@ import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.decomposition import PCA
# ============================
# 1. ЗАГРУЗКА ДАННЫХ
# 1. Загрузка данных
# ============================
iris = load_iris()
X = iris.data
y = iris.target
print("Размерность данных:", X.shape)
# ============================
# 2. РАЗБИЕНИЕ НА ОБУЧАЮЩУЮ И ТЕСТОВУЮ ВЫБОРКИ
# ============================
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
print("Размер обучающей выборки:", X_train.shape)
print("Размер тестовой выборки:", X_test.shape)
# ============================
# 3. КЛАССИФИКАТОР (ПО УМОЛЧАНИЮ)
# ============================
classifier = LogisticRegression(max_iter=1000)
# ============================
# 4. КРОСС-ВАЛИДАЦИЯ (5-FOLD)
# ============================
cv_scores = cross_val_score(classifier, X_train, y_train, cv=5)
print("\nТочность на фолдах:", cv_scores)
print("Средняя точность по кросс-валидации:", np.mean(cv_scores))
# ============================
# 5. ОБУЧЕНИЕ
# ============================
classifier.fit(X_train, y_train)
# ============================
# 6. ПРЕДСКАЗАНИЕ
# 2. Добавление шума
# ============================
y_pred = classifier.predict(X_test)
np.random.seed(42)
noise = np.random.normal(0, 0.5, X.shape) # среднее 0, стандартное отклонение 0.5
X_noisy = X + noise
# ============================
# 7. МЕТРИКИ КАЧЕСТВА
# 3. Разделение на обучающую и тестовую выборки
# ============================
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average="macro")
recall = recall_score(y_test, y_pred, average="macro")
f1 = f1_score(y_test, y_pred, average="macro")
print("\nМЕТРИКИ КАЧЕСТВА:")
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1-score:", f1)
X_train, X_test, y_train, y_test = train_test_split(
X_noisy, y, test_size=0.3, random_state=42
)
# ============================
# 8. СНИЖЕНИЕ РАЗМЕРНОСТИ ДЛЯ ВИЗУАЛИЗАЦИИ (PCA)
# 4. Снижение размерности для визуализации
# ============================
pca = PCA(n_components=2)
X_test_2d = pca.fit_transform(X_test)
# ============================
# 9. ГРАФИК 1 — ИСТИННЫЕ МЕТКИ
# ============================
plt.figure()
plt.scatter(X_test_2d[:, 0], X_test_2d[:, 1])
plt.title("Тестовая выборка с ИСТИННЫМИ метками")
plt.xlabel("Компонента 1")
plt.ylabel("Компонента 2")
plt.grid(True)
plt.savefig("test_true_labels.png", dpi=300)
plt.show()
# ============================
# 10. ГРАФИК 2 — ПРЕДСКАЗАННЫЕ МЕТКИ
# ============================
plt.figure()
plt.scatter(X_test_2d[:, 0], X_test_2d[:, 1])
plt.title("Тестовая выборка с ПРЕДСКАЗАННЫМИ метками")
plt.xlabel("Компонента 1")
plt.ylabel("Компонента 2")
plt.grid(True)
plt.savefig("test_predicted_labels.png", dpi=300)
plt.show()
print("\nГрафики сохранены:")
print("test_true_labels.png")
print("test_predicted_labels.png")
X_train_2d = pca.fit_transform(X_train)
X_test_2d = pca.transform(X_test)
# ============================
# 5. Список классификаторов
# ============================
classifiers = {
"Logistic Regression": LogisticRegression(max_iter=1000),
"Decision Tree": DecisionTreeClassifier(),
"K-Nearest Neighbors": KNeighborsClassifier()
}
# ============================
# 6. Обучение, кросс-валидация и метрики
# ============================
for name, clf in classifiers.items():
print(f"\n=== {name} ===")
# Кросс-валидация на обучающей выборке
cv_scores = cross_val_score(clf, X_train, y_train, cv=5)
print("Точность на фолдах:", cv_scores)
print("Средняя точность по кросс-валидации:", np.mean(cv_scores))
# Обучение на всей обучающей выборке
clf.fit(X_train, y_train)
# Предсказание на тестовой выборке
y_pred = clf.predict(X_test)
# Метрики качества
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average="macro")
recall = recall_score(y_test, y_pred, average="macro")
f1 = f1_score(y_test, y_pred, average="macro")
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1-score:", f1)
# ============================
# Визуализация
# ============================
plt.figure(figsize=(12, 5))
# 1) Истинные метки
plt.subplot(1, 2, 1)
for i, color in zip(range(3), ['red', 'green', 'blue']):
plt.scatter(X_test_2d[y_test==i, 0], X_test_2d[y_test==i, 1], c=color, label=iris.target_names[i])
plt.title(f"{name} — Истинные метки")
plt.xlabel("Компонента 1")
plt.ylabel("Компонента 2")
plt.legend()
plt.grid(True)
# 2) Предсказанные метки
plt.subplot(1, 2, 2)
for i, color in zip(range(3), ['red', 'green', 'blue']):
plt.scatter(X_test_2d[y_pred==i, 0], X_test_2d[y_pred==i, 1], c=color, label=iris.target_names[i])
plt.title(f"{name} — Предсказанные метки")
plt.xlabel("Компонента 1")
plt.ylabel("Компонента 2")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

@ -104,3 +104,4 @@ print("\nГрафики сохранены:")
print("4_true_labels.png")
print("4_pred_labels_p2.png")
print("4_pred_labels_p4.png")

Двоичные данные
ИАД/lr3/4_pred_labels_p2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 78 KiB

Двоичные данные
ИАД/lr3/4_pred_labels_p4.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 84 KiB

Двоичные данные
ИАД/lr3/4_true_labels.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 74 KiB

@ -0,0 +1,95 @@
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.decomposition import PCA
# ============================
# 1. Загрузка данных
# ============================
wine = load_wine()
X = wine.data
y = wine.target
print("Размерность данных:", X.shape)
# ============================
# 2. Стандартизация признаков
# ============================
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# ============================
# 3. Разделение на обучающую и тестовую выборки
# ============================
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.3, random_state=42, stratify=y
)
print("Размер обучающей выборки:", X_train.shape)
print("Размер тестовой выборки:", X_test.shape)
# ============================
# 4. Классификаторы (3 выбранных)
# ============================
classifiers = {
"Logistic Regression": LogisticRegression(max_iter=1000),
"Naive Bayes": GaussianNB(),
"Decision Tree": DecisionTreeClassifier(random_state=42)
}
# ============================
# 5. Обучение, кросс-валидация и метрики
# ============================
for name, clf in classifiers.items():
print(f"\n=== {name} ===")
# Кросс-валидация
cv_scores = cross_val_score(clf, X_train, y_train, cv=5)
print("Точность на фолдах:", cv_scores)
print("Средняя точность по кросс-валидации:", np.mean(cv_scores))
# Обучение на всей обучающей выборке
clf.fit(X_train, y_train)
# Предсказание на тестовой выборке
y_pred = clf.predict(X_test)
# Метрики качества
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average="macro")
recall = recall_score(y_test, y_pred, average="macro")
f1 = f1_score(y_test, y_pred, average="macro")
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1-score:", f1)
# ============================
# 6. Визуализация (PCA 2D)
# ============================
pca = PCA(n_components=2)
X_test_2d = pca.fit_transform(X_test)
# График с истинными метками
plt.figure()
plt.scatter(X_test_2d[:, 0], X_test_2d[:, 1], c=y_test, cmap='viridis', edgecolor='k')
plt.title(f"{name} - истинные метки")
plt.xlabel("Компонента 1")
plt.ylabel("Компонента 2")
plt.grid(True)
plt.show()
# График с предсказанными метками
plt.figure()
plt.scatter(X_test_2d[:, 0], X_test_2d[:, 1], c=y_pred, cmap='viridis', edgecolor='k')
plt.title(f"{name} - предсказанные метки")
plt.xlabel("Компонента 1")
plt.ylabel("Компонента 2")
plt.grid(True)
plt.show()

Двоичные данные
ИАД/lr3/best_model.pkl

Двоичный файл не отображается.

Двоичные данные
ИАД/lr3/отчёт.docx (Хранится Git LFS)

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить