我有一个来自原始NHANES的处理过的数据集。根据可用的特征,我需要执行回归任务,即确定一个人的实际年龄(通常,我需要确定生物年龄,但现在我停在实际年龄上)。
问题是,我不能选择正确的层和它们的数量,以及超参数,优化器,损失和其他(我尝试了其中的许多)。我已经试着这么做了好几天了,但没有用。也许我做错了什么,或者我的数据相关性太差,这是我能得到的最大值。总的来说,我需要一些比我更有经验的人的建议。任何具体的建议或提示将不胜感激,但感谢任何帮助。
下面是输入数据的示例(最后两列是KDM计算的生物年龄及其调整值。在将来,我需要精确计算这些值,但现在我不使用它们):
下面是一个示例代码(我知道这个模型很简单,但更复杂的变体显示出同样糟糕的结果,类似于mae和mse等默认损失函数的情况):
# BA and BAC is biological age estimated using KDM method
# Need to estimate similar value without them
X = df_male.drop(columns=['Age', 'BA', 'BAC'])
y = df_male[['Age', 'BA', 'BAC']]
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.3,
random_state=20)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model_0_ha = Sequential([
layers.BatchNormalization(input_shape=(X_train_scaled.shape[1],)),
layers.Dense(50),
layers.PReLU(),
layers.BatchNormalization(),
layers.AlphaDropout(0.2),
layers.Dense(25),
layers.PReLU(),
layers.BatchNormalization(),
layers.Dense(1, activation='relu'),
])
optimizer = optimizers.experimental.Adamax(learning_rate=0.01)
def max_mae_loss(y_true, y_pred):
mae = K.abs(y_true - y_pred)
max_mae = K.max(mae)
min_mae = K.min(mae)
return max_mae-min_mae
model_0_ha._name = "model_male_0_ha"
model_0_ha.compile(loss=max_mae_loss,
optimizer = optimizer,
metrics=[metrics.MeanSquaredError(),
metrics.MeanAbsoluteError()])
custom_metrics_callback = CustomMetricsCallback()
custom_metrics_callback.X_test = X_test_scaled
custom_metrics_callback.y_test = y_test['Age']
custom_metrics_callback.loss_name = 'CMASE'
custom_metrics_callback.epoch_count = 50
start_time = time.time()
history = model_0_ha.fit(X_train_scaled, y_train['Age'],
epochs=250,
batch_size=100,
callbacks=[custom_metrics_callback],
verbose=0)
end_time = time.time()
execution_time = end_time - start_time
prediction = model_0_ha.predict(X_test_scaled)
我已经把我的代码和数据集放在google colab上了,所以你可以在这个link上尝试一下(如果这个资源允许这样的链接的话)。
1条答案
按热度按时间g52tjvyc1#
我已经多次运行了您的代码,修改了模型架构,调整了优化器,并更改了损失函数。
然而,最终的MSE和MAE分别收敛到约144和9.2。
这是我的结果。
考虑到你的数据集是表格类型的,考虑使用基于树的机器学习模型可能更有益,比如XGBoost、Random Forest或LightGBM。
欲了解更多信息,您可以参考本文:' Tabular Data: Deep Learning Is Not the Sole Solution. '