看了这本书的第一个算法—k-近邻算法,这个算法总体构造思想是比较简单的,在ACM当中的话就对应了kd树这种结构。首先需要给定训练集,然后给出测试数据,求出训练集中与测试数据最相近的k个数据,根据这k个数据的属性来确定我们测试数据的属性。

书上的例子是给了四个点以及这四个点的标签,分别是A,A,B,B,现在给定一测试点,需要根据这四个训练集来判断该测试点的标签应该是A还是B。

 from numpy import *
import operator def createDataSet():
group = array([[1.0,1.1], [1.0,1.0], [0,0], [0,0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize,1)) - dataSet #统一矩阵,实现加减
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1) #进行累加,axis=0是按列,axis=1是按行
distances = sqDistances**0.5 #开根号
sortedDistIndicies = distances.argsort() #按升序进行排序,返回原下标
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 #get是字典中的方法,前面是要获得的值,后面是若该值不存在时的默认值
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    #在python3中没有iteritems,key在这里是按照字典的第二个元素来排序,降序排序
return sortedClassCount[0][0] #获得字典中第一对映射中的第一个值 if __name__ == "__main__":
dataSet, labels = createDataSet()
inX = [0.2, 0.2]
print(classify0(inX, dataSet, labels, 2))

代码详解:

①array

这是numpy库中,它就是用来构造矩阵的:

 from numpy import array

 a = array([[1,1],
[2,3]])
b = array([[0,1],
[3,2]])
c = a-b
print(c)

②tile()函数

tile(A,repes)返回shape = repes的矩阵,每个元素是A

 from numpy import tile

 a = [1,2,3]
b = tile(a,(2,3))
print(b)

③argsort()

按序排列,返回原始下标

 from numpy import argsort

 a = [4,3,1,2]
b = argsort(a)
print(b)

最新文章

  1. Linux 下 Shell 命令的分类及用法
  2. nodejs使用express4框架默认app.js配置说明
  3. ajax 初始化请求前携带参数
  4. MyBatis完全使用指南
  5. [转]百度地图点聚合MarkerClusterer移动地图时,Marker的Label丢失的问题
  6. Jasper_crosstab_group _Error incrementing crosstab dataset
  7. SEO-站外优化规范
  8. Spring第八篇【XML、注解实现事务控制】
  9. MATLAB 音响系统工具箱
  10. kmp算法python实现
  11. LeetCode题解之 Find Mode in Binary Search Tree
  12. 2018-2019 2 20165203 《网络对抗技术》 Exp2 后门原理与实践
  13. 关于Jar包 和 war
  14. format 用法及对齐
  15. IDC:网管网
  16. MVC应用程序JsonResult()的练习
  17. FSM有限状态机
  18. Android studio 如何让包有层次显示
  19. eclipse netbeans 代码模板
  20. (转)SQL执行顺序

热门文章

  1. 图像处理基础---RGB图 灰度图 索引图 调色板
  2. flask框架----flask-script组件
  3. Django框架----logging配置
  4. vue -resource 文件提交提示process,或者拦截处理
  5. Linux 查看端口使用情况
  6. MyEclipse 10.7(版本:eclipse 3.7.x-Indigo系列)安装activiti-eclipse-plugin插件(流程设计器)
  7. Python笔记 #20# SOM
  8. Docker学习笔记之编写 Docker Compose 项目
  9. PHP 变量类型的强制转换 & 创建空对象
  10. Golang并发编程有缓冲通道和无缓冲通道(channel)