通过mlxtend或其他工具堆叠原始数据

时间:2019-02-28 17:24:08

标签: scikit-learn mlxtend

我想通过堆叠具有原始特征的元特征来预测结果。
我已经使用mlxtend进行堆栈,并且尝试将原始功能与元功能一起使用,但是该库无法正常工作。

class Output(object):

    def close(self):
        self.window = QtWidgets.QMainWindow()
        MainWindow.close()

    def setupUiOutput(self, MainWindow):
        super().__init__()

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(811, 541)

        MainWindow.setMinimumSize(QtCore.QSize(811, 541))
        MainWindow.setMaximumSize(QtCore.QSize(811, 541))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Output()
    ui.setupUiOutput(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

,并且发生错误为

from lightgbm import LGBMRegressor
from sklearn.ensemble import RandomForestRegressor

from sklearn.datasets import load_boston
from mlxtend.regressor import StackingRegressor
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import cross_validate

boston= load_boston()
y = boston['target']
X = boston['data']

class extAll(BaseEstimator, TransformerMixin):
  def __init__(self):
      pass
  def fit(self, X, y=None):
      return self
  def transform(self, X):
      return self
  def predict(self, X):
      return self
RF =  RandomForestRegressor()
LGBM = LGBMRegressor()
pipe = make_pipeline(extAll())
stack1 = StackingRegressor(regressors=[RF,LGBM,pipe], meta_regressor=LGBM, verbose=1)
scores = cross_validate(stack1, X, y, cv=10)

我认为这是由具有多维数据的原始数据引起的。
我想知道更好的方法或工具。
我该怎么办?

1 个答案:

答案 0 :(得分:0)

代码在预测部分有一些错误。 应该是正确的

class extAll(BaseEstimator, TransformerMixin,RegressorMixin):
 def __init__(self):
    pass
 def fit(self, X, y=None):
    return self
 def transform(self, X):
    return self
 def predict(self, X):
    return X

当我们开发scikit-learn类型方法时,需要RegressorMixin或ClassifierMixin进行预测。这段代码行之有效。