Python實現KNN演算法

2021-07-11 11:13:26 字數 1891 閱讀 7860

from numpy import *  

import operator  

def creatdataset():  

group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  

lables = ['a','a','b','b']  

return group,lables  

def classify0(inx,dataset,lables,k):

#array的shape函式返回指定維度的大小,如dataset為n*m的矩陣,則dataset.shape[0]返回n,dataset.shape[1]返回m,dataset.shape返回n,m

datasetsize = dataset.shape[0]

#tile函式簡單的理解,它的功能是重複某個陣列。比如tile(a,n),功能是將陣列a重複n次,構成乙個新的陣列  

#所以此處tile(inx,(datasetsize,1))的作用是將inx重複複製datasetsize次,以便與訓練樣本集的樣本個數一致  

#減去dataset就是求出其差值,所以diffmat為乙個差值矩陣

diffmat = tile(inx,(datasetsize,1))- dataset  

#以下三行**執行的是歐式距離的計算

sqdiffmat = diffmat**2

#平時用的sum應該是預設的axis=0,就是普通的相加,而當加入axis=1以後就是將乙個矩陣的每一行向量相加,axis用於控制是行相加還是列相加  

sqdistances = sqdiffmat.sum(axis=1)  

distance = sqdistances**0.5

#相關性的排序

#argsort函式返回的是陣列值從小到大的索引值

sorteddistance = distance.argsort()

#確定前k個點所在類別出現的頻率

classcount= {}

for i in range(k):

votelable = lables[sorteddistance[i]]

#dict.get(key, default=none)key 為字典中要查詢的鍵,default如果指定鍵的值不存在時,返回該預設值值。此句**用於統計標籤出現的次數  

classcount[votelable] = classcount.get(votelable,0)+1

#sorted函式引數解釋,sorted(iterable, cmp=none, key=none, reverse=false)  

#iterable:是可迭代型別;  

#cmp:用於比較的函式,比較什麼由key決定;  

#key:用列表元素的某個屬性或函式進行作為關鍵字,有預設值,迭代集合中的一項;  

#reverse:排序規則. reverse = true  降序 或者 reverse = false 公升序,有預設值。  

#返回值:是乙個經過排序的可迭代型別,與iterable一樣。  

######  

#operator模組提供的itemgetter函式用於獲取物件的哪些維的資料,引數為一些序號(即需要獲取的資料在物件中的序號)  

######  

sortedclasscount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=true)  

#返回最符合的標籤  

return sortedclasscount[0][0]  

group,lables=creatdataset()  

print classify0([0,0],group,lables,3)  

#測試[0,0]所屬類別  

python實現knn演算法

importnumpyasnp importoperator defcreatedataset group np.array 1.0 1.1 1.0 1.0 0.0 0.0 0.0 0.1 labels a a b b returngroup,labels 分類演算法 inx待分類的點 defcla...

python實現KNN演算法

具體 如下 import numpy as np import matplotlib.pyplot as plt class myknn def init self,k self.k k def compute self,x train,y train,x test dist i 0 計算歐式距離 ...

Python實現KNN演算法

一 作業題目 原生python實現knn分類演算法,用鳶尾花資料集。二 演算法設計 knn演算法核心思想 如果乙個樣本在特徵空間中的k個最相似 最近臨 的樣本中大多數屬於某個類別,則該樣本也屬於這個類別。knn k nearest neighbor 工作原理 存在乙個樣本資料集合,也稱為訓練樣本集,...