Python XGBRegressor始终返回100%的精度

Python XGBRegressor始终返回100%的精度,python,xgboost,Python,Xgboost,我试图在不平衡的数据集(97%/3%)上拟合XGBRegressionor()并评估结果,但在生成正确的评估指标方面存在问题 我选择SMOTE对目标变量进行过采样 X = multiSdata.filter(['col1', 'col2','col3','col4', 'col5','col6','col7','col8', 'col9','col10','col11','col12','col13','col14','col15','col16',

我试图在不平衡的数据集(97%/3%)上拟合XGBRegressionor()并评估结果,但在生成正确的评估指标方面存在问题

我选择SMOTE对目标变量进行过采样

X = multiSdata.filter(['col1', 'col2','col3','col4', 'col5','col6','col7','col8',
                       'col9','col10','col11','col12','col13','col14','col15','col16','col17',
                       'col18','col19','col20','col21','col22','col23','col24'])
# retain the original feature labels
feature_labels = pd.Series(X.columns.values)

X.head(5)
[![enter image description here][1]][1]
输出: 预测训练:(876742,24)预测测试:(375747,24)目标训练:(876742,)目标测试:(375747,)

输出: 0 824518 1 52224 名称:target,数据类型:int64

sm = SMOTE(random_state = 27, ratio = 1.0)
X_train, y_train = sm.fit_sample(X_train.values, y_train.values)

np.bincount(y_train)
输出: 数组([8245181824518])

我尝试使用交叉验证,但是无法将其与XGBRegressionor一起使用,而是使用xgboost并从X_列和y_列生成一个数据矩阵。不确定这是否会导致100%的准确率,这肯定是错误的


如果您能就如何进一步解决模型无法产生正确预测的问题提出建议,我们将不胜感激。

过采样可能会产生泄漏的新案例,有效地复制测试集案例。像您这样未触及测试集可能无法防止这种情况。仅对组合的train plus测试进行重复数据消除

你可以考虑下采样(如果没有这个漏洞,但仍然是可能的),如果这是可行的。如果操作正确,这两种采样方法都不会对准确性造成太大影响,因此强烈建议进行重复数据消除


至于交叉验证,出于同样的原因,请确保首先删除重复项。

请提供一个工作示例,包括导入和一些示例数据(如果可能)。如果您想使用SKEXE进行交叉验证,您可能需要考虑它们的梯度提升实现<代码> SkPult.Studio.RealthPotoStCudioSt/<代码>问题是否可以使用<代码> SMOTE?预测(XyTest)而不是<代码> .RealtTyPrimaAuthor(< /代码>)?很难说在这个特定的情况下是什么引起了这个问题。很可能是漏水。您可能忘了从培训数据中删除标签。@AdarshChavakula我希望是这样。我已经检查了目标是否是错误留下的,但它没有包括在内。您是否也尝试过通过将scale\u pos\u weight设置为sum(负实例)/sum(正实例)来进行平衡?
y_train.value_counts()
sm = SMOTE(random_state = 27, ratio = 1.0)
X_train, y_train = sm.fit_sample(X_train.values, y_train.values)

np.bincount(y_train)
xgb = XGBRegressor(learning_rate =0.1,
 n_estimators=1000,
 max_depth=5,
 min_child_weight=1,
 gamma=0.1,
 subsample=0.8,
 colsample_bytree=0.8,
 objective= 'binary:logistic',
 nthread=4,
 scale_pos_weight=1,
 seed=21,
 eval_metric = ['auc','error'])
SMOTE = xreg.fit(X_train, y_train)
X_test = X_test.as_matrix()
smote_pred = SMOTE.predict(X_test)
import xgboost as xgb
params = {'learning_rate' : 0.1,
 'n_estimators':1000,
 'max_depth':5,
 'min_child_weight':1,
 'gamma':0.1,'subsampl':0.8,'colsample_bytre':0.8, 'objectiv': 'binary:logistic',
 'nthread':4,'scale_pos_weight':1,'seed':21,'eval_metric':['auc','error']}
xg_train = xgb.DMatrix(data=X_train, label=y_train);
cv_results = xgb.cv(params,xg_train,num_boost_round=10,nfold=5,early_stopping_rounds=10)
cv_results