diff --git a/ИАД/lr3/2.py b/ИАД/lr3/2.py index ff69d37..ce3a7b3 100644 --- a/ИАД/lr3/2.py +++ b/ИАД/lr3/2.py @@ -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. ОБУЧЕНИЕ +# 2. Добавление шума # ============================ -classifier.fit(X_train, y_train) +np.random.seed(42) +noise = np.random.normal(0, 0.5, X.shape) # среднее 0, стандартное отклонение 0.5 +X_noisy = X + noise # ============================ -# 6. ПРЕДСКАЗАНИЕ +# 3. Разделение на обучающую и тестовую выборки # ============================ -y_pred = classifier.predict(X_test) - -# ============================ -# 7. МЕТРИКИ КАЧЕСТВА -# ============================ -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() diff --git a/ИАД/lr3/4.py b/ИАД/lr3/4.py index f8b64b2..0688b49 100644 --- a/ИАД/lr3/4.py +++ b/ИАД/lr3/4.py @@ -104,3 +104,4 @@ print("\nГрафики сохранены:") print("4_true_labels.png") print("4_pred_labels_p2.png") print("4_pred_labels_p4.png") + diff --git a/ИАД/lr3/4_pred_labels_p2.png b/ИАД/lr3/4_pred_labels_p2.png new file mode 100644 index 0000000..a2ecd46 Binary files /dev/null and b/ИАД/lr3/4_pred_labels_p2.png differ diff --git a/ИАД/lr3/4_pred_labels_p4.png b/ИАД/lr3/4_pred_labels_p4.png new file mode 100644 index 0000000..913dcf3 Binary files /dev/null and b/ИАД/lr3/4_pred_labels_p4.png differ diff --git a/ИАД/lr3/4_true_labels.png b/ИАД/lr3/4_true_labels.png new file mode 100644 index 0000000..d8049c8 Binary files /dev/null and b/ИАД/lr3/4_true_labels.png differ diff --git a/ИАД/lr3/5.py b/ИАД/lr3/5.py new file mode 100644 index 0000000..dfbea8b --- /dev/null +++ b/ИАД/lr3/5.py @@ -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() + diff --git a/ИАД/lr3/best_model.pkl b/ИАД/lr3/best_model.pkl new file mode 100644 index 0000000..5df4d25 Binary files /dev/null and b/ИАД/lr3/best_model.pkl differ diff --git a/ИАД/lr3/отчёт.docx b/ИАД/lr3/отчёт.docx new file mode 100644 index 0000000..64cb7f9 --- /dev/null +++ b/ИАД/lr3/отчёт.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f4d44b58741e21c8ec69fa1de1706a8cf77959ab016f6310185f9db64f36148 +size 801558