scikit-learn - 通过 mlxtend 或其他工具与原始数据堆叠
问题描述
我想通过与原始特征堆叠形成的元特征来预测结果。
我使用 mlxtend 进行堆叠,并尝试将原始功能与元功能一起使用,但这个库不能很好地工作。
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)
并且发生错误
Fitting 3 regressors...
Fitting regressor1: randomforestregressor (1/3)
Fitting regressor2: lgbmregressor (2/3)
Fitting regressor3: pipeline (3/3)
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "C:\ProgramData\Anaconda3\lib\site-packages\mlxtend\regressor\stacking_regression.py", line 154, in fit
meta_features = self.predict_meta_features(X)
File "C:\ProgramData\Anaconda3\lib\site-packages\mlxtend\regressor\stacking_regression.py", line 221, in predict_meta_features
return np.column_stack([r.predict(X) for r in self.regr_])
File "C:\ProgramData\Anaconda3\lib\site-packages\numpy\lib\shape_base.py", line 369, in column_stack
return _nx.concatenate(arrays, 1)
ValueError: all the input array dimensions except for the concatenation axis must match exactly
我认为这是由具有多维的原始数据引起的。
我想知道更好的方法或工具。
我应该怎么办?
解决方案
代码在预测部分有一些错误。它应该是正确的
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 进行预测。这段代码运行良好。
推荐阅读
- node.js - NodeJS可以让新用户在无法登录的情况下注册
- javascript - jQuery remodal 弹出窗口将标签href添加到url
- dart - Dart中的变量类型声明是什么?我们推荐它的原因是什么?
- php - 具有方法 setId() 的必需实体?
- python - 如何仅在评估模式下运行 TF 对象检测 API model_main.py
- c++ - 何时在 C++ 中使用 out 参数,如果有的话?
- less - Less:如何从地图中获取整个规则集
- python - 使用熊猫,如何过滤两列中具有相似值的行
- java - 如何为“this”keywrd 和以下方法编写 junit。我只知道基础知识并坚持这一点
- ruby-on-rails - Validate uniqueness of rec ord with scope, is not working properly when saving nested records