机器学习——KNN算法


文章目录

  • 机器学习——KNN算法
  • 前言
  • 一、KNN原理基础
  • 二、sklearn的基本建模流程
  • 三、KNN算法调优:选取最优的K值
  • 四、KNN中距离的相关讨论
    • 1. KNN使用的是什么距离?
    • 2. 距离类模型的归一化需求
  • 五、 KNN算法的优缺点

前言

机器学习笔记


一、KNN原理基础

KNN的算法原理,可以简单如下描述:
一个数据集中存在多个已有标签的样本值,这些样本值共有的n个特征构成了一个多维空间N。当有一个需要预测/分类的样本x出现,我们把这个x放到多维空间n中,找到离其距离最近的k个样本,并将这些样本称为最近邻(nearest neighbour)。对这k个最近邻,查看他们的标签都属于何种类别,根据”少数服从多数,一点算一票”的原则进行判断,数量最多标签类别就是x的标签类别。其中涉及到的原理是“越相近越相似”,这也是KNN的基本假设。 KNN中的K代表的是距离需要分类的测试点x最近的K个样本点,如果不输入这个值,KNN算法中的重要部分“选出K个最近邻”就无法实现。

若数据集只有两个特征,则针对于数据集的描述可用二维平面空间图来表示。如下图,二位平面空间的横坐标是特征1,纵坐标是特征2,每个样本点的分类(正或负)是该组样本的标签。图中给出了位于平面中心的,需要分类的数据点x,并用绿色分别标注了k为1,2,3时的最近邻状况。在图a中,x的1-最近邻是一个负例,因此x被指派到负类。图c中,3-最近邻中包括两个正例和一个负例,根据“少数服从多数原则”,点x被指派到正类。在最近邻中正例和负例个数相同的情况下(图b),算法将随机选择一个类标号来分类该点。

二、sklearn的基本建模流程

#======注意该代码仅作展示,无法运行=======#from sklearn.neighbors import KNeighborsClassifier #导入需要的模块clf = KNeighborsClassifier(n_neighbors=k)          #实例化
clf = clf.fit(X_train,y_train)                     #用训练集数据训练模型
result = clf.score(X_test,y_test)                  #导入测试集,从接口中调用需要的信息

三、KNN算法调优:选取最优的K值

从KNN的原理中可见,是否能够确认合适的k值对算法有极大的影响。如果K太小,则最近邻分类器容易受到由于训练数据中的噪声而产生的过分拟合的影响;相反。如果k太大,最近邻分类器可能会将测试样例分类错误,因为k个最近邻中可能包含了距离较远的,并非同类的数据点(如下图,k近邻由绿色表示)。因此,超参数K的选定是KNN中的头号问题。

那我们怎样选择一个最佳的K呢?在这里我们要使用机器学习中的神器:参数学习曲线。参数学习曲线是一条以不同的参数取值为横坐标,不同参数取值下的模型结果为纵坐标的曲线,我们往往选择模型表现最佳点的参数取值作为这个参数的取值。

以手写数据集为例:

代码如下(示例):

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
#探索数据集
data = load_digits()Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y              #特征和标签,test_size=0.3    #测试集所占的比例,random_state=1)
# 绘制学习曲线
score = [] #用来存放模型预测结果
krange = range(1,20) for i in krange:clf = KNeighborsClassifier(n_neighbors=i)clf = clf.fit(Xtrain,Ytrain)score.append(clf.score(Xtest,Ytest))
score
bestK = krange[score.index(max(score))]
print(bestK)
print(max(score))plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei'']plt.figure(figsize=(6,4),dpi=80)  #dpi是像素值
plt.plot(krange,score)plt.title('K值学习曲线',fontsize=15)
plt.xlabel('K值',fontsize=12)
plt.ylabel('预测准确率',fontsize=12)
plt.xticks(krange[::3])  # x轴刻度
plt.show()

四、KNN中距离的相关讨论

1. KNN使用的是什么距离?

KNN属于距离类模型,原因在于它的样本之间的远近是靠数据距离来衡量的。欧几里得距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离等都是很常见的距离衡量方法。KNN中默认使用的是欧氏距离(也就是欧几里得距离)。

