K 近邻分类理论及鸢尾( Iris )数据集实例操作

  • 一、K 近邻分类理论
  • 二、K 近邻分类实例操作
  • (1)导入数据
  • 划分训练集测试集
  • (3)数据标准化
  • (4)用 K 近邻法建立模型
  • (5)性能评估
  • 参考文献:

一、K 近邻分类理论

K 近邻算法简称 KNN 算法,由 Cover 和 Hart 在 1968 年提出,是一种基本分类与回归方法。K 近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。K 近邻的一个常用的实现方法是 kd 树( KD-Tree ),可以做到以空间换时间的效果。

思路:如果一个样本在特征空间中的 K 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

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

一个例子:下图中,要决定绿色圆是被分成红色三角形一类还是蓝色四方形一类?


如果 K=3(黑色实线圆圈中),由于红色三角形所占比例为 2/3 ,绿色圆将被归为红色三角形类,如果 K=5(黑色虚线圆圈中),由于蓝色四方形比例为 3/5 ,因此绿色圆被归为蓝色四方形类。

注意:

① 在 KNN 算法中,所选择的邻居都是已经正确分类的对象,该方法在分类决策上只依据最邻近的一个或者K个样本的类别来决定待分样本所属的类别。(而分类问题K一般取奇数)

② KNN 算法简单有效,分类器不需要使用训练集进行训练。

③ KNN 方法从原理上依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。

④ K 近邻算法的三个基本要素:距离的度量、K 值的选择和分类决策规则。

⑤ KNN 算法不仅可以用于分类,还可以用于回归。通过找出一个样本的 K 个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值( weight ),如权值与距离成正比。

⑥数据的所有特征都要做可比较的量化。若是数据特征中存在非数值的类型,必须采取手段将其量化为数值。举个例子,若样本特征中包含颜色(红黑蓝)一项,颜色之间是没有距离可言的,可通过将颜色转换为灰度值来实现距离计算。另外,样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对 distance 计算的影响也就不一样,如取值较大的影响力会盖过取值较小的参数。为了公平,样本参数必须做一些 scale 处理,最简单的方式就是所有特征的数值都采取归一化处置。

适用范围:该算法适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法容易产生误差。

不足:

① 该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数(可以采用权值的方法来改进,即和该样本距离小的邻居权值大)。

② 该算法的计算量较大,因为对每一个待分类的样本都要计算它到全体已知样本的距离,才能求得它的 K 个最近邻点(目前常用的解决方法是:事先对已知样本点进行剪辑,去除对分类作用不大的样本)。

算法描述:

① 计算测试数据与各个训练数据之间的距离;

② 按照距离的递增关系进行排序;

③ 选取距离最小的 K 个点;

④ 确定前 K 个点所在类别的出现频率;

⑤ 返回前 K 个点中出现频率最高的类别作为测试数据的预测分类。

二、K 近邻分类实例操作

下面我们以“鸢尾( Iris )数据集”为例使用K近邻模型对其进行分类,Iris 的数据集曾经被著名统计学家 Fisher 用在他的论文当中。

(1)导入数据

# 从 sklearn.datasets 导入 iris 数据加载器
from sklearn.datasets import load_iris# 使用加载器读取数据并且存入变量 iris
iris = load_iris()# 查验数据规模
iris.data.shape


可见,该数据集共有 150 条数据,4 个特征。

# 通过 DESCR 查看数据说明
print(iris.DESCR)


通过上面的输出结果可以知道该数据集的信息资料,数据集中鸢尾花分为三个亚种( Setosa、Versicolour、Virginica ),每个样本数据被四个特征描述,分别为花萼长度( sepal length )、花萼宽度( sepal width )、花瓣长度( petal length )和花瓣宽度( petal width )。

划分训练集测试集

# 从 sklearn.cross_validation 里选择导入 train_test_split 用于数据分割
from sklearn.model_selection import train_test_split# 从使用 train_test_split ,利用随机种子 random_state 采样 25% 的数据作为测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.25, random_state=33)

(3)数据标准化

# 从 sklearn.preprocessing 里选择导入数据标准化模块
from sklearn.preprocessing import StandardScaler# 对训练和测试的特征数据进行标准化
ss = StandardScaler()X_train = ss.fit_transform(X_train)X_test = ss.transform(X_test)

(4)用 K 近邻法建立模型

# 从 sklearn.neighbors 里选择导入 KNeighborsClassifier ,即 K 近邻分类器
from sklearn.neighbors import KNeighborsClassifier# 使用 K 近邻分类器对测试数据进行类别预测,预测结果储存在变量 y_predict 中
knc = KNeighborsClassifier()knc.fit(X_train, y_train)y_predict = knc.predict(X_test)

(5)性能评估

