码迷,mamicode.com
首页 > 编程语言 > 详细

K-近邻算法原理分析

时间:2014-12-18 11:39:03      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   sp   for   strong   on   

前言

  本文介绍机器学习分类算法中的K-近邻算法并给出伪代码,Python代码实现。

算法原理

  首先获取训练集中与目标对象距离最近的k个对象,然后再获取这k个对象的分类标签,求出其中出现频数最大的标签。

  这个标签就是分类的结果。

伪代码

  对训练集中的每个点做以下操作:

    1. 计算已知类别数据集中的点与当前点之间的距离

    2. 按照距离递增次序排序

    3. 选取与当前点距离最小的k个点

    4. 确定前k个点所在类别的出现频率

    5. 返回前k个点出现频率最高的类别,即为分类结果。

代码示例

 1 #!/usr/bin/env python
 2 # -*- coding:UTF-8 -*-
 3 
 4 ‘‘‘
 5 Created on 2014-12-17
 6 
 7 @author: fangmeng
 8 ‘‘‘
 9 
10 # 导入numpy数学运算库
11 import numpy
12 # 导入运算符函数库
13 import operator
14 
15 # ==============================================
16 # 输入:
17 #
18 # 输出:
19 #        group, labels:样本训练集及其对应标签集
20 # ==============================================
21 def createDataSet():
22     创建训练集及其对应标签集并返回
23     
24     group = numpy.array([[1.0, 1.1], [1.0, 1.0], [0.0, 0.0], [0.0, 0.1]])
25     labels = [A, A, B, B]
26     
27     return group, labels
28 
29 # ==============================================
30 # 输入:
31 #        inX:目标向量
32 #        dataSet:训练集
33 #        labels:训练集对应的标签集
34 #        k:算法参数
35 # 输出:
36 #        sortedClassCount[0][0]:目标向量的分类结果
37 # ==============================================
38 def classify0 (inX, dataSet, labels, k):
39     kNN 分类器
40     
41     #计算目标向量与训练集中所有对象的距离并排序
42     dataSetSize = dataSet.shape[0]
43     diffMat = numpy.tile(inX, (dataSetSize, 1)) - dataSet
44     sqDiffMat = diffMat ** 2
45     sqDistances = sqDiffMat.sum(axis=1)
46     distances = sqDistances ** 0.5
47     sortedDistIndicies = distances.argsort()  # 返回数组从小到大的索引值
48     
49     # 取出与目标向量距离最近的三个
50     classCount = {}         # 该字典存放各种标签及其对应的频数
51     for i in range(k):      # 由前 k 位索引的结果构建字典
52         voteIlable = labels[sortedDistIndicies[i]]
53         classCount[voteIlable] = classCount.get(voteIlable, 0)+1
54     
55     # 以各个标签的频率为基准进行排序
56     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
57     
58     return sortedClassCount[0][0]   # 返回出现频率最高的标签
59 
60 def test():
61     分类器测试函数
62     
63     # 新建训练集及其对应标签集
64     group, labels = createDataSet()
65 
66     # 输入目标向量并返回分类结果后打印
67     label = classify0([0.0, 0.0], group, labels, 3)
68     print label
69 
70 if __name__ == __main__:
71     # 调用测试函数
72     test()
73     
74     

运行结果

  bubuko.com,布布扣

小结

  本文简要介绍了机器学习中经典的K-近邻算法,并给出了代码实现。

  后面的文章中,将继续讲解如何将此算法应用于具体的实际生活中。

 

K-近邻算法原理分析

标签:style   blog   http   ar   color   sp   for   strong   on   

原文地址:http://www.cnblogs.com/scut-fm/p/4170956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!