2. 距离类模型的归一化需求

我们再看一下,欧氏距离的计算公式: d(A,B)=∑i=1n(xiA−xiB)2d(A, B) = \sqrt{\sum_{i = 1}^{n}(x_{iA}-x_{iB})^2}d(A,B)=∑i=1n​(xiA​−xiB​)2​

试想看看,如果某个特征

机器学习——KNN算法相关推荐

  1. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例

    ** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...

  2. 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)

    机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...

  3. 机器学习KNN算法实践:预测城市空气质量

    出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...

  4. 机器学习 —— KNN算法简单入门

    机器学习 -- KNN算法简单入门 第1关:手动实现简单kNN算法 1 KNN算法简介 1.1 kNN 算法的算法流程 1.2 kNN 算法的优缺点 1.3 编程要求+参数解释 2. 代码实现 3. ...

  5. 开根号的笔算算法图解_机器学习KNN算法之手写数字识别

    1.算法简介 手写数字识别是KNN算法一个特别经典的实例,其数据源获取方式有两种,一种是来自MNIST数据集,另一种是从UCI欧文大学机器学习存储库中下载,本文基于后者讲解该例. 基本思想就是利用KN ...

  6. 经典实战案例:用机器学习 KNN 算法实现手写数字识别 | 原力计划

    作者 | 奶糖猫 来源 | CSDN 博客,责编 | 夕颜 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 算法简介 手写数字识别是KNN算法一个特别经典的实例,其数 ...

  7. python手写字母识别_机器学习--kNN算法识别手写字母

    本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...

  8. 机器学习——K-NN算法

    目录 一.  KNN的原理 二.  K-NN算法的注意事项 1. 如何选取K值 2. K-NN算法的优点 3. K-NN算法的缺点 三.  算法的Python实现 (1)用原理实现K-NN (2)调用 ...

  9. 机器学习KNN算法原理和应用分析

    KNN原理解析 K邻近算法(KNN),是一种非常简单有效的机器学习算法.KNN是通过计算不同特征值距离作为分类依据,即计算一个待分类对象不同特征值与样本库中每一个样本上对应特征值的差值,将每个维度差值 ...

最新文章

  1. 024_Word知识汇总
  2. python的scripts里没有pip_解决python scripts和pip缺失问题
  3. cop2000计算机组成原理,COP2000计算机组成原理实验系统
  4. iBiology |除了B站,这还有个专业的生科科普网站
  5. session 跟 cookie 关系
  6. Spark的相关概念说明和检查点机制
  7. 《SQL高级应用和数据仓库基础(MySQL版)》作业 ·004
  8. 如何解决 kubernetes 重启后,启来不来的问题
  9. java许愿墙_wishingWall 一个好看的许愿墙板块,功能强大,页面美观 Java Develop 238万源代码下载- www.pudn.com...
  10. html嵌入python代码,python在html中插入简单的代码并加上时间戳的方法
  11. 法度远程视频审讯系统有哪些主要功能?
  12. 金蝶记账王和KIS迷你版的区别
  13. WinRAR去广告:只需六步,教你去除WinRAR的广告
  14. 外贸建站五大必备要领
  15. 关于地理数据坐标转换
  16. iOS 项目默认竖屏 个别页面横屏
  17. Axure RP9 实现计算机效果交互
  18. C#与宇电温控表自定义协议通信实例
  19. 关于阿里云aca和acp哪个好?阿里云认证证书有含金量吗?
  20. QT5.14.1实现界面开场动画

热门文章

  1. [AHK]AutoHotkey版的鼠标手势
  2. mysql 表的crud_MySQL中表的数据的增删改查(CRUD)
  3. 图像笔记(一)——目标检测
  4. css-动态计算盒子宽度
  5. 什么是抽象语法树(AST)
  6. 计算机中画快捷键,Win10画图中快捷键有哪些丨Win10画图中快捷键图解
  7. 1125. 牛的旅行
  8. # cs231n (二)线性分类器
  9. DM数据库的参数查看和配置
  10. 【BIM+GIS】BIM+GIS融合的意义与应用价值