diff --git a/ИАД/lr3/1.py b/ИАД/lr3/1.py new file mode 100644 index 0000000..bb0db02 --- /dev/null +++ b/ИАД/lr3/1.py @@ -0,0 +1,54 @@ +import numpy as np +import matplotlib.pyplot as plt +from sklearn.datasets import load_iris +from sklearn.decomposition import PCA +from sklearn.manifold import TSNE + +# ============================== +# ЗАГРУЗКА ДАННЫХ +# ============================== +iris = load_iris() +X = iris.data # признаки +y = iris.target # метки классов +classes = iris.target_names + +print("Размерность исходных данных:", X.shape) + +# ============================== +# PCA (Метод главных компонент) +# ============================== +pca = PCA(n_components=2) +X_pca = pca.fit_transform(X) + +print("Доля объяснённой дисперсии PCA:") +print(pca.explained_variance_ratio_) + +# ГРАФИК PCA +plt.figure() +plt.scatter(X_pca[:, 0], X_pca[:, 1]) +plt.title("Снижение размерности методом PCA") +plt.xlabel("Главная компонента 1") +plt.ylabel("Главная компонента 2") +plt.grid(True) +plt.savefig("pca_iris.png", dpi=300) +plt.show() + +# ============================== +# t-SNE +# ============================== +tsne = TSNE(n_components=2, perplexity=30, random_state=42) +X_tsne = tsne.fit_transform(X) + +# ГРАФИК t-SNE +plt.figure() +plt.scatter(X_tsne[:, 0], X_tsne[:, 1]) +plt.title("Снижение размерности методом t-SNE") +plt.xlabel("Компонента 1") +plt.ylabel("Компонента 2") +plt.grid(True) +plt.savefig("tsne_iris.png", dpi=300) +plt.show() + +print("Графики сохранены:") +print("pca_iris.png") +print("tsne_iris.png") diff --git a/ИАД/lr3/2.py b/ИАД/lr3/2.py new file mode 100644 index 0000000..ff69d37 --- /dev/null +++ b/ИАД/lr3/2.py @@ -0,0 +1,98 @@ +import numpy as np +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.metrics import accuracy_score, precision_score, recall_score, f1_score +from sklearn.decomposition import PCA + +# ============================ +# 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. ПРЕДСКАЗАНИЕ +# ============================ +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) + +# ============================ +# 8. СНИЖЕНИЕ РАЗМЕРНОСТИ ДЛЯ ВИЗУАЛИЗАЦИИ (PCA) +# ============================ +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") diff --git a/ИАД/lr3/3.py b/ИАД/lr3/3.py new file mode 100644 index 0000000..5f9bd9b --- /dev/null +++ b/ИАД/lr3/3.py @@ -0,0 +1,76 @@ +import numpy as np +import joblib + +from sklearn.datasets import load_iris +from sklearn.model_selection import train_test_split, GridSearchCV +from sklearn.linear_model import LogisticRegression +from sklearn.metrics import classification_report + +# ============================ +# 1. ЗАГРУЗКА ДАННЫХ +# ============================ +iris = load_iris() +X = iris.data +y = iris.target + +# ============================ +# 2. РАЗБИЕНИЕ НА ОБУЧАЮЩУЮ И ТЕСТОВУЮ ВЫБОРКИ +# ============================ +X_train, X_test, y_train, y_test = train_test_split( + X, y, test_size=0.3, random_state=42 +) + +# ============================ +# 3. КЛАССИФИКАТОР +# ============================ +model = LogisticRegression(max_iter=2000) + +# ============================ +# 4. СЕТКА ПАРАМЕТРОВ +# ============================ +param_grid = { + 'C': [0.01, 0.1, 1, 10, 100], + 'solver': ['lbfgs', 'liblinear'], + 'penalty': ['l2'] +} + +# ============================ +# 5. НАСТРОЙКА GridSearchCV +# ============================ +grid = GridSearchCV( + estimator=model, + param_grid=param_grid, + cv=5, + scoring='accuracy', + n_jobs=-1 +) + +# ============================ +# 6. ОБУЧЕНИЕ +# ============================ +grid.fit(X_train, y_train) + +# ============================ +# 7. ЛУЧШИЕ ПАРАМЕТРЫ +# ============================ +print("Лучшие параметры:") +print(grid.best_params_) + +print("\nЛучшая точность по кросс-валидации:") +print(grid.best_score_) + +# ============================ +# 8. ПРОВЕРКА НА ТЕСТЕ +# ============================ +best_model = grid.best_estimator_ +y_pred = best_model.predict(X_test) + +print("\nОтчёт по классификации:") +print(classification_report(y_test, y_pred)) + +# ============================ +# 9. СОХРАНЕНИЕ МОДЕЛИ +# ============================ +joblib.dump(best_model, "best_model.pkl") + +print("\nЛучшая модель сохранена в файл: best_model.pkl") diff --git a/ИАД/lr3/4.py b/ИАД/lr3/4.py new file mode 100644 index 0000000..f8b64b2 --- /dev/null +++ b/ИАД/lr3/4.py @@ -0,0 +1,106 @@ +import numpy as np +import matplotlib.pyplot as plt +import joblib + +from sklearn.datasets import load_iris +from sklearn.model_selection import train_test_split +from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score +from sklearn.decomposition import PCA + +# ============================ +# 1. ЗАГРУЗКА ДАННЫХ +# ============================ +iris = load_iris() +X = iris.data +y = iris.target + +# ============================ +# 2. РАЗБИЕНИЕ НА ОБУЧАЮЩУЮ И ТЕСТОВУЮ ВЫБОРКИ +# ============================ +X_train, X_test, y_train, y_test = train_test_split( + X, y, test_size=0.3, random_state=42 +) + +# ============================ +# 3. ЗАГРУЗКА ЛУЧШЕЙ МОДЕЛИ +# ============================ +model = joblib.load("best_model.pkl") +print("Модель загружена из файла best_model.pkl") + +# ============================ +# 4. ОБУЧЕНИЕ НА ТРЕНИРОВОЧНОЙ ВЫБОРКЕ +# ============================ +model.fit(X_train, y_train) + +# ============================ +# 5. ПРЕДСКАЗАНИЯ +# ============================ +y_pred = model.predict(X_test) + +# ============================ +# 6. МЕТРИКИ КАЧЕСТВА +# ============================ +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МЕТРИКИ КАЧЕСТВА (ПУНКТ 4):") +print("Accuracy:", accuracy) +print("Precision:", precision) +print("Recall:", recall) +print("F1-score:", f1) + +# ============================ +# 7. PCA ДЛЯ ВИЗУАЛИЗАЦИИ +# ============================ +pca = PCA(n_components=2) +X_test_2d = pca.fit_transform(X_test) + +# ============================ +# 8. ГРАФИК 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("4_true_labels.png", dpi=300) +plt.show() + +# ============================ +# 9. ГРАФИК 2 — МЕТКИ ИЗ ПУНКТА 2 (БЕЗ GridSearch) +# ============================ +# Их можно восстановить повторным обучением обычной LogisticRegression +from sklearn.linear_model import LogisticRegression + +base_model = LogisticRegression(max_iter=1000) +base_model.fit(X_train, y_train) +y_pred_base = base_model.predict(X_test) + +plt.figure() +plt.scatter(X_test_2d[:, 0], X_test_2d[:, 1]) +plt.title("Тестовая выборка — ПРЕДСКАЗАНИЯ (пункт 2)") +plt.xlabel("Компонента 1") +plt.ylabel("Компонента 2") +plt.grid(True) +plt.savefig("4_pred_labels_p2.png", dpi=300) +plt.show() + +# ============================ +# 10. ГРАФИК 3 — МЕТКИ ИЗ ПУНКТА 4 (ПОСЛЕ GridSearch) +# ============================ +plt.figure() +plt.scatter(X_test_2d[:, 0], X_test_2d[:, 1]) +plt.title("Тестовая выборка — ПРЕДСКАЗАНИЯ (пункт 4, после GridSearch)") +plt.xlabel("Компонента 1") +plt.ylabel("Компонента 2") +plt.grid(True) +plt.savefig("4_pred_labels_p4.png", dpi=300) +plt.show() + +print("\nГрафики сохранены:") +print("4_true_labels.png") +print("4_pred_labels_p2.png") +print("4_pred_labels_p4.png") diff --git a/ТАУ/~$чет_ЛР3_бригада_1.docx b/ТАУ/~$чет_ЛР3_бригада_1.docx deleted file mode 100644 index e6f6c59..0000000 --- a/ТАУ/~$чет_ЛР3_бригада_1.docx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:94cfd66665d13250ab1d21e0af01797ea03ea30b3530f97f340003b8890950d2 -size 162