python實現knn演算法

2021-07-31 05:22:12 字數 2605 閱讀 6317

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待分類的點

defclassify0(inx,dataset,labels,k):

datasetsize = dataset.shape[0] #取出行數,為了方便下一步讓待分類的點擴充為矩陣

diffmat = np.tile(inx,(datasetsize,

1)) - dataset #把點inx複製成datasetsize行,1列的矩陣

sqdiffmat = diffmat ** 2

sqdistances = sqdiffmat.sum(axis = 1)#按行相加(x1-x2)**2 + (y1-y2)**2,因為資料已經是一維的了

distance = sqdistances ** 0.5

sorteddistance = distance.argsort()

classcount = {}

foriinrange(k):

votelabel = labels[sorteddistance[i]]

classcount[votelabel] = classcount.get(votelabel,

0) + 1

#預設值為0,取出每個類別的數量

# 把變成[('類別','次數')]的格式,然後取次數字段,按降序排列

sortedclasscount = sorted(classcount.items(),

key=operator.itemgetter(1),

reverse=true)

returnsortedclasscount[0][0] #取出次數最多的類別 [('類別','次數')] '類別'

#把檔案的資料轉換成矩陣的格式

deffile2matrix(filename):

fr = open(filename)

arrayoflines = fr.readline()#按行讀取

numoflines = len(arrayoflines)#得出總行數

returnmat = np.zeros((numoflines,

3))#定義乙個空的矩陣,numoflines行,3列

classlabelvector =

index = 0

forlineinarrayoflines:

line = line.strip()#去掉換行符/n,空格

listfromline = line.split('

\t')#每行資料按照\t進行分割

returnmat[index,:] = listfromline[0:3]# :代表索引取到末尾,把資料填充到returnmat這個空矩陣

index += 1

#一條記錄加1

returnreturnmat, classlabelvector

#對資料進行歸一化處理

defautonorm(dataset):

minvals = dataset.min(0)#表示不同行相比較得出最小,得到的是一行資料

maxvals = dataset.max(0)

ranges = maxvals - minvals

m = dataset.shape[0]

normdataset = np.zeros(np.shape(dataset))#建立乙個和dataset一樣的0矩陣

normdataset = dataset - np.tile(minvals,(m,

1)) #把最小值的那一行複製成m行,列不變的矩陣,再被dataset相減

normdataset = normdataset / np.tile(ranges,(m,

1))#再除以最大值減去最小值的值

returnnormdataset,ranges,minvals

if__name__ == '__main__':

group

, labels = createdataset()

result = classify0([3

,0.2],

group

,labels,

3) print (result)

Python實現KNN演算法

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,...

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 工作原理 存在乙個樣本資料集合,也稱為訓練樣本集,...