在了解了KNN的基本原理之后,我们需要学习如何在sklearn中调用KNN算法以及如何用GridSearchCV进行调参

首先导入必要的库以及我们所使用的数据集:iris

1 from sklearn.neighbors import KNeighborsClassifier
2 from sklearn import datasets
3 from sklearn.model_selection import GridSearchCV
4 from sklearn.model_selection import train_test_split
5 iris = datasets.load_iris()
6 data = iris.data
7 label = iris.target

由于KNN对极端数据比较敏感,所以一般会对数据进行归一化,此处数据集比较友好就没有归一化了

将整个的数据集分成训练集和测试集,并创建一个KNN分类器对象

1 X_train,X_test,y_train,y_test = train_test_split(data,label,test_size=0.3,random_state=2)
2 knn_clf = KNeighborsClassifier()

由于sklearn中的KNN方法有很多超参数,所以需要调参,这里只介绍常用的超参数:

weights:有两种参数:'uniform'和'distance',前者表示最原始的不带距离权重的KNN,后者指带有距离权重的KNN,比如说,A到B的距离为1,A到C的距离为2,A到D的距离为4,而且B属于M类,C和D属于N类,此时KNN算法的K如果等于3,则最终会将A判断为N类,但实际上A距离B最近,应该属于M类,故应该使用距离的倒数来表示距离,此时AB距离为1,AC距离为1/2,AD距离为1/4,AC+AD=3/4<1,故A点属于M类,此外,这种算法还能解决K个最近距离就有K类的问题。

n_neighbors:邻居个数,不再赘述

p:p=1表示曼哈顿距离,p=2表示欧式距离,p可以大于2,注意p参数只有在weights='distance'时才有

接下来介绍GridSearchCV的用法,先上代码:

 1 param_grid = [
 2     {
 3         'weights':['uniform'],
 4         'n_neighbors':[i for i in range(1,11)]
 5     },
 6     {
 7         'weights':['distance'],
 8         'n_neighbors':[i for i in range(1,11)],
 9         'p':[i for i in range(1,6)]
10     }
11 ]
12 grid_search = GridSearchCV(knn_clf,param_grid,n_jobs=-1,verbose=2)

GridSearchCV常用超参数:

estimator:创建的对象,如上的knn_clf

param_grid:是一个列表,列表里是算法对象的超参数的取值,用字典存储

n_jobs:使用电脑的CPU个数,-1代表全部使用

verbose:每次CV时输出的格式

接下来就用grid_search对象训练数据

1 %%time
2 grid_search.fit(X_train,y_train)

训练结果如下

grid_search.best_estimator_

这是取出参数最好的一组对应的分类器

grid_search.best_score_

这是取出最好的超参数组合对应的准确率

grid_search.best_params_

这是取出最好的一组超参数

knn_clf = grid_search.best_estimator_
y_pre = knn_clf.predict(X_test)
knn_clf.score(X_test,y_pre)

用最好的一组超参数的分类器对象去预测测试集,并计算准确率。

如有错误欢迎大家指出,谢谢

转载于:https://www.cnblogs.com/wf-ml/p/9615398.html

sklearn之KNN详解+GridSearchCV使用方法相关推荐

  1. python knnsearch_sklearn之KNN详解+GridSearchCV使用方法

    在了解了KNN的基本原理之后,我们需要学习如何在sklearn中调用KNN算法以及如何用GridSearchCV进行调参 首先导入必要的库以及我们所使用的数据集:iris 1 from sklearn ...

  2. sklearn.linear_model.Perceptron详解

    sklearn.linear_model.Perceptron详解 形式 class sklearn.linear_model.Perceptron(*, penalty=None, alpha=0. ...

  3. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  4. linux中date使用方法,linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例)...

    linux命令详解date使用方法(计算母亲节和父亲节日期脚本示例) 发布于 2016-02-07 15:58:40 | 108 次阅读 | 评论: 0 | 来源: 网友投递 LinuxLinux是一 ...

  5. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  6. csrf漏洞防御方案_CSRF 漏洞原理详解及防御方法

    跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻击 ...

  7. python one hot编码_对python sklearn one-hot编码详解

    one-hot编码的作用 使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点 将离散特征通过one-hot编码映射到欧式空间,是因为,在回归,分类,聚类 ...

  8. 计算机网络ping所有用法,ping命令详解和使用方法【详解】

    随着科技的发展,计算机的发展也非常快,如今已经进入大部分的家庭之中,成为人们日常生活中必不可少的一个部分.当计算机出现一些小问题,我们就可以通过ping命令来查看电脑出现问题的原因,从而找到解决问题的 ...

  9. findindex遍历 js_详解ES6数组方法find()、findIndex()的总结

    本文主要讲解ES6数组方法find()与findIndex(),关于JS的更多数组方法,可参考以下: 1. find() 该方法主要应用于查找第一个符合条件的数组元素,即返回通过测试(函数内判断)的数 ...

最新文章

  1. 【综述专栏】从微分几何和代数拓扑的视角来重新探讨图神经网络
  2. ACM Computer Factory
  3. 【洛谷 P3194】 [HNOI2008]水平可见直线 (单调栈)
  4. python图片二进制流转换成图片_python将图片二进制数据转换成Django file对象
  5. Ubuntu 18.04 固定ip 设置方法
  6. 高职高考全国计算机证书查询,2017年广东3+证书(高职高考)录取结果查询入口:附广东3+证书(高...
  7. php5+init,PHP mysqli_stmt_init() 函数
  8. caffe︱cifar-10数据集quick模型的官方案例
  9. unix服务器上传文件,Unix lrzsz命令 上传本地文件到服务器 / 发送文件到客户端...
  10. js实现轮播图常规类(原生JS,没有任何框架)
  11. ubuntu etc文件夹在哪_嵌入式Linux开发学习之 Ubuntu 和 Windows 文件互传
  12. 基于C语言实现的遗传算法系统
  13. HTC全景视频,2D 3D视频播放器下载教程
  14. 最新版《神经网络和深度学习》中文版.pdf
  15. 掌握 3 个搜索技巧,在 GitHub 上快速找到实用软件资源
  16. 微信平台自动获取Token
  17. 用计算机如何绘制流程图,电脑上怎么绘制流程图?电脑小白也能学会的流程图制作方法...
  18. Jaca定时任务-01-进程级别的Timer,ScheduledExecutorService,springtask
  19. Firefox(火狐浏览器)常用插件
  20. js实现百度换肤效果

热门文章

  1. java object 判断null_java判断object为null
  2. php网址图片怎么转based4,Ionic4 Base64 转化成图片插件-Base64 转化成图片Base64 To Gallery - Ionic Native...
  3. SpringBoot日志logback-spring.xml分环境
  4. idea怎么调试jsp页面_JSP+Servlet+C3P0+Mysql实现的YCU movies电影网站
  5. php逆波兰表达式,PHP逆波兰示意与表达式计算
  6. 图像局部特征(十八)--BOW
  7. python纸牌游戏_《升级》扑克牌游戏——Python实现
  8. 为什么使用3msip2协议_TCP协议专场
  9. php redis sorted set,Redis 有序集合(sorted set)
  10. 中小型网络工程设计与实现_小型网络如何实现经济可靠的设计和部署 (一)...