我正在训练一个用于预测应用程序数量的 XGBoost 模型,训练数据中的最小应用程序数为 40,最大应用程序数为 2000,而在测试集中,训练数据中的最小应用程序数为 400,最大应用程序数是 800。因此模型在预测值时会变得混乱。关于我应该如何解决这个问题的任何建议?
如何处理训练和测试数据中因变量范围的差异
数据挖掘
机器学习
Python
回归
xgboost
2022-02-21 03:03:34
2个回答
监督 ML 中的假设是测试集遵循与训练集相同的分布。从您的描述中可以清楚地看出,您的数据不满足此假设,因此事情运行不佳也就不足为奇了。除了因变量范围的差异之外,如果训练集和测试集是独立收集的,那么特征的分布很可能也不同。
所以如何解决这个问题取决于任务的目标,特别是为什么测试集和训练集不遵循相同的分布:
- 如果差异没有意义,即没有理由假设实际生产数据与训练集不同,则应在适当随机化训练集和测试集之间的分割后重做实验。
- 如果差异是有意义的,即测试集故意不同于训练集,因为生产数据也会不同,那么应该重新设计设置以解决这个问题。例如,可以在测试集上进行半监督学习,这将使模型适应新的数据分布,同时利用来自训练数据的信息。
您可以尝试使用转换目标MixMaxScaler,使训练集和测试集的目标都在 0 和 1 之间。
from from xgb import XGBRegressor
from sklearn.compose import TransformedTargetRegressor
from sklearn.metrics import r2_score
from sklearn.preprocessing import MinMaxScaler
regressor = XGBRegressor()
model = TransformedTargetRegressor(regressor= regressor,
transformer = MinMaxScaler()
).fit(trainX,trainY)
pred = model.predict(testX)
print(pred)
其它你可能感兴趣的问题