机器学习4超参数问题

news2024/11/25 21:27:58

文章目录

  • 一、超参数问题1
    • 1、超参数:
    • 2、如何寻找好的超参数?
  • 二、超参数问题2
    • 综上所述
  • 三、超参数问题3
    • 搜索明可夫斯基距离相应的p;
    • 更多关于距离的定义:
      • 欧拉距离
      • 曼哈顿距离
      • 进一步推广可以发现其中有一定一致性
      • 明可夫斯基距离:(此时我们获得了一个新的超参数,这个超参数就是p)
      • 其他也有用相似度代替计算距离的方式:
  • 四、超参数问题4

一、超参数问题1

1、超参数:

在运行机器算法之前需要指定的参数,knn算法里面的k就是一个最为典型的超参数;
此处与超参数相对应的就是模型参数:
算法过程中学习的参数;
KNN算法中没有模型参数,KNN算法中的k是典型的超参数
调参调的参数也是超参数;

2、如何寻找好的超参数?

通过领域知识,经验数值,实验搜索;
这就是一个调参的过程,也就是面对一个算法去寻找最好的超参数的值

import numpy as np
from sklearn import datasets
digits=datasets.load_digits()
x=digits.data
y=digits.target
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
from sklearn.neighbors import KNeighborsClassifier
knn_clf=KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(x_train,y_train)
knn_clf.score(x_test,y_test)
best_score=0.0#先设定一个最好的准确度的值初始化为0
best_k=-1#其次我们设置一个变量存储我们已经找到的最好的一个k初始值为-1
for k in range(1,11):#循环查找k属于[1,11)中最合适的
    knn_clf=KNeighborsClassifier(n_neighbors=k)
    knn_clf.fit(x_train,y_train)
    score=knn_clf.score(x_test,y_test)
    if score>best_score:
        best_k=k
        best_score=score
print("best_k=",best_k)
print("best_score=",best_score)

在这里插入图片描述

二、超参数问题2

(超参数问题之上改进一个bug)普通的k近邻算法,比如说k取三的时候,我们就找到当前离预测节点最近的三个点进行投票,由于可能存在的两蓝一红导致蓝胜却忽略了待测点离红的距离到底多近的情况,导致结果出现偏差,如右图所示;
或者当三个节点进行投票却遇到了三个不同的类,要将待测节点判定为三个类之一,此时投票却刚好是平票就导致无法区分;如右图所示,而此时,在普通knn算法的基础上加上权重函数,即可解决这些问题;
在这里插入图片描述
在这里插入图片描述

best_method=""
best_score=0.0#先设定一个最好的准确度的值初始化为0
best_k=-1#其次我们设置一个变量存储我们已经找到的最好的一个k初始值为-1
for method in["uniform","distance"]:
    for k in range(1,11):#循环查找k属于[1,11)中最合适的
        knn_clf=KNeighborsClassifier(n_neighbors=k,weights=method)
        knn_clf.fit(x_train,y_train)
        score=knn_clf.score(x_test,y_test)
        if score>best_score:
            best_k=k
            best_score=score
            best_method=method
print("best_method=",best_method)
print("best_k=",best_k)
print("best_score=",best_score)

在这里插入图片描述

best_method="distance"
best_score=0.0#先设定一个最好的准确度的值初始化为0
best_k=-1#其次我们设置一个变量存储我们已经找到的最好的一个k初始值为-1
for k in range(1,11):#循环查找k属于[1,11)中最合适的
    knn_clf=KNeighborsClassifier(n_neighbors=k,weights="distance")
    knn_clf.fit(x_train,y_train)
    score=knn_clf.score(x_test,y_test)
    if score>best_score:
        best_k=k
        best_score=score
print("best_method=",best_method)
print("best_k=",best_k)
print("best_score=",best_score)

在这里插入图片描述

综上所述

有时候考虑距离预测的结果其实并不如不考虑普通的预测结果准确;不同的数据集不同的考虑方式不同的随机抽取比率都可能对预测准确率有所影响会跟预想有偏差,故而用计算机计算准确率直观看结果更好;

三、超参数问题3

搜索明可夫斯基距离相应的p;

更多关于距离的定义:

欧拉距离

在这里插入图片描述

曼哈顿距离

在这里插入图片描述

进一步推广可以发现其中有一定一致性

在这里插入图片描述

明可夫斯基距离:(此时我们获得了一个新的超参数,这个超参数就是p)

在这里插入图片描述

其他也有用相似度代替计算距离的方式:

在这里插入图片描述

%time   #由于p比较大的时候,运算执行比较慢,所以在这里使用计时函数进行计时


