阿里云天池机器学习task4

导语:
今天是集成学习的第四次任务,本次任务的主要内容是调参。在上一任务中,我们了解了模型的特征选择以及模型验证方式,却没有对模型的参数进行调整,本次内容将使用网格搜索和随机搜索来对模型的超参数进行调整优化。首先,附上学习链接:
集成学习: EnsembleLearning项目-github.

1.参数与超参数
在机器学习的模型中,我们会经常碰到两类参数:参数和超参数。它们有什么区别呢?
以岭回归为例,模型中的参数 𝜆 和参数w之间有什么不一样?
事实上,参数w是我们通过设定某一个具体的 𝜆 后使用类似于最小二乘法、梯度下降法等方式优化出来的,我们总是设定了 𝜆 是多少后才优化出来的参数w。因此,类似于参数w一样,使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为参数,类似于 𝜆 一样,我们无法使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为超参数。
1.1模型参数是模型内部的配置变量,其值可以根据数据进行估计
进行预测时需要参数;
参数定义了可使用的模型。
参数是从数据估计或获悉的;
参数通常不由编程者手动设置;
参数通常被保存为学习模型的一部分;
参数是机器学习算法的关键,它们通常由过去的训练数据中总结得出 。
1.2模型超参数是模型外部的配置,其值无法从数据中估计
超参数通常用于帮助估计模型参数;
超参数通常由人工指定;
超参数通常可以使用启发式设置;
超参数经常被调整为给定的预测建模问题;
超参数取不同的值对于模型的性能有不同的影响。

2.网格搜索与随机搜索
2.1网格搜索GridSearchCV():
网格搜索:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html?highlight=gridsearchcv#sklearn.model_selection.GridSearchCV
网格搜索结合管道:https://scikit-learn.org/stable/auto_examples/compose/plot_compare_reduction.html?highlight=gridsearchcv
网格搜索的思想非常简单,比如你有2个超参数需要去选择,那你就把所有的超参数选择列出来分别做排列组合。举个例子: 𝜆=0.01,0.1,1.0 和 𝛼=0.01,0.1,1.0 ,你可以做一个排列组合,即:{[0.01,0.01],[0.01,0.1],[0.01,1],[0.1,0.01],[0.1,0.1],[0.1,1.0],[1,0.01],[1,0.1],[1,1]} ,然后针对每组超参数分别建立一个模型,然后选择测试误差最小的那组超参数。换句话说,我们需要从超参数空间中寻找最优的超参数,很像一个网格中找到一个最优的节点,因此叫网格搜索。

2.2随机搜索 RandomizedSearchCV() :
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html?highlight=randomizedsearchcv#sklearn.model_selection.RandomizedSearchCV
网格搜索相当于暴力地从参数空间中每个都尝试一遍,然后选择最优的那组参数,这样的方法显然是不够高效的,因为随着参数类别个数的增加,需要尝试的次数呈指数级增长。有没有一种更加高效的调优方式呢?
那就是使用随机搜索的方式,这种方式不仅仅高效,而且实验证明,随机搜索法结果比稀疏化网格法稍好(有时候也会极差,需要权衡)。参数的随机搜索中的每个参数都是从可能的参数值的分布中采样的。与网格搜索相比,这有两个主要优点:
可以独立于参数数量和可能的值来选择计算成本;
添加不影响性能的参数不会降低效率。

3.实战
本节,我们还是基于Boston数据集进行分析,分别对决策树回归模型和支持向量回归模型进行调参优化,均分别使用网格搜索和随机搜索。
导入数据集,并切分:

#数据导入与数据划分
from sklearn import datasets
import pandas as pd
from sklearn.model_selection import train_test_split

boston = datasets.load_boston()     # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
#boston_data.head()

#数据划分
X_train, X_test, y_train,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值