(机器学习实战)2.12 KNN分类算法的Python实现(详细注释)

kNN算法实现伪代码(参考机器学习实战)


建立文件test.py

#导入第一个模块:科学计算包
from numpy import *
#导入第二个模块:运算符模块
import operator
#创建一个creatDataSet函数:建立数据集和标签
def creatDataSet():
	group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
	labels=['a','a','b','b']
	return group,labels

建立文件kNN.py

import test
import operator 
from numpy import *
from scipy import *
from matplotlib import *
dataSet,labels=test.creatDataSet()
print(dataSet)
print(labels)



"""了解get的作用:用字典统计相同标签个数
classCount={}
bb=['a','a','b','b']     #标签
for i in range(4):
	classCount[bb[i]]=classCount.get(bb[i],0)+1	
print(classCount['a'])
print(classCount['b'])
"""

inX=[1,1]
k=2
#inx为自己输入要分类的测试数,dataset为训练集,labels为标签集,k为kNN中的K值
#shape[0]得到训练样本多少行
#tile建立inx,dataSetSize行,1列
#sum(axis=1),按行相加
#argsort递增排序

def classify0(inX,dataSet,labels,k):
	dataSetSize=dataSet.shape[0]
	diffMat=tile(inX,(dataSetSize,1))-dataSet
	sqDiffMat=diffMat**2
	sqDistances=sqDiffMat.sum(axis=1) 
	distances=sqDistances**0.5
	sortedDistIndicies=distances.argsort() #生成的不是距离而是标号列表 
	print(sortedDistIndicies)
	classCount={}
	for i in range(k):
		#print(sortedDistIndicies[i])               #训练点标号3,2
		voteIlabel=labels[sortedDistIndicies[i]]    #找到标号3,2对应的标签‘b’,'b'
		classCount[voteIlabel]=classCount.get(voteIlabel,0)+1   #这一步是做相同标签的统计(+1),找到键voteIlabel对应的值,如果不存在这样的键则返回默认值0
		print(classCount.get(voteIlabel,0))
	sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #sorted排序做升序,返回副本,原始输入不变,里面的参数设置请参考https://blog.csdn.net/hshl1214/article/details/40587985
	print(sortedClassCount[0][0])                                                       #或者参考https://www.cnblogs.com/zhoufankui/p/6274172.html
	return sortedClassCount[0][0]
classify0(inX,dataSet,labels,k)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值