day12--k近邻算法KNN

  1. k近邻算法的三个基本要素:
  • [ 1] k值的选择
  • [ 2] 距离度量
  • [ 3] 分类决策规则
    2.该算法的问题:该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的k个邻居中大容量类的样本占多数。
    3.解决:不同的样本给予不同权重项。
    4.对于该算法,做了如下实验:
    #Author:Liu
    import numpy as np
    import operator

def createDataSet():
group = np.array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0,0.1]])
labels = [‘A’,‘A’,‘B’,‘B’]
return group,labels

def classify(inX,dataSet,labels,k):
dataSetsize = dataSet.shape[0]
diffMat = np.tile(inX,(dataSetsize,1))-dataSet #距离相减
sqDiffMat = diffMat2 #平方
sqDistances = sqDiffMat.sum(axis=1) #对每一行的距离进行求和
distance = sqDistances
0.5 #开根号
sortedDistIndicies = distance.argsort()
classCount = {}
for i in range (k):
voteLabel = labels[sortedDistIndicies[i]]
classCount[voteLabel] = classCount.get(voteLabel,0)+1
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
if name ==‘main’: #写主函数,调用上面写的分类器
group,labels = createDataSet()
test = classify([0.1,0.3],group,labels,3) #输入一个点,判断它的类别
print(test)

#注意:python3以后,都是item(),只有python2里才有iteritems()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值