在这里主要记录一下进行hyperparameter选取的两个function,以及参数选取的一些建议:
function
- GridSearchCV
sklearn.model_selection.GridSearchCV(estimator,param_grid,scoring=None,fit_params=None,iid=True,cv=None,verbose=0,error_score='raise') #仅列出部分参数
#param_grid:为hyperparameter的dictionary,可以是list of dictionary
#scoring:服从不同分布的数据,用于评判hyperparameter好坏的metric不同,在实际中可以选择不同的scoring;
#verbose:int,数字越大,保留的信息越多
#error_score:在选择最优hyperparameter的过程中,可能有些hyperparameter set不能很好拟合,得出score,如果将error_score设为raise,则整个hyperparameter的选取过程会完全中断,而如果将error_score=0,则会将出错的hyperparameter set的score设为0,继续正常进行剩下的选取工作。
#fit_params:estimator的参数dictionary
#iid:=True,则表示数据服从均匀分布
#上述function返回的是一个object,其有atrribute, method,具体参见官网;
#note that:该函数会将所有hyperparameter的组合都进行评估,是一个expensively computational process;
#示例:param_grid
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
- RandomizedSearchCV
sklearn.model_selection.RandomizedSearchCV(estimator,param_distributions,n_iter=10) #仅列出部分参数
#param_distributions:为hyperparameter dictionary,key为name,value为list of value,或是distributions(scipy.stats.distributions)
#n_iter:要评估的hyperparameter set数量
#其返回的是一个object,有自己的attribute和method
#示例:param_distributions
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
参数选取的一些建议
- 对于服从不同分布的数据可以选取不同的metric,来评估hyperparameter表现的优劣。metric的选择范围,及其各个选项的具体意义参见官网:The scoring parameter: defining model evaluation rules
- 对于上述所讲的两个function中的scoring参数,可以选择多个metric;
- 可以将数据标准化,参数的估计,模型的拟合,预测,等动作分装在pipeline中。pipeline
- 在利用上述两个function进行参数选择之前,要首先将data分为development data以及evaluation data(可用train_test_split()),然后在用development data 去fed上述两个function,用evalutation data去评估各个参数集优劣。
这里,有点儿小疑惑,上述两个function都有cv选项,即可把data 分为train和test,那么可以用train训练各个hyperparameter下的model,用test去score所得的model,相当于用cross-validation的方式去评估hyperparameter好坏,在这种情况下,我觉得就不用提前将data分为train和test了吧??? - 通过设置参数n_jobs=-1,实现hyperparameter选取的并行运算;
- 通过设置参数error_score=0,使得function忽略无法拟合的hyperparameter by setting its score to 0,保证hyperparameter选取继续进行;
最后,还想提一点:
在ensemble model base upon bagging,有些sample不会被抽中,不会出现在train中,可以用这些sample形成测试集,用来评估拟合模型的优劣;