我有一个数据集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,然后使用分类算法。然而,我将使用堆叠作为我的分类方法。我会感激知道什么时候我应该使用击打?我应该用它们来定义低级分类器还是高级分类器?
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来做最后的预测。如果有人能解释并修改我的代码,我会很感激。
发布于 2021-04-05 16:27:01
第一个问题,是对堆叠分类器的第一个或第二个使用SMOTE。一般来说,打击乐应该在任何分类之前完成,因为击打会增加少数群体被成功学习的可能性。第一个分类器应该被赋予最有用的特征。另一种方法是寻找经验证据。两种方式的训练模式和选择性能更好的订单。
第二个问题,SMOTE只在训练数据集上进行。在预测过程中,只对现有的数据进行预测。如果使用印布洛尔管道,这将自动处理。
https://datascience.stackexchange.com/questions/92474
复制相似问题