统计学习:模型评估与选择--调参与最终模型(网格搜寻与贝叶斯优化hyperopt工具包)python代码

一、网格法超参数选择本次使用k近邻算法为例,k近邻算法需要的超参数类型有三个:1、n_neighbors= 邻居个数 输入为int型数据2、algorithm= 数据所使用的算法类型,有brute,ball_tree, kd_tree三种类型可选3、p= 距离表示选择 1表示哈曼顿距离, 2表示欧氏距离代码如下:代码的思路为首先导入鸢尾花数据集,然后将其划分为训练集和测试集,这一步使用工具为train_test_split,然后实例化一个k近邻算法的模型,创建三个列表分别存储k近邻算法需要用
摘要由CSDN通过智能技术生成

一、网格法超参数选择
本次使用k近邻算法为例,k近邻算法需要的超参数类型有三个:
1、n_neighbors= 邻居个数 输入为int型数据
2、algorithm= 数据所使用的算法类型,有brute,ball_tree, kd_tree三种类型可选
3、p= 距离表示选择 1表示哈曼顿距离, 2表示欧氏距离
代码如下:
代码的思路为首先导入鸢尾花数据集,然后将其划分为训练集和测试集,这一步使用工具为train_test_split,然后实例化一个k近邻算法的模型,创建三个列表分别存储k近邻算法需要用到的参数,然后将其组合为字典形式;
使用StratifiedkFold工具指定交叉验证的方式,然后创建网格搜寻对象,将模型,数据,以及交叉验证形式传入网格搜寻内求解每一种组合的精确率,计算完毕后找到其中最优的一组解,将其导入新的k紧邻算法模型并利用测试集测试其泛化性,得到精确率为97.8%

#网格搜寻工具包
from sklearn.model_selection import GridSearchCV
# 数据集包
from sklearn import datasets
# k近邻算法工具包
from sklearn.neighbors import KNeighborsClassifier
# 是KFold()的变种,采用分层分组的形式(有点类似分层抽样), 使每个分组中各类别的比例 同整体数据中各类别的比例尽可能的相同。(它相对于KFold()方法更完善
from sklearn.model_selection import StratifiedKFold
# 划分样本集工具
from sklearn.model_selection import train_test_split
import numpy

# 划分数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, shuffle=True, stratify=y)
# 创建K近邻算法实例
knn_model = KNeighborsClassifier()
# 超参数设置调优
# 近邻个数调优
n_neighbors = [3, 5, 7, 9, 11, 13, 15]
# 参数结构算法调优
algorithm = ["ball_tree", "kd_tree", "brute"]
# 距离参数调优 1:曼哈顿距离 2:欧氏距离
p = [1, 2]
# 参数网格
param_grid = dict(n_neighbors=n_neighbors, algorithm=algorithm, p = p)
# 分层采样,交叉验证
kflod = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)
# 网格搜索
grid_search = GridSearchCV(knn_model, param_grid, scoring="accuracy", cv=kflod)
# 拟合数据
grid_result = grid_search.fit(X_train, y_train)
# 打印最好的超参数
print("best :", grid_result.best_score_, grid_result
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值