163 KiB
163 KiB
In [79]:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
import matplotlib.pyplot as plt
def task1_preprocessing() -> None:
"""
Выполняет EDA и предобработку данных для прогнозирования сезонности на основе данных о потреблении энергии в Дании.
"""
# 1. Загрузка данных
try:
data = pd.read_csv("dataset/opsd_raw.csv", parse_dates=["utc_timestamp"])
print("Данные успешно загружены.")
except FileNotFoundError:
print("Ошибка: Файл dataset/opsd_raw.csv не найден.")
return
# 2. Выбор релевантных столбцов для Дании
cols = [
"utc_timestamp",
"DK_load_actual_entsoe_transparency",
"DK_wind_generation_actual",
"DK_solar_generation_actual"
]
# Проверка наличия столбцов в данных
missing_cols = [col for col in cols if col not in data.columns]
if missing_cols:
print(f"Ошибка: Отсутствуют столбцы {missing_cols} в данных.")
return
data = data[cols].copy()
data.columns = ["timestamp", "load", "wind", "solar"]
print("Выбраны релевантные столбцы для Дании.")
# 3. Обработка пропущенных значений:
# Удаляем строки, где есть хоть одно пропущенное значение
data.dropna(inplace=True)
print("Пропущенные значения обработаны (удалены строки с NaN).")
# 4. Формирование массивов 24x3 (часы × признаки)
data.set_index("timestamp", inplace=True)
# Группируем по дням и оставляем только дни с ровно 24 записями
daily_data = data.groupby(data.index.date).apply(
lambda x: x[["load", "wind", "solar"]].values.T
if len(x) == 24 else None
)
daily_data = daily_data.dropna()
print("Сформированы массивы 24x3 (часы x признаки).")
# Преобразуем индексы в формат datetime для дальнейшей работы
daily_data.index = pd.to_datetime(daily_data.index)
# 5. Создание DataFrame с массивами и метками сезонов
df = pd.DataFrame({
"timestamp": daily_data.index,
"data": daily_data.values,
"season": daily_data.index.map(lambda x: get_season(x.month))
})
print("Создан DataFrame с массивами и метками сезонов.")
# 6. Разделение данных
X = np.stack(df["data"].values)
y = df["season"].values
# Check for NaNs *before* train-test split
if np.isnan(X).any() or not np.isfinite(X).all():
print("Ошибка: X содержит NaN или бесконечные значения перед train-test split.")
return
# Encode labels
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
print("Выполнено кодирование меток.")
X_train, X_temp, y_train, y_temp = train_test_split(
X, y_encoded, test_size=0.3, stratify=y_encoded, random_state=42
)
X_val, X_test, y_val, y_test = train_test_split(
X_temp, y_temp, test_size=0.5, stratify=y_temp, random_state=42
)
print("Данные разделены на обучающий, валидационный и тестовый наборы.")
# 7. Масштабирование
scaler = StandardScaler()
# Проверяем, что массивы не содержат NaN перед масштабированием
if np.isnan(X_train).any() or not np.isfinite(X_train).all():
print("Ошибка: X_train содержит NaN или бесконечные значения перед масштабированием.")
return
X_train_reshaped = X_train.reshape(-1, 3)
X_train_scaled = scaler.fit_transform(X_train_reshaped).reshape(X_train.shape)
if np.isnan(X_val).any() or not np.isfinite(X_val).all():
print("Ошибка: X_val содержит NaN или бесконечные значения перед масштабированием.")
return
X_val_reshaped = X_val.reshape(-1, 3)
X_val_scaled = scaler.transform(X_val_reshaped).reshape(X_val.shape)
if np.isnan(X_test).any() or not np.isfinite(X_test).all():
print("Ошибка: X_test содержит NaN или бесконечные значения перед масштабированием.")
return
X_test_reshaped = X_test.reshape(-1, 3)
X_test_scaled = scaler.transform(X_test_reshaped).reshape(X_test.shape)
print("Выполнено масштабирование данных.")
# 8. Сохранение данных
try:
np.savez("processed_data.npz",
X_train=X_train_scaled,
X_val=X_val_scaled,
X_test=X_test_scaled,
y_train=y_train,
y_val=y_val,
y_test=y_test,
classes=label_encoder.classes_,
allow_pickle=True)
print("Данные успешно сохранены в processed_data.npz")
except Exception as e:
print(f"Ошибка при сохранении данных: {e}")
return
# 9. Визуализация
plot_sample_profiles(df)
def get_season(month: int) -> str:
if month in [12, 1, 2]: return "winter"
if month in [3, 4, 5]: return "spring"
if month in [6, 7, 8]: return "summer"
return "autumn"
def plot_sample_profiles(df: pd.DataFrame) -> None:
plt.figure(figsize=(12, 6))
for season in ["winter", "spring", "summer", "autumn"]:
try:
# Get the first day's data for the given season
season_data = df[df["season"] == season].iloc[0]["data"]
# Plotting only the 'load' data
plt.plot(season_data[0], label=f"{season} load")
except IndexError:
print(f"Предупреждение: Нет данных для сезона {season} для построения графика.")
plt.title("Суточные профили потребления энергии по сезонам")
plt.xlabel("Час дня (0-23)")
plt.ylabel("Мощность (МВт)")
plt.legend()
plt.grid(True)
plt.savefig("load_profiles.png")
plt.show()
# Запуск preprocessing
task1_preprocessing()
Данные успешно загружены. Выбраны релевантные столбцы для Дании. Пропущенные значения обработаны (удалены строки с NaN). Сформированы массивы 24x3 (часы x признаки). Создан DataFrame с массивами и метками сезонов. Выполнено кодирование меток. Данные разделены на обучающий, валидационный и тестовый наборы. Выполнено масштабирование данных. Данные успешно сохранены в processed_data.npz
In [80]:
import numpy as np
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score, classification_report
import warnings
def task2_mlp():
"""
Строит и обучает многослойный перцептрон (MLP) для классификации сезонов.
"""
warnings.filterwarnings("ignore")
# 1. Загрузка данных
try:
data = np.load("processed_data.npz", allow_pickle=True)
X_train, X_val, X_test = data["X_train"], data["X_val"], data["X_test"]
y_train, y_val, y_test = data["y_train"], data["y_val"], data["y_test"]
classes = data["classes"]
except FileNotFoundError:
print("Ошибка: Файл processed_data.npz не найден. Запустите task1_preprocessing() перед выполнением этой задачи.")
return
# 2. Определение модели
mlp = MLPClassifier(max_iter=500, random_state=42)
# 3. Настройка гиперпараметров с использованием GridSearchCV
param_grid = {
"hidden_layer_sizes": [(50,), (100,), (50, 50), (100, 100)],
"activation": ["relu", "tanh"],
"solver": ["adam", "sgd"],
"alpha": [0.0001, 0.001],
}
grid_search = GridSearchCV(mlp, param_grid, cv=5, scoring="accuracy", n_jobs=-1)
print("Запуск GridSearchCV...")
grid_search.fit(X_train.reshape(X_train.shape[0], -1), y_train)
# 4. Лучшая модель и её параметры
best_model = grid_search.best_estimator_
print("Лучшие параметры:", best_model.get_params)
# 5. Оценка модели на тестовом наборе
y_pred = best_model.predict(X_test.reshape(X_test.shape[0], -1))
accuracy = accuracy_score(y_test, y_pred)
print(f"Точность (Accuracy): {accuracy:.4f}")
print(classification_report(y_test, y_pred, target_names=classes))
# Запуск обучения MLP
task2_mlp()
Запуск GridSearchCV...
/var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn( /var/data/python/lib/python3.12/site-packages/sklearn/neural_network/_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet. warnings.warn(
Лучшие параметры: <bound method BaseEstimator.get_params of MLPClassifier(activation='tanh', hidden_layer_sizes=(50,), max_iter=500,
random_state=42)>
Точность (Accuracy): 0.7587
precision recall f1-score support
autumn 0.76 0.70 0.73 73
spring 0.84 0.59 0.70 83
summer 0.72 0.92 0.81 83
winter 0.74 0.83 0.78 76
accuracy 0.76 315
macro avg 0.77 0.76 0.75 315
weighted avg 0.77 0.76 0.75 315
In [81]:
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from sklearn.metrics import accuracy_score, classification_report
def task3_1d_cnn():
"""
Строит и обучает одномерную сверточную нейронную сеть (1D CNN) для классификации сезонов.
"""
# Загрузка предобработанных данных
try:
data = np.load("processed_data.npz", allow_pickle=True)
X_train, X_val, X_test = data["X_train"], data["X_val"], data["X_test"]
y_train, y_val, y_test = data["y_train"], data["y_val"], data["y_test"]
classes = data["classes"]
except FileNotFoundError:
print("Ошибка: Файл processed_data.npz не найден. Запустите task1_preprocessing() перед выполнением этой задачи.")
return
num_classes = len(classes)
y_train = to_categorical(y_train, num_classes)
y_val = to_categorical(y_val, num_classes)
y_test = to_categorical(y_test, num_classes)
# strategy = tf.distribute.get_strategy()
# with strategy.scope():
# Построение модели 1D CNN
model = Sequential([
tf.keras.layers.Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(24, 3)), # Corrected input shape
tf.keras.layers.MaxPooling1D(pool_size=2),
tf.keras.layers.Conv1D(filters=32, kernel_size=3, activation='relu'),
tf.keras.layers.MaxPooling1D(pool_size=2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(num_classes, activation='softmax')
])
# Компиляция модели
model.compile(optimizer=Adam(learning_rate=0.001),
loss='categorical_crossentropy',
metrics=['accuracy'])
# X_train = np.transpose(X_train, (0, 2, 1))
# X_val = np.transpose(X_val, (0, 2, 1))
# X_test = np.transpose(X_test, (0, 2, 1))
# Обучение модели
history = model.fit(X_train, y_train,
validation_data=(X_val, y_val),
epochs=50,
batch_size=32,
verbose=1)
# Оценка модели на тестовом наборе
y_pred = model.predict(X_test)
y_pred_classes = np.argmax(y_pred, axis=1)
y_test_classes = np.argmax(y_test, axis=1)
# Вычисление метрик
accuracy = accuracy_score(y_test_classes, y_pred_classes)
print(f"Точность (Accuracy): {accuracy:.4f}")
print(classification_report(y_test_classes, y_pred_classes, target_names=classes))
# Сохранение модели
model.save("1d_cnn_model.h5")
# Запуск обучения 1D CNN
task3_1d_cnn()
Epoch 1/50
[31m---------------------------------------------------------------------------[39m
[31mValueError[39m Traceback (most recent call last)
[36mCell[39m[36m [39m[32mIn[81][39m[32m, line 76[39m
[32m 73[39m model.save([33m"[39m[33m1d_cnn_model.h5[39m[33m"[39m)
[32m 75[39m [38;5;66;03m# Запуск обучения 1D CNN[39;00m
[32m---> [39m[32m76[39m [43mtask3_1d_cnn[49m[43m([49m[43m)[49m
[36mCell[39m[36m [39m[32mIn[81][39m[32m, line 56[39m, in [36mtask3_1d_cnn[39m[34m()[39m
[32m 47[39m model.compile(optimizer=Adam(learning_rate=[32m0.001[39m),
[32m 48[39m loss=[33m'[39m[33mcategorical_crossentropy[39m[33m'[39m,
[32m 49[39m metrics=[[33m'[39m[33maccuracy[39m[33m'[39m])
[32m 51[39m [38;5;66;03m# X_train = np.transpose(X_train, (0, 2, 1))[39;00m
[32m 52[39m [38;5;66;03m# X_val = np.transpose(X_val, (0, 2, 1))[39;00m
[32m 53[39m [38;5;66;03m# X_test = np.transpose(X_test, (0, 2, 1))[39;00m
[32m 54[39m
[32m 55[39m [38;5;66;03m# Обучение модели[39;00m
[32m---> [39m[32m56[39m history = [43mmodel[49m[43m.[49m[43mfit[49m[43m([49m[43mX_train[49m[43m,[49m[43m [49m[43my_train[49m[43m,[49m
[32m 57[39m [43m [49m[43mvalidation_data[49m[43m=[49m[43m([49m[43mX_val[49m[43m,[49m[43m [49m[43my_val[49m[43m)[49m[43m,[49m
[32m 58[39m [43m [49m[43mepochs[49m[43m=[49m[32;43m50[39;49m[43m,[49m
[32m 59[39m [43m [49m[43mbatch_size[49m[43m=[49m[32;43m32[39;49m[43m,[49m
[32m 60[39m [43m [49m[43mverbose[49m[43m=[49m[32;43m1[39;49m[43m)[49m
[32m 62[39m [38;5;66;03m# Оценка модели на тестовом наборе[39;00m
[32m 63[39m y_pred = model.predict(X_test)
[36mFile [39m[32m/var/data/python/lib/python3.12/site-packages/keras/src/utils/traceback_utils.py:122[39m, in [36mfilter_traceback.<locals>.error_handler[39m[34m(*args, **kwargs)[39m
[32m 119[39m filtered_tb = _process_traceback_frames(e.__traceback__)
[32m 120[39m [38;5;66;03m# To get the full stack trace, call:[39;00m
[32m 121[39m [38;5;66;03m# `keras.config.disable_traceback_filtering()`[39;00m
[32m--> [39m[32m122[39m [38;5;28;01mraise[39;00m e.with_traceback(filtered_tb) [38;5;28;01mfrom[39;00m[38;5;250m [39m[38;5;28;01mNone[39;00m
[32m 123[39m [38;5;28;01mfinally[39;00m:
[32m 124[39m [38;5;28;01mdel[39;00m filtered_tb
[36mFile [39m[32m/var/data/python/lib/python3.12/site-packages/keras/src/layers/input_spec.py:227[39m, in [36massert_input_compatibility[39m[34m(input_spec, inputs, layer_name)[39m
[32m 222[39m [38;5;28;01mfor[39;00m axis, value [38;5;129;01min[39;00m spec.axes.items():
[32m 223[39m [38;5;28;01mif[39;00m value [38;5;129;01mis[39;00m [38;5;129;01mnot[39;00m [38;5;28;01mNone[39;00m [38;5;129;01mand[39;00m shape[axis] [38;5;129;01mnot[39;00m [38;5;129;01min[39;00m {
[32m 224[39m value,
[32m 225[39m [38;5;28;01mNone[39;00m,
[32m 226[39m }:
[32m--> [39m[32m227[39m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m(
[32m 228[39m [33mf[39m[33m'[39m[33mInput [39m[38;5;132;01m{[39;00minput_index[38;5;132;01m}[39;00m[33m of layer [39m[33m"[39m[38;5;132;01m{[39;00mlayer_name[38;5;132;01m}[39;00m[33m"[39m[33m is [39m[33m'[39m
[32m 229[39m [33mf[39m[33m"[39m[33mincompatible with the layer: expected axis [39m[38;5;132;01m{[39;00maxis[38;5;132;01m}[39;00m[33m [39m[33m"[39m
[32m 230[39m [33mf[39m[33m"[39m[33mof input shape to have value [39m[38;5;132;01m{[39;00mvalue[38;5;132;01m}[39;00m[33m, [39m[33m"[39m
[32m 231[39m [33m"[39m[33mbut received input with [39m[33m"[39m
[32m 232[39m [33mf[39m[33m"[39m[33mshape [39m[38;5;132;01m{[39;00mshape[38;5;132;01m}[39;00m[33m"[39m
[32m 233[39m )
[32m 234[39m [38;5;66;03m# Check shape.[39;00m
[32m 235[39m [38;5;28;01mif[39;00m spec.shape [38;5;129;01mis[39;00m [38;5;129;01mnot[39;00m [38;5;28;01mNone[39;00m:
[31mValueError[39m: Exception encountered when calling Sequential.call().
[1mInput 0 of layer "conv1d_24" is incompatible with the layer: expected axis -1 of input shape to have value 3, but received input with shape (None, 3, 24)[0m
Arguments received by Sequential.call():
• inputs=tf.Tensor(shape=(None, 3, 24), dtype=float32)
• training=True
• mask=None