# 使用模型自带的评估函数进行准确性测评
print('The accuracy of K-Nearest Neighbor Classifier is', knc.score(X_test, y_test))# 依然使用 sklearn.metrics 里面的 classification_report 模块对预测结果做更加详细的分析
from sklearn.metrics import classification_reportprint(classification_report(y_test, y_predict, target_names=iris.target_names))


由上面的结果可知,K 近邻分类器对 38 条鸢尾花测试样本分类的准确性为 89.4736842105% ,共有 3 个类别,它们的平均精确率、召回率和 F1 指标分别为 0.92,0.89 和 0.90 。

由此可见,K 近邻分类器虽然简单,不需要进行参数训练,但是使用的计算量大、内存消耗大。只要优质数据量足够大,KNN在理论上能保证取得较好的效果。

参考文献:

[1] 范淼,李超.Python 机器学习及实践[M].清华大学出版社, 北京, 2016.

python 机器学习——K 近邻分类理论及鸢尾( Iris )数据集实例操作相关推荐

  1. Python KNN K近邻分类

    Python KNN K近邻分类 1 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 2 KNN简介 相关概念见下: 对于给定的观测来 ...

  2. 机器学习——K近邻分类算法及python代码实现

    <机器学习:公式推导与代码实践>鲁伟著读书笔记. K近邻(K-nearest neighbor,K-NN)算法是一种经典的监督学习的分类方法.K近邻算法是依据新样本与k个与其相邻最近的样本 ...

  3. python机器学习 | K近邻算法学习(1)

    K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...

  4. 从零开始用Python实现k近邻算法(附代码、数据集)

    作者:Tavish Srivastava 翻译:王雨桐 校对:丁楠雅 本文约2000字,建议阅读8分钟. 本文将带领读者理解KNN算法在分类问题中的使用,并结合案例运用Python进行实战操作. 注意 ...

  5. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  6. 机器学习100天(三十):030 K近邻分类算法-K值的选择

    机器学习100天,今天讲的是:K近邻分类算法-K值的选择. <机器学习100天>完整目录:目录 上一节我们讲了 K 折交叉验证的理论,下面我们将 K 折交叉验证算法应用到 K 近邻分类算法 ...

  7. 机器学习——K近邻算法(KNN)及其python实现

    参考视频与文献: https://www.bilibili.com/video/BV1HX4y137TN/?spm_id_from=333.788&vd_source=77c874a500ef ...

  8. 【机器学习算法】手动Python实现KNN分类算法,并用iris数据集检验模型效果

    目录 一.KNN算法Python实现 1.导入包 2. 画图,展示不同电影在图上的分布 3.训练样本和待测样本准备 4.计算待测样本点到每个训练样本点的距离 5.查找离待测样本点最近的K个训练样本点的 ...

  9. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

最新文章

  1. python RuntimeError: maximum recursion depth exceeded
  2. [HNOI2008]玩具装箱toy
  3. PAT—— 害死人不偿命的(3n+1)猜想 (1001)
  4. 炫界 (667) -(回应骑两小)_为什么那么多人喜欢骑地平线
  5. 使用 Blazor 开发内部后台(四):基于Card组件快速搭建导航首页
  6. Java对数组的操作(二)——集合与数组的切换
  7. android 例子源码_AOSP系列文章(一)-Android系统源码下载和编译
  8. 福利 | 2018 年,程序员全新的技术之路
  9. kettle使用命令行的方式执行多个job_手把手教你实现xxl-job分布式任务调度平台搭建
  10. Node.js:Express
  11. 3Dmax转的fbx模型导入unity赋材质不能改变颜色一直是黑色
  12. 世界坐标转为屏幕坐标(UI坐标)
  13. 数字孪生堆场智慧安全管控平台
  14. 档案管理学川大972 | 档案信息资源开发与利用
  15. 数列极限导出重要无理数
  16. 计算机图形学教程动画实验报告,计算机图形学画圆实验报告.doc
  17. 测试管理工具的基本功能有哪些?
  18. 谈谈对CNN在NLP中可行性的理解
  19. fluent p1模型_FLUENT中的辐射模型
  20. ebay架构师总结伸缩性要旨!!

热门文章

  1. 基于JAVA旅游景区预约管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  2. 马克思手稿中的数学题
  3. glut linux 安装包,linux 下glut.h使用
  4. 投资区块链项目的四大必修课
  5. 第11届蓝桥杯青少组C++选拔赛真题
  6. 伴随着我娃成长的运维平台(持续开源..)
  7. bzoj 4605 崂山白花蛇草水
  8. Word控件Spire.Doc更新至最新版v10.7,增强产品稳定性,修复老版本漏洞
  9. c语言10个选手10个评委,C语言歌星大奖赛为参赛的选手打分.doc
  10. 歌唱大赛选手成绩计算