《机器学习实战》之k-近邻算法(示例)
2024-09-22 22:09:42
看了这本书的第一个算法—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)
最新文章
- Linux 下 Shell 命令的分类及用法
- nodejs使用express4框架默认app.js配置说明
- ajax 初始化请求前携带参数
- MyBatis完全使用指南
- [转]百度地图点聚合MarkerClusterer移动地图时,Marker的Label丢失的问题
- Jasper_crosstab_group _Error incrementing crosstab dataset
- SEO-站外优化规范
- Spring第八篇【XML、注解实现事务控制】
- MATLAB 音响系统工具箱
- kmp算法python实现
- LeetCode题解之 Find Mode in Binary Search Tree
- 2018-2019 2 20165203 《网络对抗技术》 Exp2 后门原理与实践
- 关于Jar包 和 war
- format 用法及对齐
- IDC:网管网
- MVC应用程序JsonResult()的练习
- FSM有限状态机
- Android studio 如何让包有层次显示
- eclipse netbeans 代码模板
- (转)SQL执行顺序
热门文章
- 图像处理基础---RGB图 灰度图 索引图 调色板
- flask框架----flask-script组件
- Django框架----logging配置
- vue -resource 文件提交提示process,或者拦截处理
- Linux 查看端口使用情况
- MyEclipse 10.7(版本:eclipse 3.7.x-Indigo系列)安装activiti-eclipse-plugin插件(流程设计器)
- Python笔记 #20# SOM
- Docker学习笔记之编写 Docker Compose 项目
- PHP 变量类型的强制转换 &; 创建空对象
- Golang并发编程有缓冲通道和无缓冲通道(channel)