超参数

超参数

很多时候,对于算法来说,关于这个传入的参数,传什么样的值是最好的?

这就涉及到了机器学习领域的超参数

超参数简单来说就是在我们运行机器学习之前用来指定的那个参数,就是在算法运行前需要决定的参数

像是knn算法中的k就是典型的超参数

同时,还有一种是模型参数,即在算法过程中学习的参数,不过由于KNN算法没有模型参数,这里就不再赘述

那么怎么才能寻找到好的参数?

大致分为三点:

领域知识

经验数值

实验搜索

前两种是需要专业环境来养成,关于最后一种实验搜索就可以实践体现出来

实践部分(实验搜索)

为保证可复现,种子为666,数据集为sklearn的手写数字数据集

如果我们想要寻找一个好的k,可以使用一个循环,在初始的时候设置成最好的值为0,将for范围为从第二个参数开始的是个参数,那么我们在循环的过程中,每一次我们都创建一个knn_clf,进行fit操作,这样我们就可以得到当前k的分类准确度是多少

然后我们就可以开始比较,如果当前的score比历史上的score都好,那么就将现在的变成best_score,k同理,最后输出最好的k和其对应的预测准确率

  best_score = 0.0
best_k = -1
for k in range(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)

然而k近邻算法中是不止一个K这样的超参数

还存在一个超参数,距离的权重(可使用倒数比较)

本来如果按照原有的knn算法,当出现三个不一样种类的情况的时候,我们只能随机出来得到一个样本,但是使用距离权重以后,可以有效地解决这种平票的问题

这样,我们引入距离这个想法以后,算法就变成了需不需要考虑距离这个要素的情况

  best_method = ""
best_score = 0.0
best_k = -1
for method in ["uniform","distance"]:
for k in range(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)

输出结果

那么距离的定义到底是什么

我们到底需要使用哪种距离



通过对曼哈顿距离和欧拉距离的变形推广,我们可以得到明科夫斯基距离

这样我们就获得了一个新的超参数 p

在sklearn中,p的默认为2,相当于取得是欧拉距离

那么继续修改算法为

  %%time
best_p = -1
best_score = 0.0
best_k = -1 for k in range(1,11):
for p in range(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)

一般这种叫做网格搜索策略

【笔记】KNN之超参数的更多相关文章

  1. 机器学习:调整kNN的超参数

    一.评测标准 模型的测评标准:分类的准确度(accuracy): 预测准确度 = 预测成功的样本个数/预测数据集样本总数: 二.超参数 超参数:运行机器学习算法前需要指定的参数: kNN算法中的超参数 ...

  2. 【笔记】KNN之网格搜索与k近邻算法中更多超参数

    网格搜索与k近邻算法中更多超参数 网格搜索与k近邻算法中更多超参数 网络搜索 前笔记中使用的for循环进行的网格搜索的方式,我们可以发现不同的超参数之间是存在一种依赖关系的,像是p这个超参数,只有在 ...

  3. DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

    1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,所以我们对数据做如下处理: 如图所示,我 ...

  4. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 正则化以及梯度相关

    笔记:Andrew Ng's Deeping Learning视频 参考:https://xienaoban.github.io/posts/41302.html 参考:https://blog.cs ...

  5. deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch正则化和程序框架 听课笔记

    这一周的主体是调参. 1. 超参数:No. 1最重要,No. 2其次,No. 3其次次. No. 1学习率α:最重要的参数.在log取值空间随机采样.例如取值范围是[0.001, 1],r = -4* ...

  6. [DeeplearningAI笔记]02_3.1-3.2超参数搜索技巧与对数标尺

    Hyperparameter search 超参数搜索 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1 调试处理 需要调节的参数 级别一:\(\alpha\)学习率是最重要的需要调节的 ...

  7. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

  8. ng-深度学习-课程笔记-8: 超参数调试,Batch正则(Week3)

    1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batc ...

  9. 【笔记】CART与决策树中的超参数

    CART与决策树中的超参数 先前的决策树其实应该称为CART CART的英文是Classification and regression tree,全称为分类与回归树,其是在给定输入随机变量X条件下输 ...

随机推荐

  1. 关于mysql binlog二进制

    binlog 在mysql中,当发生数据变更时,都会将变更数据的语句,通过二进制形式,存储到binlog日志文件中. 通过binlog文件,你可以查看mysql一段时间内,对数据库的所有改动. 也可以 ...

  2. centos7 php开发环境安装-composer

    1.安装composer cd /usr/local/src curl -sS https://getcomposer.org/installer | php mv composer.phar /us ...

  3. buu [MRCTF2020]EasyCpp

    上次没写出,这次认真分析了一下,发现自己的调试水平也有了上涨,也看了一些C++逆向的文章,尤其是stl,发现C++的oop还是挺复杂,这题还没考啥虚函数的还行了. 一.拖入ida,找到主函数,还是挺容 ...

  4. SpEL表达式总结(转)

    前言 SpEL(Spring Expression Language),即Spring表达式语言,是比JSP的EL更强大的一种表达式语言.为什么要总结SpEL,因为它可以在运行时查询和操作数据,尤其是 ...

  5. Blazor 数据绑定开发指南

    翻译自 Waqas Anwar 2021年3月21日的文章 <A Developer's Guide to Blazor Data Binding> [1] 现如今,大多数 Web 应用程 ...

  6. JVM优化过头了,直接把异常信息优化没了?

    你好呀,我是why. 你猜这次我又要写个啥没有卵用的知识点呢? 不好意思,问的稍微有点早了,啥提示都没给,咋猜呢,对吧? 先给你上个代码: public class ExceptionTest {   ...

  7. 【Mysql】InnoDB 引擎中的页目录

    一.页目录和槽 接上一篇,现在知道记录在页中按照主键大小顺序串成了单链表. 那么我使用主键查询的时候,最顺其自然的办法肯定是从第一条记录,也就是 Infrimum 记录开始,一直向后找,只要存在总会找 ...

  8. MySQL中的redo log和undo log

    MySQL中的redo log和undo log MySQL日志系统中最重要的日志为重做日志redo log和归档日志bin log,后者为MySQL Server层的日志,前者为InnoDB存储引擎 ...

  9. 2021 NOI冬令营

    2021 NOI冬令营 -- 本来想写得稍微文艺一点的,但是停课这么久已经退化到不会写文章了. 毕竟省选了我才来补的,时间也过去很久了. 毕竟这次我没有获得任何奖项. 我唯一的获得就是-- --好好看 ...

  10. JDK 和 CGLib 实现动态代理和区别

    JDK 和 CGLib 实现动态代理和区别 在日常的开发中,Spring AOP 是一个非常常用的功能.谈到 AOP,自然离不开动态代理. 那么,基于 JDK 和 CGLib 如何实现动态代理,他们之 ...