K-临近算法(KNN)

K nearest neighbour

1、k-近邻算法原理

简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类。

  • 优点:精度高、对异常值不敏感、无数据输入假定。
  • 缺点:时间复杂度高、空间复杂度高。
  • 适用数据范围:数值型和标称型。

工作原理

存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们 只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。 最后 ,选择K个最相似数据中出现次数最多的分类,作为新数据的分类

欧几里得距离(Euclidean Distance)

欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

2、在scikit-learn库中使用k-近邻算法

  • 分类问题:from sklearn.neighbors import KNeighborsClassifier

  • 回归问题:from sklearn.neighbors import KNeighborsRegressor

1)用于分类(用鸢尾花作为示例)

导包,机器学习的算法KNN、数据鸢尾花

  1. # scikit-learning 提供数据样本,可以供我们研究机器学习模型
  2. # 可以使用load方法加载datasets中的各种数据
  3. from sklearn import datasets
  4. import matplotlib.pyplot as plt
  1. iris = datasets.load_iris() # load是获取本地的数据集 iris就是鸢尾花数据集
  2. data = iris.data # 特征值
  3. target = iris.target # 目标值
  4. target_names = iris.target_names # 目标的名字
  5. feature_names = iris.feature_names # 特征的名字
  6. df = DataFrame(data,columns=feature_names)
  7. df.plot()

画图研究前两个特征和分类之间的关系(二维散点图只能展示两个维度)

  1. # 取出 前两个特征 特征0 作为横轴 特征1作为纵轴
  2.  
  3. X_train = data[:,:2]
  4. y_train = target
  5.  
  6. plt.scatter(X_train[:,0],X_train[:,1],c=target) # 特征0作为点的横坐标 特征1作为点的纵坐标 target值作为点的颜色映射
  7. plt.xlabel(feature_names[0])
  8. plt.ylabel(feature_names[1])

定义KNN分类器

真正判断分类的时候 肯定是用所有的4个特征 效果更好
这里只用两个特征来判断分类 也可以 但是效果肯定不如4个的好
这里之所以用两个 是为了画图 给大家展示效果

  1. # 获取模型
  2. from sklearn.neighbors import KNeighborsClassifier
  3. # 使用两个特征来训练模型
  4. # n_neighbors可以自己根据经验给定 一般给的是奇数(偶数容易造成 两种分类一样多的情况)
  5. knn = KNeighborsClassifier(n_neighbors=7)

第一步,训练数据

  1. knn.fit(X_train,y_train)

第二步预测数据:所预测的数据,自己创造,就是上面所显示图片的背景点

生成预测数据

  1. # 要 取遍 平面 上 所有点
  2. # 首先 x的范围内要取遍 y的范围内也要取遍
  3. x = np.arange(X_train[:,0].min()-0.5,X_train[:,0].max()+0.5,0.02) # 取遍x轴
  4.  
  5. y = np.arange(X_train[:,1].min()-0.5,X_train[:,1].max()+0.5,0.02) # 取遍y轴
  6.  
  7. # 交叉 取遍 整个平面
  8. X,Y = np.meshgrid(x,y) # 返回两个 ndarray 第一个是 平面上所有点的x座标 第二个是平面上所有点的y座标
  9.  
  10. # c_函数 可以使行 变列 (我们使用这个函数 就可以 把X,Y里面的值 组合成座标点)
  11. X_test = np.c_[X.flatten(),Y.flatten()] # 使用reshape去变形也可以
  12.  
  13. plt.scatter(X_test[:,0],X_test[:,1])# 查看是否确定是取遍平面中的所有点
  14.  
  15. # 模型预测出来的结果 一般叫y_
  16. y_ = knn.predict(X_test)
  17. y_

以图形化的效果展示结果

  1. plt.scatter(X_test[:,0],X_test[:,1],c=y_)

  1. from matplotlib.colors import ListedColormap
  2. # ListedColormap([]) # 创建颜色映射对象
  3. cm1 = ListedColormap(
  4. ['#FFAAAA','#AAFFAA','#AAAAFF']
  5. )
  6.  
  7. cm2 = ListedColormap(
  8. ['#FF0000','#00FF00','#0000FF']
  9. )
  10.  
  11. plt.scatter(X_test[:,0],X_test[:,1],c=y_,cmap=cm1) # c是color 会根据 传入的不同数值 去填充不同的颜色
  12. plt.scatter(X_train[:,0],X_train[:,1],c=target,cmap=cm2)
  13. plt.xlabel(feature_names[0])
  14. plt.ylabel(feature_names[1])
  15. plt.title('很棒的分类图',fontproperties='KaiTi',fontsize=45,color='r')

