K臨近演算法

2021-09-09 01:44:41 字數 2227 閱讀 7961

k臨近演算法(k-nearest neighbor, knn)是最簡單的監督學習分類演算法之一。(有之一嗎?)

對於乙個應用樣本點,k臨近演算法尋找距它最近的k個訓練樣本點即k個nearest neighbor。

若在k個鄰居中屬於某一類別的最多,則認為應用樣本點也屬於該類別。

knn演算法無需訓練,很容易實現。

from numpy import *

import operator

class knnclassifier():

def __init__(self):

self.dataset =

self.labels =

def loaddataset(self,filename):

fr = open(filename)

for line in fr.readlines():

linearr = line.strip().split()

dataline = list()

for i in linearr:

label = dataline.pop() # pop the last column referring to label

def setdataset(self, dataset, labels):

self.dataset = dataset

self.labels = labels

def classify(self, data, k):

self.dataset = array(self.dataset)

self.labels = array(self.labels)

self._normdataset()

datasetsize = self.dataset.shape[0]

# get distance

diffmat = tile(data, (datasetsize,1)) - self.dataset

sqdiffmat = diffmat**2

distances = sqdiffmat.sum(axis=1)

# get k nearest neighbors

sorteddistindicies = distances.argsort()

classcount= {}

for i in range(k):

voteilabel = self.labels[sorteddistindicies[i]]

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

# get fittest label

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

return sortedclasscount[0][0]

def _normdataset(self):

minvals = self.dataset.min(0)

maxvals = self.dataset.max(0)

ranges = maxvals - minvals

normdataset = zeros(shape(self.dataset))

m = self.dataset.shape[0]

normdataset = self.dataset - tile(minvals, (m,1))

normdataset = normdataset/tile(ranges, (m,1)) #element wise divide

self.dataset = normdataset

def test(self):

self.dataset = array([[1.0,1.1],[1.0,1.0],[0.9,0.9],[0,0],[0,0.1],[0,0.2]])

self.labels = [1,1,1,2,2,2]

print(self.classify([1.0,1.1], 2))

if __name__ == '__main__':

knn = knnclassifier()

knn.loaddataset('testdata.txt')

print(knn.classify([72011, 4.932976, 0.632026], 5) )

# knn.test()

K臨近演算法

k臨近演算法 k nearest neighbor,knn 是最簡單的監督學習分類演算法之一。有之一嗎?對於乙個應用樣本點,k臨近演算法尋找距它最近的k個訓練樣本點即k個nearest neighbor。若在k個鄰居中屬於某一類別的最多,則認為應用樣本點也屬於該類別。knn演算法無需訓練,很容易實現...

k臨近演算法

1.knn k近鄰演算法的工作機制就是給定測試樣本,基於某種距離度量找出訓練集中與其最靠近的k個訓練樣本,然後基於這k個 鄰居 的資訊來進行 2.思維導圖 3.import numpy as np 訓練資料 class k neigbors def init self,k self.k k deff...

K 臨近演算法學習總結

1演算法簡介 按照距離遞增次序排序 選取與當前點距離最小的k個點 確定前k個點所在類別的出現頻率 返回前k個點所出現頻率最高的類別作為當前點的 分類 import numpy as np import operator def createdataset 四組二維特徵 group np.array ...