机器学习6 --交叉验证和网格搜索

1.交叉验证:

    意义:为了让被评估的模型更加的准确可信(交叉验证平均值最大的才是最可信的),
    作用:确定估计器最好的超参数是哪个
    实际操作:把训练集分为几个等份,其中包括一份验证集(类似测试集)和多份训练集。而且你还要知道:这份验证集是不固定的,你分为多少份,验证集就有多少种可能;这份验证集的训练集是剩下的多份训练集之和,而不是某一份训练集

网格搜索:

       Grid Search:一种调参手段;穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。(为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search)

parameters table

网格搜索:指定模型估计器的超参数,程序自动的帮你使用穷举法来将所用的参数都运行一遍。
网格搜索是要配合交叉验证一起使用的。

网格搜索实现

基于网格搜索的简单逻辑,我们可以很容易实现,并找到最好的超参数

####   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)#对于每种参数可能的组合,进行一次训练;
        svm.fit(X_train,y_train)
        score = svm.score(X_test,y_test)
        if score > best_score:#找到表现最好的参数
            best_score = score
            best_parameters = {'gamma':gamma,'C':C}
####   grid search end
 

事实上,在sklearn里面实现了网格搜索的模块,我们使用时可以直接调用GridSearchCV()这也是考虑到当参数较多时,需要写多个for,较为累赘。

下面是一个使用网格搜索找到Lasso回归的最好的参数的例子。

>from sklearn.linear_model import Lasso
>from sklearn.model_selection import GridSearchCV
>parameters= {'alpha':[0.0001,0.0009,0.001,0.002,0.003,0.01,0.1,1,10,100]}

>lasso=Lasso()
>lasso_reg=GridSearchCV(lasso,param_grid=parameters,scoring='neg_mean_squared_error', cv=15)
>lasso_reg.fit(x_train,y_train)

>print('The best value of Alpha is: ',lasso_reg.best_params_)

GridSearchCV的各参数解释如下:

GridSearchCV(
estimator, #估计器,即模型
param_grid, #参数网格
scoring=None, #评分方法
n_jobs=None, #并行的作业数,不常用
refit=True, 是否refit最优参数的estimator
cv=None, 设定几折交叉验证,None的话采用5折交叉验证
verbose=0, 是否显示处理过程的信息,数值越高,信息越多
pre_dispatch=‘2*n_jobs’, 控制并行期间分派的作业数量执行。减少这个数字可以有效地避免分配更多作业时内存消耗激增,比cpu能处理的还要多。
error_score=np.nan, 当错误发生时的评分
return_train_score=False 如果为“False”,“cv_results_”属性将不包括训练分数。计算训练分数是为了了解不同的参数设置如何影响过拟合/不拟合的权衡。然而,计算训练集上的分数可能会有很高的计算成本,并且不需要严格地选择能产生最佳泛化性能的参数。 )

最后我们可以通过lasso_reg.best_params_查看最好的参数。
 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过交叉验证对SVR的参数进行优化,可以使用网格搜索(Grid Search)方法。下面是一个使用交叉验证进行SVR参数优化的示例代码: ```python from sklearn.svm import SVR from sklearn.model_selection import GridSearchCV from sklearn.metrics import mean_squared_error from sklearn.datasets import load_boston # 加载数据集 boston = load_boston() X = boston.data y = boston.target # 创建SVR模型对象 svr = SVR() # 定义参数网格 param_grid = { 'kernel': ['linear', 'rbf'], 'C': [0.1, 1, 10], 'epsilon': [0.01, 0.1, 1] } # 创建网格搜索对象 grid_search = GridSearchCV(svr, param_grid, cv=5, scoring='neg_mean_squared_error') # 进行网格搜索 grid_search.fit(X, y) # 输出最佳参数和最佳得分 print("Best parameters: ", grid_search.best_params_) print("Best score: ", -grid_search.best_score_) ``` 在这个示例中,我们使用了波士顿房价数据集(load_boston)作为示例数据。首先,我们创建了一个默认的SVR模型对象。然后,我们定义了一个参数网格(param_grid),其中包含了要搜索的参数及其取值范围。 接下来,我们创建了一个GridSearchCV对象,将SVR模型、参数网格、交叉验证的折数(cv)和评分指标(scoring)传入。然后,通过调用fit方法进行网格搜索交叉验证。 最后,我们输出了最佳参数和最佳得分。对于回归问题,一般使用负均方误差(neg_mean_squared_error)作为评分指标,因此需要取负值才能输出正确的得分。 通过这个示例代码,我们可以通过交叉验证来寻找SVR模型的最佳参数组合,以获得更好的性能和预测准确度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值