ile*_*arn 3 python regression machine-learning xgboost
我一直在尝试在Python中使用XGBregressor。它是迄今为止我用过的最好的机器学习技术之一。但是,在某些数据集中,我有非常高的训练 R 平方,但它在预测或测试中表现非常差。我尝试过使用伽玛、深度和子采样来降低模型的复杂性或确保其不会过度拟合,但训练和测试之间仍然存在巨大差异。我想知道是否有人可以帮助我解决这个问题:
下面是我正在使用的代码:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30,random_state=100)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X_train)
xgb = xgboost.XGBRegressor(colsample_bytree=0.7,
gamma=0,
learning_rate=0.01,
max_depth=1,
min_child_weight=1.5,
n_estimators=100000,
reg_alpha=0.75,
reg_lambda=0.45,
subsample=0.8,
seed=1000)
Run Code Online (Sandbox Code Playgroud)
以下是训练与测试的表现:
训练:MAE:0.10 R^2:0.99
测试:MAE:1.47 R^2:-0.89
这里的问题是过度拟合。您需要调整一些参数(源)。
- 如果数据大小较高(十万量级),则将 n_estimators 设置为 80-200,如果数据大小为中低,则将 n_estimators 设置为 800-1200
- 学习率:0.1 到 0.01 之间
- 子样本:0.8 到 1 之间
- colsample_bytree:每棵树使用的列数。如果您有很多特征向量或列,则值为 0.3 到 0.8;如果您只有很少的特征向量或列,则值为 0.8 到 1。
- 伽马:0、1 或 5
由于你的max_depth已经取得很低了,所以你可以尝试调整上面的参数。此外,如果您的数据集非常小,那么训练和测试的差异是可以预料的。您需要检查训练和测试数据中是否存在良好的数据分割。例如,在测试数据中,输出列的“是”和“否”的百分比是否几乎相等。
您需要尝试各种选择。当然,xgboost 和随机森林会为较少的数据提供过拟合模型。你可以试试:-
1.朴素贝叶斯。它适用于较少的数据集,但它认为所有特征向量的权重相同。
逻辑回归 - 尝试调整正则化参数并查看您的召回分数最大的位置。其中的其他因素是等级重量=平衡。
具有交叉验证的逻辑回归 - 这也适用于小数据。我之前也说过的最后一件事,检查你的数据,看看它不偏向于一种结果。就像如果 70 例中有 50 例的结果是肯定的,那么它就有很大的偏差,你可能无法获得很高的准确性。
| 归档时间: |
|
| 查看次数: |
4166 次 |
| 最近记录: |