【python机器学习】k-近邻算法 范例及详解

python版本3.6.5
k-近邻算法 范例及详解

目的

输入一个坐标,返回最邻近该坐标的标签

创建数据集

创建训练数据集如图所示
数据集

def createDataSet():
    group = array([[1, 1.1], [1, 1], [0, 0], [0, 0.1]])
    labels = array(['A', 'B', 'C', 'D'])
    return group, labels

实现kNN

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
    sortArr=distances.argsort()
    classCount={}
    for i in range(k):
        vateIlabel = labels[sortArr[i]]
        classCount[vateIlabel] = classCount.get(vateIlabel, 0) + 1
    sortedCloassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedCloassCount[0][0]

代码详解:
1、定义一个方法,参数为 需要判断的坐标,数据集,数据集标签,邻近
2、获取数据集的大小
3、创建一个数组 ,长度为数据集大小,元素为inX:

In[3]:tile([0.3,1],(4,1))
Out[3]: 
array([[0.3, 1. ],
       [0.3, 1. ],
       [0.3, 1. ],
       [0.3, 1. ]])

并用返回的该数组 减去 数据集,得到差值:

In[8]: tile([0.3,1],(4,1))-dataSet
Out[8]: 
array([[-0.7, -0.1],
       [-0.7,  0. ],
       [ 0.3,  1. ],
       [ 0.3,  0.9]])

4、将上边得到的差值数组平方:

In[9]: (tile([0.3,1],(4,1))-dataSet)**2
Out[9]: 
array([[0.49, 0.01],
       [0.49, 0.  ],
       [0.09, 1.  ],
       [0.09, 0.81]])

5、将集合的每个子集合进行求和,得到平方和

In[10]: ((tile([0.3,1],(4,1))-dataSet)**2).sum(axis=1)
Out[10]: array([0.5 , 0.49, 1.09, 0.9 ])

6、再开根号

In[11]: ((tile([0.3,1],(4,1))-dataSet)**2).sum(axis=1)**0.5
Out[11]: array([0.70710678, 0.7       , 1.04403065, 0.9486833 ])

7、对上边开完根号的集合排序,返回从小到大元素的索引:

In[12]: (((tile([0.3,1],(4,1))-dataSet)**2).sum(axis=1)**0.5).argsort()
Out[12]: array([1, 0, 3, 2], dtype=int64)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值