AutoGluon 的 TabularPredictor
不直接支持多输出(多标签)任务。如果你想对多个目标进行预测,可以考虑以下几种方法:
方法 1: 针对每个目标分别训练模型
你可以对每个目标标签单独创建并训练一个 TabularPredictor
实例。示例如下:
import pandas as pd
from autogluon.tabular import TabularPredictor
# 创建示例数据
data = {
'feature1': [1, 2, 3, 4],
'feature2': [5, 6, 7, 8],
'target1': [1, 0, 1, 0],
'target2': [0, 1, 1, 0]
}
train_data = pd.DataFrame(data)
# 针对每个目标训练独立的预测器
predictor1 = TabularPredictor(label='target1').fit(train_data)
predictor2 = TabularPredictor(label='target2').fit(train_data)
# 进行预测
predictions1 = predictor1.predict(train_data)
predictions2 = predictor2.predict(train_data)
# 合并预测结果
results = pd.DataFrame({'target1_pred': predictions1, 'target2_pred': predictions2})
print(results)
方法 2: 使用有序连续值的多任务学习
如果你的任务是回归类,且目标是相关的,你可以考虑将任务转化为多任务学习问题,使用支持多任务的深度学习框架(如 PyTorch/Keras 等)来训练模型。
方法 3: 处理多输出任务的库
考虑使用 scikit-learn
中的 MultiOutputRegressor
或 MultiOutputClassifier
来处理多目标任务。如下为示例:
from sklearn.multioutput import MultiOutputClassifier
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
# 创建示例数据
data = {
'feature1': [1, 2, 3, 4],
'feature2': [5, 6, 7, 8],
'target1': [1, 0, 1, 0],
'target2': [0, 1, 1, 0]
}
train_data = pd.DataFrame(data)
X = train_data[['feature1', 'feature2']]
y = train_data[['target1', 'target2']]
# 使用 MultiOutputClassifier
classifier = MultiOutputClassifier(RandomForestClassifier())
classifier.fit(X, y)
# 进行预测
predictions = classifier.predict(X)
pred_df = pd.DataFrame(predictions, columns=['target1_pred', 'target2_pred'])
print(pred_df)
总结
- AutoGluon 的
TabularPredictor
仅支持单一目标标签的训练。 - 若要处理多标签或多维输出任务,可以考虑方法 1(单独训练模型),或使用像
scikit-learn
这样的工具处理多输出任务。 - 如果目标之间存在关联且适合多任务学习,可以转向深度学习框架