best_p=-1#p初始化为-1
best_score=0.0#先设定一个最好的准确度的值初始化为0
best_k=-1#其次我们设置一个变量存储我们已经找到的最好的一个k初始值为-1
for k in range(1,11):#循环查找k属于[1,11)中最合适的
    for p in (1,6):
        knn_clf=KNeighborsClassifier(n_neighbors=k,weights="distance",p=p)
        knn_clf.fit(x_train,y_train)
        score=knn_clf.score(x_test,y_test)
        if score>best_score:
            best_k=k
            best_score=score
            best_p=p
print("best_p=",best_p)
print("best_k=",best_k)
print("best_score=",best_score)

在这里插入图片描述

四、超参数问题4

(直接查找到一个最好的超参数们的组合)超参数不仅仅如此,knn实际上还有更多的超参数,对这些超参数的选择就可以选用如上搜索的策略来找到适合我们的最好的超参数,事实上这种策略有一个名字叫做网格搜索;
超参数之间可能存在依赖的关系,我们怎么更好的一次性的把他们一一列出来运行一边程序就能得到最好的一个超参数的组合?
————事实上
scikit learing为网格搜索方式封装了一个专门的函数,grid search;
在这里插入图片描述
这里跑的时间四分多钟,属实是我的计算机性能不怎么样;
在这里插入图片描述
运行完网格搜索之后可以调用grid_search.best_estimator_,返回的是网格搜索搜索到的最佳分类器对应的参数:n_neighbors=3, p=3, weights=‘distance’;
这里查找到的最优超参数的值和之前方法找到的结果不同,这个原因是因为,在网格搜索当中用来评价分类器准确度的方式是更加复杂的一种方式,也就是CV——交叉验证;顾名思义这种方法获得的准确度相对来说更加准确;
在这里插入图片描述
在这里,如果我们想知道这个分类器对应的准确度到底是多少可以调用:grid_search.best_score_
这里看到的准确度没有之前的方法得出的数据更接近1似乎我们这个分类器效果不是那么好,其实并不是这样的,因为我们的评判标准是不一样的;
调用:grid_search.best_params_就可以得到对于我们数据集而言最佳参数是谁//拿到参数对应的分类器:knn_clf=grid_search.best_estimator_
对于待测数据预测的准确率:knn_clf.score(x_test,y_test)
在这里插入图片描述
#n_jobs计算机分配出几个核来进行并行处理(具体要看你的计算机到底有几个核)
#n_job=-1代表不管有几个全都用;verbose=2即在搜索的过程中进行一些输出,如果能看到运行过程中相应的一些信息就不会等的那么焦急并且可以帮我们
#即使了解当前搜索状态,verbose可以传入一个整数,这个值越大则相应输出的信息的值就越详细;
%%time
grid_search=GridSearchCV(knn_clf,param_grid,n_jobs=-1,verbose=2)
grid_search.fit(x_train,y_train)
可以看到要搜索60种不同的情况;并且可以看到全核运转下运行时间为43秒,确实速度快了很多;

%%time
grid_search=GridSearchCV(knn_clf,param_grid,n_jobs=-1,verbose=2)
grid_search.fit(x_train,y_train)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全网最全(万字整理)_SpringBoot整合ThymeLeaf

文章目录SpringBoot整合Thymeleaf0x01_入门案例0x02_Thymeleaf视图解析简介0x03_Thymeleaf的表达式0x04_Thymeleaf的标签th:textth:eachth:objectth:hrefth:actionth:onclickth:ifth:value0x05_内置对象#dates#Strings#Numbers域对象0x0x_补充一些概念国际化Thymeleaf缓存区重定…

01-09-hive-入门基本概念-hive-mysql安装

01-hive-入门基本概念: 什么是hive hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xf…

算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)

算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2271 完全立方数32. MT2272 质数率3. MT2273 元素共…

如何修复 Windows 11/10上的 0x8007023e Windows 更新错误

修复 0x8007023e 错误 运行 Windows Update 疑难解答重置 Windows Update 组件使用 DISM 工具修复 Windows Update 客户端从 Microsoft update Catalog 网站下载并安装更新运行 Microsoft 支持和恢复助手系统更新根据 Windows 质量更新服务节奏发布到 Windows 设备。如果当您尝…

zookeeper学习(一)zk特性与节点数据类型详解(2022)

Zookeeper是一个开源的分布式协调框架,主要用来解决分布式集群中应用系统的一致性问题。从设计模式角度来理解其实zk是一个基于观察者模式设计的分布式服务管理框架。 CAP理论: cap理论指出对于一个分布式计算系统来说,不可能同时满足以下三…

COMSOL泰森多边形Voronoi图多孔骨架优化模型受力分析

Voronoi模型 在comsol内建立泰森多边形骨架支撑网格,模型采用一般的多边形泰森多边形孔隙以及样条曲边泰森多边形孔隙做对比研究,分析模型在承受压力荷载下的应力分布。通过comsol的固体力学计算可看出拟圆形Voronoi孔隙支撑结构的应力分布更为合理&…

