Родитель
ee380c299d
Сommit
e90490b41e
@ -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")
|
||||
@ -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")
|
||||
@ -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")
|
||||
@ -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")
|
||||
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче