#coding=UTF8
from numpy import *
import operator
def createDataSet():
"""
函数作用:构建一组训练数据(训练样本),共4个样本
同时给出了这4个样本的标签,及labels
"""
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): #inx : 是输入没有标签的新数据,表示为一个向量
#dataset: 是样本集。表示为向量数组
#labels:对应样本集的标签
#k:即所选的前K
dataSetSize = dataset.shape[0] #矩阵行数,即数据个数;shape返回(行,列)
#tile函数将输入点拓展成与训练集相同维数的矩阵,再计算欧氏距离
#样本与训练集的差值矩阵
diffMat = tile(inX, [dataSetSize, 1]) - dataset #[a,b] 扩展成a行b列
# print(diffMat)
# print(tile(inX, (dataSetSize, 1)))
#差值矩阵平方,每个元素分别平方
sqDiffMat = diffMat ** 2
# print(sqDiffMat)
#计算每一行上元素的和,axis=1按行求和
sqDistance = sqDiffMat.sum(axis=1)
#开方得到欧拉距离矩阵
distance = sqDistance ** 0.5
#按distances中元素进行升序排序后得到的对应下标的列表
sortedDistIndicies = distance.argsort() #从小到大排序,并返回每个元素所在位置,即下标
print(distance)
print(sortedDistIndicies)
classCount = {} #初始化一个字典
for i in range(k): #sortedDistIndicies[i]返回的是排序之后每个元素的位置
voteIlabel = labels[sortedDistIndicies[i]] #选择距离最小的K个样本,获取k个样本的label,即分类结果
print(voteIlabel)
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 #返回上述label的值,如果不存在则返回0,票数加1
#计算每种label的个数
'''
print ('classCount %s' %classCount)
print ('classCount %s' %classCount.items()) #.items()返回可遍历的(键, 值) 元组数组。
#classCount {'B': 2, 'A': 1}
#classCount dict_items([('B', 2), ('A', 1)])
'''
#按classCount字典的第2个元素(即类别出现的次数)从大到小排序 #Python3.5中:iteritems变为items
#operator.itemgetter(1) 根据第一个域的数据进行排序,从高到低,按照类别的数量多少进行排序
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] #返回类别数最多的类别名称
if __name__== "__main__":
# 导入数据
dataset, labels = createDataSet()
inX = [0.1, 0.1]
# 简单分类
className = classify0(inX, dataset, labels, 3)
print ('the class of test sample is %s' %className)
KNN.zip_knn python_python knn_挖掘
版权申诉
158 浏览量
2022-09-24
22:12:47
上传
评论
收藏 2KB ZIP 举报
刘良运
- 粉丝: 66
- 资源: 1万+
最新资源
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- 基于JSP毕业设计-基于WEB操作系统课程教学网站的设计与实现(源代码+论文).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