KNN算法是k-Nearest Neighbor Classification的简称,也就是k近邻分类算法。基本思路是在特征空间中查找k个最相似或者距离最近的样本,然后根据k个最相似的样本对未知样本进行分类。基本步骤为:

(1)计算已知样本空间中所有点与未知样本的距离;

(2)对所有距离按升序排列;

(3)确定并选取与未知样本距离最小的k个样本或点;

(4)统计选取的k个点所属类别的出现频率;

(5)把出现频率最高的类别作为预测结果,即未知样本所属类别。

下面的代码模拟了上面的算法思路和步骤,以身高+体重对肥胖程度进行分类为例,采用欧几里得距离。

fromcollections importCounter

importnumpy asnp

# 已知样本数据

# 每行数据分别为性别,身高,体重

knownData = ((1, 180, 85),

(1, 180, 86),

(1, 180, 90),

(1, 180, 100),

(1, 185, 120),

(1, 175, 80),

(1, 175, 60),

(1, 170, 60),

(1, 175, 90),

(1, 175, 100),

(1, 185, 90),

(1, 185, 80))

knownTarget = ('稍胖', '稍胖', '稍胖', '过胖',

'太胖', '正常', '偏瘦', '正常',

'过胖', '太胖','正常', '偏瘦')

defKNNPredict(current, knownData=knownData, knownTarget=knownTarget, k=3):

# current为未知样本,格式为(性别,身高,体重)

data = dict(zip(knownData, knownTarget))

# 如果未知样本与某个已知样本精确匹配,直接返回结果

ifcurrentin data.keys():

returndata[current]

# 按性别过滤,只考虑current性别一样的样本数据

g = lambdaitem:item[0][0]==current[0]

samples = list(filter(g, data.items()))

g = lambdaitem:((item[0][1]-current[1])**2+\

(item[0][2]-current[2])**2)**0.5

distances = sorted(samples, key=g)

# 选取距离最小的前k个

distances = (item[1] foritem indistances[:k])

# 计算选取的k个样本所属类别的出现频率

# 选择频率最高的类别作为结果

returnCounter(distances).most_common(1)[0][0]

unKnownData = [(1, 180, 70), (1, 160, 90), (1, 170, 85)]

forcurrent inunKnownData:

print(current, ':', KNNPredict(current))

运行结果为:

(1, 180, 70) : 偏瘦

(1, 160, 90) : 过胖

(1, 170, 85) : 正常

下面的代码使用扩展库sklearn中的k近邻分类算法处理了同样的问题:

# 使用sklearn库的k近邻分类模型

fromsklearn.neighbors importKNeighborsClassifier

# 创建并训练模型

clf = KNeighborsClassifier(n_neighbors=3, weights='distance')

clf.fit(knownData, knownTarget)

# 分类

forcurrent inunKnownData:

print(current, end=' : ')

current = np.array(current).reshape(1,-1)

print(clf.predict(current)[0])

运行结果为:

(1, 180, 70) : 偏瘦

(1, 160, 90) : 过胖

(1, 170, 85) : 正常

---------相关阅读-----------

----------喜大普奔----------

1、继《Python程序设计基础》(2017年9月第5次印刷)、《Python程序设计(第2版)》(2017年9月第4次印刷)、《Python可以这样学》(2017年7月第3次印刷)系列图书之后,董付国老师新书《Python程序设计开发宝典》已于2017年8月1日在清华大学出版社出版,并于2017年9月进行了第2次印刷。为庆祝新书《Python程序设计开发宝典》全面上架,清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买:

https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3

2、10月13日——15日,重庆,全国高校程序设计系列课程高级研究班,详见:

全国高校程序设计系列课程高级研修班(Python)通知

