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")