K近邻算法

  1. 算法简介
  2. 算法的三要素
    –K值的选择
    –距离度量
    –决策规则
  3. 鸢尾花分类案例

算法简介

K近邻算法是一种分类回归算法,于1968年由Cover,Hart提出 该算法简单直观,很容易理解,通俗点来讲就是有点随大流,“人以类聚物以群分”的味道,该数据周围是什么类,他也就是什么类。
李航大大的统计学习方法中这样定义:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最相邻的
K个实例,这K个实例中多数属于哪个类,则该新输入的实例也属于该类。

算法的三要素

由上述的定义可知:
最相邻:如何来度量相邻?
K个实例:K值究竟是多少?
多数属于哪个类:怎样去判别属于哪个类?

引出了K近邻算法的三个核心要素:

1:K值的选择

k值一般为奇数,这个很容易理解,比如二分类中,偶数很可能造成K个近邻刚好有k/2的数值分布在一个类中,两个类中各有k/2个元素。造成无法判定新的元素属于哪个类。
K值既不能太大也不能太小:K值过小:很容易产生一种过拟合的现象,模型整体变复杂,容易受到异常点的影响K值过大:很容易产生欠拟合的现象,模型整体变得简单,单纯的依靠整体数据的分布判定。

2:距离的度量

1:欧式距离:即我们日常所使用的的距离度量方式

a1=(x1,y1), a2=(x2,y2)
d12 = (x1−x2)2+(y1−y2)2\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}(x1​−x2​)2+(y1​−y2​)2​

扩展到n维:

d12 = (∑k=1n(x1k−x2k)2\sqrt{(\displaystyle\sum_{k=1}^{n} (x_{1k}-x_{2k})^2}(k=1∑n​(x1k​−x2k​)2​

2:曼哈顿距离:更加贴近现实的“城市街区距离
d12 = ∣x1−x2∣+∣y1−y2∣|x_1-x_2|+|y_1-y_2|∣x1​−x2​∣+∣y1​−y2​∣

扩展到n维

d12 = ∑k=1n∣x1k−x2k∣)\displaystyle\sum_{k=1}^n|x_{1k}-x_{2k}|)k=1∑n​∣x1k​−x2k​∣)
3:切比雪夫距离("国王距离“---->>>国王”唱跳rap都行,横着走竖着走斜着走都可以“)


d12 = max(∣x1−x2∣,∣y1−y2∣)(|x_1-x_2|,|y_1-y_2|)(∣x1​−x2​∣,∣y1​−y2​∣)

扩展到n维

d12 = max(∣x1k−x2k∣)(|x_{1k}-x_{2k}|)(∣x1k​−x2k​∣)

4:闵式距离(带有参数,相当于1-3号距离的整合版)
d12 = ∑k=1n∣x1k−x2k∣pp\sqrt[p]{\displaystyle\sum_{k=1}^n|x_{1k}-x_{2k}|^p}pk=1∑n​∣x1k​−x2k​∣p​

p=1时:曼哈顿距离
p=2时:欧氏距离
p-->∞时:切比雪夫距离

小结:

以上四种距离度量方式在我们日常生活中较为常见,易于理解、直观。
缺点:将各个特征的量纲也就是单位不加区分统一度量,在ML数据处理中脱离实际为考虑每个特征的分布情况(期望,方差...)

5:标准欧氏距离

考虑其各个特征分布的均值(M)与标准差(S)

标准化度量:X∗=(X−M)/SX^* = (X-M)/SX∗=(X−M)/S
d12 = ∑k=1n(x1k−x2k)/S)2\sqrt{\displaystyle\sum_{k=1}^n{(x_{1k}-x_{2k})/S})^{2}}k=1∑n​(x1k​−x2k​)/S)2​

扩展:
6:汉明距离

信息论、通原中汉明码编码,两个码字码重差
码重:二进制码重1的个数

7:杰卡德距离

杰卡德相似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示:(图片引用)


8:余弦距离


主要用来进行向量方向的差异度量,根据cos(θ)可知,该距离范围为[-1,1],根据其向量之间的开角大小来确定相应的余弦距离

9:马氏距离

