Родитель
31c70b9a1b
Сommit
d346cd7d64
|
После Ширина: | Высота: | Размер: 78 KiB |
|
После Ширина: | Высота: | Размер: 84 KiB |
|
После Ширина: | Высота: | Размер: 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()
|
||||
|
||||
Двоичный файл не отображается.
Двоичный файл не отображается.
Загрузка…
Ссылка в новой задаче