K-临近算法(KNN)的更多相关文章

  1. 秒懂机器学习---k临近算法(KNN)

    秒懂机器学习---k临近算法(KNN) 一.总结 一句话总结: 弄懂原理,然后要运行实例,然后多解决问题,然后想出优化,分析优缺点,才算真的懂 1.KNN(K-Nearest Neighbor)算法的 ...

  2. [Machine-Learning] K临近算法-简单例子

    k-临近算法 算法步骤 k 临近算法的伪代码,对位置类别属性的数据集中的每个点依次执行以下操作: 计算已知类别数据集中的每个点与当前点之间的距离: 按照距离递增次序排序: 选取与当前点距离最小的k个点 ...

  3. 机器学习(Machine Learning)算法总结-K临近算法

    一.算法详解 1.什么是K临近算法 Cover 和 Hart在1968年提出了最初的临近算法 属于分类(classification)算法 邻近算法,或者说K最近邻(kNN,k-NearestNeig ...

  4. K临近算法

    K临近算法原理 K临近算法(K-Nearest Neighbor, KNN)是最简单的监督学习分类算法之一.(有之一吗?) 对于一个应用样本点,K临近算法寻找距它最近的k个训练样本点即K个Neares ...

  5. k近邻算法(KNN)

    k近邻算法(KNN) 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. from sklearn.model_selection ...

  6. k邻近算法(KNN)实例

    一 k近邻算法原理 k近邻算法是一种基本分类和回归方法. 原理:K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实 ...

  7. <机器学习实战>读书笔记--k邻近算法KNN

    k邻近算法的伪代码: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离: (2)按照距离递增次序排列 (3)选取与当前点距离最小的k个点 (4)确定 ...

  8. 机器学习(四) 分类算法--K近邻算法 KNN (上)

    一.K近邻算法基础 KNN------- K近邻算法--------K-Nearest Neighbors 思想极度简单 应用数学知识少 (近乎为零) 效果好(缺点?) 可以解释机器学习算法使用过程中 ...

  9. 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!

    1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...

  10. 机器学习(四) 机器学习(四) 分类算法--K近邻算法 KNN (下)

    六.网格搜索与 K 邻近算法中更多的超参数 七.数据归一化 Feature Scaling 解决方案:将所有的数据映射到同一尺度 八.scikit-learn 中的 Scaler preprocess ...

随机推荐

  1. dyld_shared_cache_extract_dylibs failed

    文章来源:https://www.jianshu.com/p/e276a784fbee   s.png 数据线插上手机 Xcode->window   3.png   2.png 点击Unpai ...

  2. 编写Shell脚本的最佳实践

    编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...

  3. python基础(1)-helloworld

    搭建python运行环境 下载python安装包 配置好环境变量,可参考此链接 第一个helloworld #单行注释 '''多行注释''' """多行注释"& ...

  4. [js]js栈内存的全局/私有作用域,代码预解释

    js代码如何执行的 浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存) --> 执行js需要预解释 - 带var : 提前声明 - 带function关键字的: 提前声明+定义 js ...

  5. 用maven创建一个web项目

    下面所使用的Eclipse开发工具为Eclipse Java EE IDE 版本. 1.创建一个maven项目,如图所示: 选择“maven-archetype-webapp”,如图所示: 后面几步按 ...

  6. nginx----------linux下nginx环境搭建遇到的一些问题汇总(多域名配置,配置文件修改问题)

    一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/ngin ...

  7. 利用tcp三次握手,使用awl伪装MAC地址进行多线程SYN洪水攻击

    SYN洪水攻击概述:SYN洪水攻击主要源于: tcp协议的三次握手机制tcp协议面向链接的协议SYN洪水攻击的过程:在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存 ...

  8. Vue单元测试Karma+Mocha

    Vue单元测试Karma+Mocha Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner).该工具在Vue中的主要作用是将项目运行在各种主流Web浏览 ...

  9. Hdu2039 三角形

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2039 三角形 Time Limit: 2000/1000 MS (Java/Others)    Me ...

  10. Linux 系统级开启文件句柄 调优

    系统级开启文件句柄  max-file系统级别的能够打开的文件句柄的数量,Centos7默认是794168. Max-file 与 ulimit -n 的区别 max-file 表示系统级别的能够打开 ...