我有一个数据集X,y并将它们拆分为训练和测试数据。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, stratify = y, random_state=10). 为了处理不平衡的数据,我想使用 SMOTE,然后使用分类算法。但是,我将使用 Stacking 作为我的分类方法。我会很感激知道什么时候应该使用 SMOTE?我应该在定义较低级别的分类器还是在较高级别的分类器中使用它们?
level0 = list()
oversample = SMOTE()
RF = RandomForestClassifier(random_state=13)
pipe1 = Pipeline(steps=[('OverSampling', oversample ), ('Classifier', RF)])
level0.append(pipe1 )
DT = DecisionTreeClassifier( random_state=0)
pipe2 = Pipeline(steps=[('OverSampling', oversample ), ('Classifier', DT)])
level0.append(pipe2)
level1 = LogisticRegression
model = StackingClassifier(estimators=level0, final_estimator=level1, cv=10, passthrough = True)
model.fit(X_train, y_train)
model.predict(X_test)
或者我应该使用以下代码?
level0 = list()
oversample = SMOTE()
RF = RandomForestClassifier(random_state=13)
level0.append(RF)
DT = DecisionTreeClassifier( random_state=0)
level0.append(DT)
level1 = LogisticRegression
model = StackingClassifier(estimators=level0, final_estimator=level1, cv=10, passthrough = True)
pipe1 = Pipeline(steps=[('OverSampling', oversample ), ('Classifier', model)])
pipe1.fit(X_train, y_train)
pipe1.predict(X_test)
另一个问题,我们在训练步骤中使用 SMOTE 以获得更好的模型。但是在流水线中,第一步是使用SMOTE,我认为在对测试数据的预测中,首先是对测试数据进行过采样,然后再应用分类模型?这是正确的吗?我不知道应该如何使用 SMOTE 进行最终预测。如果有人能解释它并修改我的代码,我将不胜感激。