【LIMU-Bert论文阅读】

LIMU-BERT: Unleashing the Potential of Unlabeled Data for IMU Sensing Applications 题目重点: 充分利用无标签数据适用于IMU传感器应用(并没有指出specfic task) 文章核心: 如何根据IMU数据的特征设计出LIMU-Bert&#xff0c…

基于模糊逼近系统不确项的滑模自适应控制

目录 前言 1.系统描述 2.控制器设计 3.模糊推理估计不确定f 3.1构造模糊系统 3.2模糊推理过程 3.3 自适应律设计 4.仿真分析 4.1仿真模型 4.2仿真结果 5.总结 前言 在一般的建模仿真中,我们假设模型都是可以用数学模型描述出来的是确定的,称…

1. 一些截图方法的比较;2. 将截图直接转换为PDF并拼接,与插入Word后再转换为PDF的对比

1. 一些截图方法的比较 1.1. 有时候当某个软件没有导出功能,或者导出功能受限,比如 tableau public,但又需要获取展示出的可视化信息时,就需要用到截图。如果这些截图还要用在正式文档中,就需要是高清的,至…

Python预测卡塔尔世界杯身价最高的英格兰要夺冠?!

文章目录🏳️‍🌈 1. 数据🏳️‍🌈 2. 绘图2.1 绘制表头2.2 绘制排名、球队以及国旗2.3 绘制身价柱状图2.4 绘制FIFA排名散点图2.5 设置背景2.6 设置标题🏳️‍🌈 3. 更多可视化项目源码数据:大…

关于 find 命令的15个超级有用的例子

find 命令用于在 Linux 命令行中搜索文件和目录。 find 是功能最强大、使用最频繁的命令之一,同时也是选项最多的命令之一,它有50多个选项,很容易让人弄混了,特别是当它与 exec 或 xargs 命令一起使用的时候。 作为系统管理员或…

AI创作教程之 如何在本地 PC 上运行稳定的 Diffusion 2.0 (无代码指南)

AI 的热门图像生成器 Stable Diffusion日前发布了全新的 2.0版本。新版本比以前的版本带来了许多进步和改进。OpenCLIP 中新的深度检测和更好的文本到图像模型是我最兴奋的功能。 查看本文以查看 SD 2.0 中新增功能的完整列表。 在本文中,我将向您展示如何在本地 PC 上试用新…

PHP基于thinkphp的在线教学网站#毕业设计

在线教学系统采用B/S模式,促进了在线教学系统的安全、快捷、高效的发展。传统的管理模式还处于手工处理阶段,管理效率极低,随着用户的不断增多,传统基于手工管理模式已经无法满足当前用户需求,随着信息化时代的到来&am…

DataFrame API入门操作及代码展示

文章目录DataFrame风格编程DSL风格编程代码示例相关API相关代码示例SQL风格编程代码示例相关API相关代码Fucntions包基于SparkSQL的WordCount代码编写DataFrame风格编程 DataFrame支持两种风格进行编程 DSL风格SQL风格 DSL称之为领域特定语言,其实就是指DataFrame特…

Config配置文件读写

配置文件本质上是包含成功操作程序所需信息的文件,这些信息以特定方式构成。它们不是在程序中进行硬编码,而是用户可配置的,通常存储在纯文本文件中。 写配置文件 使用函数WritePrivateProfileStringW写配置文件 BOOL WritePrivateProfile…

filter: grayscale(1); | 网页变灰

效果 MDN: https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function/grayscalegrayscale(amount)对图片进行灰度转换转换值的大小,可以是 或 . 当值为 100% 时,灰度最大。0% 时与原图没有区别。0% 到 100% 之间的值会使灰度线性变化。amount …

JVM学习笔记(2)—— 运行时数据区概述及线程

在上一篇中我们讲了JVM的类加载子系统,现在我们就来到了运行时数据区。而不同版本的JVM对于内存的划分方式和管理机制存在着部分差异(最典型的就是方法区实现的差异),本文针对经典的Hotspot jvm进行讨论,对运行时数据区…

Mongoose应用和文件上传

一、Express框架访问MongoDB数据库 1、目的: ​ (1)mongoose模块的使用 ​ (2)学会代码的封装:dao层、service层、接口层 ​ (3)MVC设计思想:M(Model)、V(View)、C(C…

WEB前端期末大作业——关于酒店主题网站设计——高级酒店公寓网页(4页)

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

如何使用gitee码云?创建库,克隆远程仓库,上传代码,小绿格等问题

目录 前提软件:先安装Git,再安装TortoiseGit(可以在网上找找~默认下一步安装即可) 一、访问网站Gitee - 基于 Git 的代码托管和研发协作平台 二、创建库 二、克隆远程仓库到本地电脑 - 仓库与本地链接 三、上传文件到gitee库里…