← Назад к вопросам
Как решал задачу нейрорегрессии?
2.0 Middle🔥 141 комментариев
#Глубокое обучение#Опыт и проекты
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Нейрорегрессия — использование нейронных сетей для предсказания непрерывного значения. В отличие от классификации, предсказываем число, а не класс.
Архитектура нейронной сети для регрессии
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
model = keras.Sequential([
layers.Dense(128, activation="relu", input_shape=(X_train.shape[1],)),
layers.Dropout(0.2),
layers.Dense(64, activation="relu"),
layers.Dropout(0.2),
layers.Dense(32, activation="relu"),
layers.Dense(1) # Выходной слой БЕЗ активации!
])
model.compile(
optimizer="adam",
loss="mse", # Mean Squared Error для регрессии
metrics=["mae"]
)
history = model.fit(
X_train, y_train,
validation_split=0.2,
epochs=100,
batch_size=32
)
Ключевое отличие: выходной слой имеет 1 нейрон БЕЗ функции активации.
Функции потерь
MSE (Mean Squared Error)
# MSE = (1/n) * sum((y_true - y_pred)^2)
# Штрафует большие ошибки сильнее
loss = keras.losses.MeanSquaredError()
MAE (Mean Absolute Error)
# MAE = (1/n) * sum(|y_true - y_pred|)
# Робастнее к выбросам
loss = keras.losses.MeanAbsoluteError()
Huber Loss
# Комбинация MSE и MAE
# MSE для малых ошибок, MAE для больших
loss = keras.losses.Huber(delta=1.0)
Нормализация данных
Критически важна для нейронных сетей:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Для y тоже нормализуем
y_scaler = StandardScaler()
y_train_scaled = y_scaler.fit_transform(y_train.reshape(-1, 1)).flatten()
Регуляризация
model = keras.Sequential([
layers.Dense(128, activation="relu",
kernel_regularizer=keras.regularizers.l2(0.001)),
layers.Dropout(0.3),
layers.Dense(64, activation="relu",
kernel_regularizer=keras.regularizers.l2(0.001)),
layers.Dropout(0.3),
layers.Dense(1)
])
# Early stopping
early_stopping = keras.callbacks.EarlyStopping(
monitor="val_loss",
patience=10,
restore_best_weights=True
)
model.fit(X_train_scaled, y_train_scaled, callbacks=[early_stopping])
Оценка модели
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
y_pred = model.predict(X_test_scaled)
y_pred_original = y_scaler.inverse_transform(y_pred)
mse = mean_squared_error(y_test, y_pred_original)
mae = mean_absolute_error(y_test, y_pred_original)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred_original)
print(f"MAE: {mae:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"R²: {r2:.4f}")
Архитектуры для разных типов данных
Табличные данные
model = keras.Sequential([
layers.Dense(64, activation="relu", input_shape=(n_features,)),
layers.Dropout(0.2),
layers.Dense(32, activation="relu"),
layers.Dense(1)
])
Временные ряды (LSTM)
model = keras.Sequential([
layers.LSTM(50, activation="relu", input_shape=(time_steps, n_features)),
layers.Dropout(0.2),
layers.Dense(25, activation="relu"),
layers.Dense(1)
])
Изображения (CNN)
model = keras.Sequential([
layers.Conv2D(32, (3, 3), activation="relu", input_shape=(height, width, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation="relu"),
layers.Flatten(),
layers.Dense(64, activation="relu"),
layers.Dense(1)
])
Практические советы
- Нормализуй данные — это first priority
- Выбери loss функцию: MSE для стандартной регрессии, Huber для выбросов
- Начни с простой архитектуры (2-3 слоя)
- Early Stopping спасает от переобучения
- Dropout + L2 регуляризация — мощная комбинация
- Сравни с baseline (линейная регрессия)
- Мониторь train/val loss — если val растёт, переобучение
Нейрорегрессия требует внимания к деталям, но результаты могут быть лучше традиционных методов.