一 k近邻算法原理

k近邻算法是一种基本分类和回归方法.

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

如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。这也就是我们的目的,来了一个新的数据点,我要得到它的类别是什么?好的,下面我们根据k近邻的思想来给绿色圆点进行分类。

  • 如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
  • 如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。

参考一文搞懂k近邻(k-NN)算法(一) https://zhuanlan.zhihu.com/p/25994179

二  特点

优点:精度高(计算距离)、对异常值不敏感(单纯根据距离进行分类,会忽略特殊情况)、无数据输入假定  (不会对数据预先进行判定)。
缺点:时间复杂度高、空间复杂度高。
适用数据范围:数值型和标称型。

三 欧氏距离(Euclidean Distance)

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

四  sklearn库中使用k邻近算法

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

五 使用sklearn的K邻近简单实例

1 数据蓝蝴蝶

#导包
import numpy as np
import pandas  as pd
from pandas import DataFrame,Series
from sklearn.neighbors import KNeighborsClassifier #k邻近算法模型#使用datasets创建数据
import sklearn.datasets as datasets
iris = datasets.load_iris()feature = iris['data']
target = iris['target']#将样本打乱,符合真实情况

np.random.seed(1)
np.random.shuffle(feature)
np.random.seed(1)
np.random.shuffle(target)#训练数据
x_train = feature[:140]
y_train = target[:140]
#测试数据
x_test = feature[-10:]
y_test =target[-10:]#实例化模型对象&训练模型
knn = KNeighborsClassifier(n_neighbors=10)
knn.fit(x_train,y_train)
knn.score(x_train,y_train)print('预测分类:',knn.predict(x_test))
print('真实分类:',y_test)

2 根据身高、体重、鞋子尺码,预测性别

#导包
import numpy as np
import pandas  as pd
from pandas import DataFrame,Series#手动创建训练数据集
feature = np.array([[170,65,41],[166,55,38],[177,80,39],[179,80,43],[170,60,40],[170,60,38]])
target = np.array(['男','女','女','男','女','女'])from sklearn.neighbors import KNeighborsClassifier #k邻近算法模型#实例k邻近模型,指定k值=3
knn = KNeighborsClassifier(n_neighbors=3)#训练数据
knn.fit(feature,target)#模型评分
knn.score(feature,target)#预测
knn.predict(np.array([[176,71,38]]))

3 手写数字识别

  • 导包
import numpy as np
import pandas as pd
from pandas import DataFrame,Series
import matplotlib.pyplot as pltfrom sklearn.neighbors import KNeighborsClassifier

  • 查看单一图片特征
img=plt.imread('data/0/0_2.bmp')
plt.imshow(img)

  • 提炼样本数据
feature=[]
target=[]
for i in range(10):for j in range(500):img_arr=plt.imread(f'data/{i}/{i}_{j+1}.bmp')feature.append(img_arr)target.append(i)#构建特征数据格式
feature=np.array(feature)
target=np.array(target)feature.shape #(5000, 28, 28)#输入数据必须是二维数组,必须对feature降维
#(1)降维方式一:mean() (2)降维方式二:reshape()
feature=feature.reshape(5000,28*28)#将样本打乱 (必须使用多个seed)
np.random.seed(5)
np.random.shuffle(feature)
np.random.seed(5)
np.random.shuffle(target)#数据分割为训练数据和测试数据
x_train=feature[:4950]
y_train=target[:4950]
x_test=feature[-50:]
y_test=target[-50:]

  • KNN模型建立和评分
#训练模型
knn.fit(x_train,y_train)#评分
knn.score(x_train,y_train)#预测
# knn.predict(x_test)

  • 真实预测手写数字图片的一般流程
# 读取图片数据
num_img_arr=plt.imread('../../数字.jpg')
plt.imshow(num_img_arr)

#图片截取数字5
five_arr=num_img_arr[90:158,80:132]
plt.imshow(five_arr)

#降维操作(five数组是三维的,需要进行降维,舍弃第三个表示颜色的维度)
print(five_arr.shape) #(65, 56, 3)
five=five_arr.mean(axis=2)
print(five.shape) #(65, 56)
plt.imshow(five)

