Решение задачи, в которой одновременно присутствуют два целевых признака (один категориальный и один непрерывный), можно реализовать через подход многозадачного обучения (multi-task learning). Это подход, при котором одна модель или несколько связанных моделей обучаются одновременно решать несколько задач. Вот пошаговое объяснение, как можно это сделать.
В данном примере мы используем библиотеку Keras для построения нейронной сети, которая решает обе задачи одновременно.
import pandas as pd
import numpy as np
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
# Пример данных
data = pd.DataFrame({
'feature1': np.random.rand(100),
'feature2': np.random.rand(100),
'categorical_target': np.random.randint(0, 3, 100), # 3 класса
'continuous_target': np.random.rand(100) * 1000
})
# Разделение признаков и целевых переменных
X = data[['feature1', 'feature2']].values
y_class = data['categorical_target'].values
y_reg = data['continuous_target'].values
# Определение входного слоя
input_layer = Input(shape=(X.shape[1],))
# Общие слои для извлечения признаков
common_layer = Dense(64, activation='relu')(input_layer)
common_layer = Dense(32, activation='relu')(common_layer)
# Отдельный выходной слой для классификации
classification_output = Dense(3, activation='softmax', name='classification_output')(common_layer)
# Отдельный выходной слой для регрессии
regression_output = Dense(1, activation='linear', name='regression_output')(common_layer)
# Создание модели
model = Model(inputs=input_layer, outputs=[classification_output, regression_output])
# Компиляция модели с различными функциями потерь для каждой задачи
model.compile(optimizer='adam',
loss={'classification_output': 'sparse_categorical_crossentropy', 'regression_output': 'mse'},
metrics={'classification_output': 'accuracy', 'regression_output': 'mse'})
# Обучение модели
model.fit(X, {'classification_output': y_class, 'regression_output': y_reg}, epochs=50, batch_size=16)
Объяснение кода:
Ставь 👍 и забирай 📚 Базу знаний