您的位置:首页 > 编程语言 > Python开发

Python KNN最近邻分类算法

2016-11-14 23:08 197 查看
KNN最近邻算法:利用向量之间的距离来分类。
步骤:
第一步:计算新样本与已知分类样本之间的距离。
第二步:将所求距离按从小到大排列。
第三步:选取距离最近的k个样本。
第四步:将新样本归为以上k个样本大多数中的一类。
以下为KNN最近邻分类算法的python代码:
第一部分:KNN分类代码

# -*- coding: utf-8 -*-
"""

Created on Mon Feb 22 13:21:22 2016

K-NearestNeighbor

"""
import numpy as np
import operator

class KNNClassifier():

    """Thisis a Nearest Neighbor classifier. """

    #定义k的值

    def __init__(self, k=3):

       self._k = k

    #计算新样本与已知分类样本的距离并从小到大排列   

    def _calEDistance(self, inSample, dataset):

       m = dataset.shape[0]

       diffMat = np.tile(inSample, (m,1)) -dataset

 
bb47
     sqDiffMat = diffMat**2 #每个元素平方

       sqDistances = sqDiffMat.sum(axis = 1)  #求和

       distances = sqDistances** 0.5 #开根号

       return distances.argsort()  #按距离的从小到达排列的下标值

    

    def _classify0(self, inX, dataSet, labels):

       k = self._k

       dataSetSize = dataSet.shape[0]   
           

       diffMat = np.tile(inX, (dataSetSize,1)) -dataSet
    

       sqDiffMat = diffMat**2

       sqDistances = sqDiffMat.sum(axis=1)   
           

       distances = sqDistances**0.5

       sortedDistIndicies = distances.argsort()   
      

       classCount={}                         
      

       for i in range(k):

          voteIlabel = labels[sortedDistIndicies[i]]

          classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

       sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)

       return sortedClassCount[0][0]

       

    #对一个样本进行分类

    def _classify(self, sample, train_X, train_y):

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: