1. 程式人生 > >KNN算法的代碼實現

KNN算法的代碼實現

cluster IT pyplot admin rgs getter bsp 實現 開始

# -*- coding: utf-8 -*-
"""
Created on Wed Mar  7 09:17:17 2018

@author: admin
"""

#######################################################
#kNN cluster
#author:niucas
#date:2-18-03-07
#homePage:http://www.cnblogs.com/PiPifamily/
#email:[email protected]
#命名規則采用駝峰命名
#######################################################
#導入對應的包 import numpy as np import matplotlib.pyplot as plt import pandas as pd import operator ############ #準備數據 ############ def creatDataSet(): ‘‘‘ 函數的作用是創建一個訓練數據集,並且對應各個數據的label(標簽) ‘‘‘ testData = np.array([ [1.0,1.1], [1.0,1.1], [0.,0.], [0.,
0.1] ]) testLabel = [A,A,B,B] return testData,testLabel def classify(inData,dataSet,labels,k): ‘‘‘ 此函數是用來進行分類; 參數定義如下: inData:輸入數據 dataSet:訓練數據集 labels:訓練數據對應的labels k:選取的K值 ‘‘‘ dataSetSize = dataSet.shape[0] #第一步計算歐式距離 diff = np.tile(inData,(dataSetSize,1)) - dataSet #
訓練數據集每個對象與測試數據的差值 distance = ((diff**2).sum(axis=1)) ** 0.5#求差值的平方和 ############# #開始進行投票 ############# sortedDistIndex = np.argsort(distance) #將歐式距離進行升序排列,結果對用的是索引號 #存放最終結果的字典,初始化 classCount = {} #投票就是計算前K個值中,概率的最大的類,哪個labels值最大 for i in range(k): voteLabel = labels[sortedDistIndex[i]] classCount[voteLabel] = classCount.get(voteLabel,0) + 1 #將classCount中的分類結果進行排序,返回得票數最高的label sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse = True)#降序排列,默認是升序排列 # class = max(classCount.items(),Key = lambda x : x[1])[0] return sortedClassCount[0][0] if __name__ == "__main__": #導入數據 dataSet,labels = creatDataSet() inData = [0.1,0.1] #簡單分類 className = classify(inData,dataSet,labels,3) print(the class of test sample is %s %className)

KNN算法的代碼實現