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