Python 使用SKlearn管道和GridSearchCV的堆栈/集合估计器

Python 使用SKlearn管道和GridSearchCV的堆栈/集合估计器,python,machine-learning,scikit-learn,grid-search,ensemble-learning,Python,Machine Learning,Scikit Learn,Grid Search,Ensemble Learning,在学习使用管道和GridSearchCV时,我尝试将随机森林回归器与支持向量回归器集成。我个人认为这两项得分都在90%左右,但我还是被卡住了。但是把SVR放在随机森林之前,它跳到了92% 我找不到任何这样的例子,所以我认为它不是很有用,不正确,或者有更好的方法来做。希望您能给予指导 我创建了一个快速的例子,使用SKLearn的波士顿住宅套索和随机森林。综合起来,“平均测试分数”从62%左右增加到65%。相关片段如下,完整笔记本位于: 你可以通过取两个回归模型的平均值来寻找哪个模型可以组合两个回归

在学习使用管道和GridSearchCV时,我尝试将随机森林回归器与支持向量回归器集成。我个人认为这两项得分都在90%左右,但我还是被卡住了。但是把SVR放在随机森林之前,它跳到了92%

我找不到任何这样的例子,所以我认为它不是很有用,不正确,或者有更好的方法来做。希望您能给予指导

我创建了一个快速的例子,使用SKLearn的波士顿住宅套索和随机森林。综合起来,“平均测试分数”从62%左右增加到65%。相关片段如下,完整笔记本位于:

你可以通过取两个回归模型的平均值来寻找哪个模型可以组合两个回归模型

下面是一个让您开始学习的示例:

从sklearn.datasets导入进行回归
从sklearn.employ导入RandomForestRegressor,VotingRegressor
从sklearn.model_selection导入列车测试_split,GridSearchCV
从sklearn.pipeline导入管道
从sklearn.preprocessing导入StandardScaler
从sklearn.svm导入SVR
#伪造数据
十、 y=进行回归(n_样本=1_000,n_特征=20,随机状态=42)
X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,随机状态=42)
管道=管道([('scl',StandardScaler()),
('vr',VotingRegressionor([('svr',svr()),('rfr',RandomForestRegressionor())))
])
搜索空间=[{'vr\uuu rfr\uu min\u samples\u leaf':[1,5,10]}]
gs_cv=网格搜索cv(估计器=管道,
参数网格=搜索空间,
n_作业=-1)
gs_cv.配合(X_系列、y_系列)
gs_cv.预测(X_检验)
您可能会通过取两个回归模型的平均值来寻找可以组合两个回归模型的模型

下面是一个让您开始学习的示例:

从sklearn.datasets导入进行回归
从sklearn.employ导入RandomForestRegressor,VotingRegressor
从sklearn.model_selection导入列车测试_split,GridSearchCV
从sklearn.pipeline导入管道
从sklearn.preprocessing导入StandardScaler
从sklearn.svm导入SVR
#伪造数据
十、 y=进行回归(n_样本=1_000,n_特征=20,随机状态=42)
X_序列,X_测试,y_序列,y_测试=序列测试分割(X,y,随机状态=42)
管道=管道([('scl',StandardScaler()),
('vr',VotingRegressionor([('svr',svr()),('rfr',RandomForestRegressionor())))
])
搜索空间=[{'vr\uuu rfr\uu min\u samples\u leaf':[1,5,10]}]
gs_cv=网格搜索cv(估计器=管道,
参数网格=搜索空间,
n_作业=-1)
gs_cv.配合(X_系列、y_系列)
gs_cv.预测(X_检验)

那么你到底想做什么呢?我想结合我的两个回归测试,希望提高回归分数。我想知道做这件事最好的方法是什么,我的方法是否有效。最后,我在这里向估计器添加了变换函数,这确实有点错误。你可能想看看“叠加”。使用一个或多个估计器进行预测,并将输出作为最终估计器的输入。非常感谢。这似乎是一个更好的方法,那么你到底想做什么呢?我想结合我的两个回归,希望能提高回归分数。我想知道做这件事最好的方法是什么,我的方法是否有效。最后,我在这里向估计器添加了变换函数,这确实有点错误。你可能想看看“叠加”。使用一个或多个估计器进行预测,并将输出作为最终估计器的输入。非常感谢。这似乎是一个更好的方法
class Lasso_t(Lasso): #Give Lasso a transform function

    def transform(self, x):
        return super(Lasso_t, self).predict(x).reshape(-1, 1)


#The pipe creates a Lasso regression prediction that Random Forest gets as a variable
pipe = Pipeline(steps = [
    ('std_scaler', StandardScaler()),
    ('union', FeatureUnion([('reg', Lasso_t(alpha = 0.2)),
                            ('keep_X', FunctionTransformer(lambda x : x))])),
    ('rf', RandomForestRegressor(n_estimators = 100))]) 

params = dict(
    rf__min_samples_leaf = [1,5,10],
    rf__max_features = ['log2','sqrt'])

grid_search = GridSearchCV(pipe, param_grid=params, cv = 5)
grid_search.fit(X,y)
pd.DataFrame(grid_search.cv_results_).sort_values(by = 'rank_test_score').head(3)