网格搜索 GridSearchCV\训练集、验证集和测试集

一、GridSearchCV简介

  GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化。
  通常算法不够好,需要调试参数时必不可少。比如SVM的惩罚因子C,核函数kernel,gamma参数等,对于不同的数据使用不同的参数,结果效果可能差1-5个点,sklearn为我们提供专门调试参数的函数grid_search。
  Grid Search:一种调优方法,在参数列表中进行穷举搜索,对每种情况进行训练,找到最优的参数;由此可知,这种方法的主要缺点是 比较耗时

1.1 参数解释

from sklearn.model_selection import GridSearchCV
GridSearchCV(
    estimator,
    param_grid,
    scoring=None,
    fit_params=None,
    n_jobs=1,
    iid=True,
    refit=True,
    cv=None,
    verbose=0,
    pre_dispatch='2*n_jobs',
    error_score='raise',
    return_train_score='warn')

Parameters:

estimator:所使用的分类器,或者pipeline
param_grid:值为字典或者列表,即需要最优化的参数的取值
scoring:准确度评价标准,默认None,这时需要使用score函数;或者如scoring=‘roc_auc’,根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。返回给定测试集合的平均准确率(mean accuracy),浮点型数值。
n_jobs:并行数,int:个数,-1:跟CPU核数一致, 1:默认值。
pre_dispatch:指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次
iid:默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均。
cv:交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。
refit:默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。
verbose:日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。

Attributes:

best_estimator_:效果最好的分类器

best_score_:成员提供优化过程期间观察到的最好的评分

best_params_:描述了已取得最佳结果的参数的组合

best_index_:对应于最佳候选参数设置的索引(cv_results_数组的索引)。

Methods:

decision_function:使用找到的参数最好的分类器调用decision_function。
**fit(X, y=None, groups=None, fit_params):训练
get_params(deep=True):获取这个估计器的参数。
predict(X):用找到的最佳参数调用预估器。(直接预测每个样本属于哪一个类别)
predict_log_proda(X):用找到的最佳参数调用预估器。(得到每个测试集样本在每一个类别的得分取log情况)
predict_proba(X):用找到的最佳参数调用预估器。(得到每个测试集样本在每一个类别的得分情况)
score(X, y=None):返回给定数据上的得分,如果预估器已经选出最优的分类器。
transform(X):调用最优分类器进行对X的转换。

1.2 简单的网格搜索 iris_svc

from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

iris = load_iris()
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=0)#默认size=0.25
print("Size of training set:{} size of testing set:{}".format(X_train.shape[0],X_test.shape[0]))
# Size of training set:112 size of testing set:38
#   grid search start
best_score = 0
for gamma in [0.001,0.01,0.1,1,10,100]:
    for C in [0.001,0.01,0.1,1,10,100]:
        svm = SVC(gamma=gamma,C=C)#对于每种参数可能的组合,进行一次训练;
  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是使用Python的scikit-learn库进行随机森林反演有机质含量,并将样本分为测试集训练集验证集进行参数调优的示例代码: ```python from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.metrics import mean_squared_error # 加载数据集 X, y = load_dataset() # 将数据集随机分为训练集测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 定义随机森林回归器 rf = RandomForestRegressor() # 定义参数网格搜索范围 param_grid = { 'n_estimators': [50, 100, 150], 'max_depth': [10, 20, 30], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4], 'max_features': ['auto', 'sqrt', 'log2'] } # 使用网格搜索进行参数调优 grid_rf = GridSearchCV(rf, param_grid, cv=5) grid_rf.fit(X_train, y_train) # 输出最佳参数 print('Best parameters: ', grid_rf.best_params_) # 使用验证集对模型进行验证 y_pred = grid_rf.predict(X_val) mse = mean_squared_error(y_val, y_pred) print('Validation set MSE: ', mse) # 使用测试集对模型进行评估 y_pred = grid_rf.predict(X_test) mse = mean_squared_error(y_test, y_pred) print('Test set MSE: ', mse) ``` 其中,load_dataset()函数用于加载数据集,train_test_split()函数用于将数据集随机分为训练集测试集GridSearchCV()函数用于进行网格搜索和参数调优。最后,使用mean_squared_error()函数计算验证集测试集的均方误差(MSE),评估模型的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值