首页 > 编程语言 > 详细

knn算法

时间:2017-03-02 18:24:14      阅读:245      评论:0      收藏:0      [点我收藏+]

K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了。它采用测量不同特征值之间的距离方法进行分类。它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

其算法描述如下:

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

2)按照距离递增次序排序;

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

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

5)返回前k个点出现频率最高的类别作为当前点的预测分类。

对于机器学习而已,Python需要额外安装三件宝,分别是Numpy,scipy和Matplotlib。前两者用于数值计算,后者用于画图。安装很简单,直接到各自的官网下载回来安装即可。安装程序会自动搜索我们的python版本和目录,然后安装到python支持的搜索路径下。反正就python和这三个插件都默认安装就没问题了。

一般实现一个算法后,我们需要先用一个很小的数据库来测试它的正确性,否则一下子给个大数据给它,它也很难消化,而且还不利于我们分析代码的有效性。

      首先,我们新建一个kNN.py脚本文件,文件里面包含两个函数,一个用来生成小数据库,一个实现kNN分类算法。代码如下:

from numpy import *
import operator
def createDataSet():
    group=array([[1.0,0.9],[1.0,1.0],[0.1,0.2],[0.0,0.1]])
    labels=[‘A‘,‘A‘,‘B‘,‘B‘]
    return group,labels
#[1.2,1.0]
def kNNClassify(newInput,dataset,labels,k):
    numSamples=dataset.shape[0]
    diff=tile(newInput,(numSamples,1))-dataset
    squaredDiff=diff**2
    squaredDist=sum(squaredDiff,axis=1)
    distance=squaredDist**0.5
    
    sortedDistIndices=argsort(distance)
    print sortedDistIndices
    classCount={}
    for i in xrange(k):
        for j in xrange(4):
            if sortedDistIndices[j]==i:
                 voteLabel=labels[j]
                 print voteLabel
                 classCount[voteLabel]=classCount.get(voteLabel,0)+1

  然后我们在命令行中这样测试即可:

import kNN
from numpy import *

dataSet,labels=kNN.createDataSet()
testX=array([1.2,1.0])
k=3
kNN.kNNClassify(testX,dataSet,labels,3)

  http://blog.csdn.net/zouxy09/article/details/16955347#reply

knn算法

原文:http://www.cnblogs.com/lcbg/p/6491900.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!