# 图片压缩为像素28*28
import scipy.ndimage as ndimage
five = ndimage.zoom(five,zoom = (28/68,28/52))
five.shape #(28, 28)# 压缩后的5的显示
plt.imshow(five)

# 把数据降维为feature 数据格式
five.reshape(1,28*28)

#预测
knn.predict(five.reshape(1,28*28))

下载源数据和代码:https://github.com/angleboygo/data_ansys

转载于:https://www.cnblogs.com/angle6-liu/p/10416736.html

k邻近算法(KNN)实例相关推荐

  1. 机器学习:k邻近算法(KNN)

    title: 机器学习:k邻近算法(KNN) date: 2019-11-16 20:20:41 mathjax: true categories: 机器学习 tags: 机器学习 什么是K邻近算法? ...

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

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

  3. k折交叉验证优缺点_R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)...

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  4. K邻近算法(K-NN)

    简单记录学习<统计学习方法>书中的k近邻模型. k近邻法(k-nearest neighbor,k-NN)是一种基本分类与回归方法. k邻近算法 k邻近算犯法简单.直观描述:给定一个训练数 ...

  5. 机器学习3—分类算法之K邻近算法(KNN)

    K邻近算法(KNN) 一.算法思想 二.KNN类KNeighborsClassifier的使用 三.KNN分析红酒类型 3.1红酒数据集 3.2红酒数据的读取 3.3将红酒的数据集拆分为训练和测试集 ...

  6. K邻近算法概述、欧式距离、Scikit-learn使用 、kNN邻近算法距离度量、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、余弦距离、汉明距离、杰卡德距离、马氏距离

    一.K-邻近算法概述 K邻近算(K Nearest Neighbor算法,KNN算法):如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...

  7. 刻意练习:机器学习实战 -- Task01. K邻近算法

    背景 这是我们为拥有 Python 基础的同学推出的精进技能的"机器学习实战" 刻意练习活动,这也是我们本学期推出的第三次活动了. 我们准备利用8周时间,夯实机器学习常用算法,完成 ...

  8. 《机器学习实战》K邻近算法

    K邻近算法 存在一个样本数据集合,样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样 ...

  9. 基于KD树的K近邻算法(KNN)算法

    文章目录 KNN 简介 KNN 三要素 距离度量 k值的选择 分类决策规则 KNN 实现 1,构造kd树 2,搜索最近邻 3,预测 用kd树完成最近邻搜索 K近邻算法(KNN)算法,是一种基本的分类与 ...

最新文章

  1. java中ajax概念_Java之AJAX概念和实现方式
  2. 【机器学习基础】一文读懂用于序列标注的条件随机场(CRF)模型
  3. 微软颜龄Windows Phone版开发小记
  4. PHP 从结果集中取得一行作为关联数组:
  5. B端可视化:图表设计
  6. 容器编排技术 -- 使用Minikube 部署 Kubernetes 集群
  7. java和c的反汇编_JAVAP -C反汇编指令的学习(转载)
  8. 无法启用插件,因为它引起了一个致命错误(fatal error)。
  9. 将数据插入SQL Server的方法
  10. 第T题 详解放苹果(递归) =========== 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
  11. 正点原子STM32F103 DMA代码例程魔改
  12. MCE | 癌相关基因 ALK 参与胖瘦调节
  13. 提高计算机系统速度的相关技术,提高计算机运行速度的几种措施
  14. 日系插画学习笔记(七):日系角色脸部画法-3表情
  15. C语言解决找零钱问题
  16. python求数组平均值numpy_计算numpy数组的平均值
  17. 这一周 火火火 的 GitHub 项目
  18. 这5个免费音效素材网站,你一定要收藏好~
  19. 训练分类器OpenCV(3.4.1) Error: Assertion failed错误解决
  20. 班级奖学金管理系统java_(奖学金评定管理系统设计)(最终版)

热门文章

  1. neo4j docker
  2. javascript window Timing
  3. 编程语言对比 内存操作
  4. python 字符串
  5. python灰产_Python进行目录的对比
  6. 项目管理学习总结(12)——世界上最好的十条研发管理经验
  7. Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解
  8. linux系统下虚拟机的安装
  9. java nio oio_Java NIO框架Netty教程(十四) Netty中OIO模型(对比NIO)
  10. springmvc往html设置变量,SpringMVC:@MatrixVariable矩阵变量