三哥数学、统计学家提出的,挺厉害的:
[马氏距离](https://blog.csdn.net/qq_40725653/article/details/117621557)

鸢尾花案例

使用sklearn工具包,利用里面datasets现成小数据集
共4类特征,三种目标值
from sklearn.datasets import load_iris
#分割数据集,采用交叉验证
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sea
#下面两句是我jupyter无法显示中文,没有中文SimHei字体包,有的话可以不写
from pylab import mpl
mpl.rcParams["font.sans-serif"]=["SimHei"]
#获取数据
iris_data = load_iris()
iris_data.feature_names#数据预处理
data = pd.DataFrame(iris_data.data,columns=['sepal length ','sepal width ','petal length ','petal width '])
data["target"]=iris_data.target
#数据分割
train_set,test_set,train_target,test_target = train_test_split(data.iloc[:,:4],data["target"],test_size=0.2,random_state=22)#特征处理
transfer = StandardScaler()
train_set = transfer.fit_transform(train_set)
test_set = transfer.transform(test_set)
#(模型训练)
estimator = KNeighborsClassifier()
param_dict = {"n_neighbors":[i for i in range(1,10) if i%2==1]}
#十折交叉验证
estimator = GridSearchCV(estimator=estimator,param_grid=param_dict,cv=10)
#训练
estimator.fit(train_set,train_target)
#预测
pre = estimator.predict(test_set)#模型评估
print("模型预测的输出为:\n %s"%pre)
score = estimator.score(test_set,test_target)
print("模型的精度为:%3.1f%%"%(score*100))

模型预测的输出为:
[0 2 1 2 1 1 1 1 1 0 2 1 2 2 0 2 1 1 1 1 0 2 0 1 2 0 2 2 2 2]
模型的精度为:93.3%

sea.lmplot(x="sepal length ",y="petal length ",data=data,hue="target",fit_reg=False)
plt.title("鸢尾花萼片-花瓣长度分布图")

K近邻算法(K-NN)相关推荐

  1. 机器学习——聚类之k近邻算法及python使用

    聚类算法之k近邻及python使用 什么是k近邻算法 k近邻算法流程 使用sklearn进行代码实现 数据集介绍 标准化 代码实现 写在开头,套用我的老师的一句话目前所有自然学科的前沿都是在研究数学, ...

  2. python k近邻算法_python中的k最近邻居算法示例

    python k近邻算法 K最近邻居(KNN) (K-Nearest Neighbors (KNN)) KNN is a supervised machine learning algorithm t ...

  3. 机器学习算法系列之K近邻算法

    本系列机器学习的文章打算从机器学习算法的一些理论知识.python实现该算法和调一些该算法的相应包来实现. 目录 K近邻算法 一.K近邻算法原理 k近邻算法 通俗解释 近邻距离的度量 k值的选择 KN ...

  4. k近邻算法 (KNN)

    k近邻算法 k近邻算法(KNN,K-NearestNeighbor)是一种基本分类和回归方法,监督学习算法,本质上是基于一种数据统计的方法: 核心思想:给定一个训练数据集,对新的输入实例,在训练数据集 ...

  5. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  6. 机器学习[k近邻算法]

    k近邻算法简称kNN算法,由Thomas等人在1967年提出[1].它基于以下思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票, ...

  7. 机器学习第七章之K近邻算法

    K近邻算法(了解) 7.1 K近邻算法 7.1.1 K近邻算法的原理介绍 7.1.2 K近邻算法的计算步骤及代码实现 7.2 数据预处理之数据归一化 7.2.1 min-max标准化 7.2.2 Z- ...

  8. java实现k 近邻算法_K近邻算法哪家强?KDTree、Annoy、HNSW原理和使用方法介绍

    1.什么是K近邻算法 K近邻算法(KNN)是一种常用的分类和回归方法,它的基本思想是从训练集中寻找和输入样本最相似的k个样本,如果这k个样本中的大多数属于某一个类别,则输入的样本也属于这个类别. 关于 ...

  9. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  10. 【Machine Learning】TensorFlow实现K近邻算法预测房屋价格

    1前言 机器学习KNN算法(K近邻算法)的总体理论很简单不在这里赘述了. 这篇文章主要问题在于如果利用tensorflow深度学习框架来实现KNN完成预测问题,而不是分类问题,这篇文章中涉及很多维度和 ...

最新文章

  1. Cannot determine Numba type of <class ‘numba.core.dispatcher.LiftedLoop‘
  2. 使用条件注释完成浏览器兼容
  3. 紫书 习题 8-15 UVa 1617 (贪心)
  4. 第四:Pytest框架之命令行参数(二)
  5. 再也不见,Itchat!
  6. .NET Core(.NET 6)控制台应用程序与MongoDB Atlas入门示例教程详解
  7. python 根据答案 自动答题器_python根据题库答案自动答题
  8. 程序员面试需要出示身份证和毕业证原件吗
  9. WINCE环境下 helloWorld
  10. android app 嵌入广告,流氓来了!如何拯救手机中嵌入广告的应用
  11. unbuntu 安装node
  12. JAVA架构师实战第二章 HTMLCSSJAVASCRIPT
  13. Servlet常见错误 404错误 405错误 500错误等。解决方法
  14. GreenHills基本操作:通过 R寄存器和上下文变量 定位异常
  15. ESP32配置mqtt arduino
  16. 禁止所有搜索引擎蜘蛛的爬行收录
  17. 视觉slam14讲学习(一)之se3上的定位表示:轨迹显示与轨迹误差
  18. Excel交叉引用及其应用实例
  19. hdu 4408 Minimum Spanning Tree
  20. Ajax并不是一种技术(Ajax入门好文章)

热门文章

  1. Access、Trunk和Hybird的个人理解
  2. 系统集成项目管理工程师 笔记(第一章:信息化知识)
  3. 包含资金约束的多阶段报童模型
  4. aliez歌词_核爆神曲《aLIEz》中文歌词完整版(QQ音乐翻译版)
  5. 卡巴斯基变相提供一年免费服务
  6. 永中文档转换服务Swagger调用说明
  7. 如何从零开始学习Java语言
  8. 计算机科学的endnote格式,基于国家标准的 EndNote 输出样式模板
  9. chrome浏览器Flash版本过低解决方法
  10. Java Keytool工具简介