python最佳身高_KNN分类算法原理与Python+sklearn实现根据身高和体重对体型分类相关推荐

  1. KNN分类算法原理与Python+sklearn实现根据身高和体重对体型分类

    KNN算法是k-Nearest Neighbor Classification的简称,也就是k近邻分类算法.基本思路是在特征空间中查找k个最相似或者距离最近的样本,然后根据k个最相似的样本对未知样本进 ...

  2. softmax分类算法原理(用python实现)

    逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as n ...

  3. 随机森林分类算法python代码_随机森林的原理及Python代码实现

    原标题:随机森林的原理及Python代码实现 最近在做kaggle的时候,发现随机森林这个算法在分类问题上效果十分的好,大多数情况下效果远要比svm,log回归,knn等算法效果好.因此想琢磨琢磨这个 ...

  4. 【机器学习】总结了九种机器学习集成分类算法(原理+代码)

    大家好,我是云朵君! 导读: 本文是分类分析(基于Python实现五大常用分类算法(原理+代码))第二部分,继续沿用第一部分的数据.会总结性介绍集成分类算法原理及应用,模型调参数将不在本次讨论范围内. ...

  5. 总结了九种机器学习集成分类算法(原理+代码)

    公众号后台回复"图书",了解更多号主新书内容作者:云朵君来源: 数据STUDIO 导读: 本文是分类分析(基于Python实现五大常用分类算法(原理+代码))第二部分,继续沿用第一 ...

  6. python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现

    第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质 ...

  7. 手把手教你EMD算法原理与Python实现(更新)

    Rose今天主要介绍一下EMD算法原理与Python实现.关于EMD算法之前介绍过<EMD算法之Hilbert-Huang Transform原理详解和案例分析>, SSVEP信号中含有自 ...

  8. 匈牙利算法原理与Python实现

    匈牙利算法原理与Python实现 今天学习一个新的算法-匈牙利算法,用于聚类结果分析,先用图表示我当前遇到的问题: 这两列值是我用不同算法得到的聚类结果,从肉眼可以看出第一列聚类为0的结果在第二列中对 ...

  9. Apriori 算法原理以及python实现详解

    Apriori 算法原理以及python实现 ​ Apriori算法是第一个关联规则挖掘算法,也是最经典的算法.它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与 ...

最新文章

  1. 【 MATLAB 】cat 函数介绍(沿指定维度串联数组)
  2. 《Dreamweaver CS6完美网页制作——基础、实例与技巧从入门到精通》——1.3 常用网页设计软件...
  3. CSS之:active选择器
  4. Tomcat 7 自动加载类及检测文件变动原理
  5. SharePoint 2013异常信息的查看
  6. 某微型计算机指令格式如图,组成原理考试试卷
  7. python asyncio_Python 中的异步编程:Asyncio
  8. linux服务启动redis自动启动不了,linux开机启动redis、nginx等服务
  9. 【10.1】python中的GIL
  10. Win 2000系统引导过程详解
  11. 基于Web的物流配送信息管理系统
  12. AUTOCAD参数约束功能
  13. 作为公共组软件工程师如何工作
  14. Error:java.lang.RuntimeException: Crunching Cruncher dialog_et_bg.9.png failed, see logs
  15. STM32 NPN与PNP检测电路
  16. 【渝粤题库】陕西师范大学163208 饭店管理 作业
  17. db_create_file_dest
  18. btb和oto,btc模式是什么意思
  19. Delphi使用逍遥安卓模拟器
  20. 区块链通证经济的核心不在技术,而在于商业逻辑的重构

热门文章

  1. 腾讯会议大规模任务调度系统架构设计
  2. 【电子技术基础实验日志】安装multisim14.0,用数字万用表测量电压放大倍数仿真实验
  3. 直线检测之LSD算法及其OpenCV/C++案例实现
  4. 【多目标轨迹预测】Trajectron++:Dynamically-Feasible TrajectoryForecastin With Heterogeneous Data(简化翻译+笔记)
  5. ASCII码中blank与space的区别
  6. 电影:The Pursuit of Happiness当幸福来敲门
  7. flash和DDR的概念及解释
  8. 科氏力质量流量计安装要求
  9. windows7重装系统
  10. 编译原理-5-LL(1)语法分析器