跨栏模型- gridsearchCV



我目前正在尝试建立一个障碍模型-零膨胀回归器来预测每个客户的收入。

我们使用零膨胀回归是因为大多数(80%)客户的收入为零,只有20%的客户有收入>

0。因此,我们构建如下所示的两个模型

zir = ZeroInflatedRegressor(
classifier=ExtraTreesClassifier(),
regressor=RandomForestRegressor()
)

我做gridsearchCV来提高我们模型的性能。因此,我执行下面的

from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(
estimator=zir,
param_grid={
'classifier__n_estimators': [100,200,300,400,500],
'classifier__bootstrap':[True, False],
'classifier__max_features': ['sqrt','log2',None],
'classifier__max_depth':[2,4,6,8,None],
'regressor__n_estimators': [100,200,300,400,500],
'regressor__bootstrap':[True, False],
'regressor__max_features': ['sqrt','log2',None],
'regressor__max_depth':[2,4,6,8,None]  
},
scoring = 'neg_mean_squared_error'
)

现在我的问题是gridsearchCV在障碍模型的情况下是如何工作的?

分类器的超参数是否也与回归器组合以生成一对?或者只有同一模型类型中的子参数组合起来生成新的对?

简单地说,分类器有150个超参数组合,回归器有150个组合吗?

在您的代码片段中,有150*150个超参数组合可以尝试。(你可以很容易地检查这一点,开始fit;它会打印出模型配件的数量。)这就是GridSearchCV的工作方式,而不是ZeroInflatedRegressor的任何特定内容。

如果您想要不同的行为,您可以在网格搜索中包装单个估计器。例如,

clf = GridSearchCV(
estimator=ExtraTreesClassifier(),
param_grid={
'classifier__n_estimators': [100,200,300,400,500],
'classifier__bootstrap':[True, False],
'classifier__max_features': ['sqrt','log2',None],
'classifier__max_depth':[2,4,6,8,None],
},
scoring='roc_auc',
)
reg = GridSearchCV(
estimator=RandomForestRegressor(),
param_grid={
'regressor__n_estimators': [100,200,300,400,500],
'regressor__bootstrap':[True, False],
'regressor__max_features': ['sqrt','log2',None],
'regressor__max_depth':[2,4,6,8,None],
},
scoring = 'neg_mean_squared_error',
)

zir = ZeroInflatedRegressor(
classifier=clf,
regressor=reg,
)

现在我们需要更多地了解ZeroInflatedRegressor。它适合它的classifier在所有的数据与目标"它是非零吗?";在这种情况下,这是一个网格搜索,所以我们将搜索150个候选超参数组合,选择一个在ROC AUC方面表现最好的组合。然后在非零(预测)数据点中,它拟合回归量,现在又有150个超参数点选择最优MSE。

所以这个版本会快得多,以换取更少的最优性:你为ROC AUC优化分类器,而不是为它如何与回归器的预测和最终的MSE一起工作。

最新更新