KNN演算法詳解

2021-09-26 06:37:11 字數 1866 閱讀 9457

一些自己的見解,記錄下方便日後複習

# encoding:utf-8

from numpy import *

import operator

def createdataset():

# 生成二維矩陣,每行表示乙個樣本

group = array([[1.0, 0.9], [1.0, 1.0], [0.1, 0.2], [0.0, 0.1]])

# 劃分四個樣本所屬的類別

labels = ['a','a','b','b']

return group,labels

# knn分類演算法函式定義

def knnclassify(newinput,dataset,labels,k):

# 求dataset的行數

numsamples = dataset.shape[0]

## 使得輸入的newinput變成和dataset行數一樣的陣列,方便求newinput到dataset中每乙個點的距離

# 距離等於 = ((x1-x2)**2 + (y1-y2)**2)**0.5

# tile([0,0],(2,3))#在行方向重複[0,0] 2次,在在列方向上重複[0,0]3次

diff = tile(newinput,(numsamples,1))-dataset

squareddiff = diff**2

# 按行累加

# axis=0,列表中,每乙個列表對應的列相加

# axis=1,列表中,每乙個列表對應的行相加

squareddist = squareddiff.sum(axis=1)

distance = squareddist**0.5

#對距離排序

#argsort() 將所有值從小到大排序,取原先的索引

sorteddistlndices = argsort(distance)

classcount = {}

for i in range(k):

'''sorteddistlndices是索引值(所有值從小到大排序的索引值,這裡只取前三,也就是選三個點的距離),算出每個索引值對應的labels

中的值,為a或者b,在classcount中新增a,b的值。並用get()方法累加次數'''

votelabel = labels[sorteddistlndices[i]]

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

# 第一種方法

# 這裡主要是選出a,b中對應的value誰更大,返回value對應的key(a或者b)這個值

maxcount = 0

for key,value in classcount.items():

if value >maxcount:

maxcount = value

maxlndex = key

return maxlndex

# # 第二種方法a

# sortedmp = sorted(classcount.items(), key=operator.itemgetter(1),reverse=true)

# # 將出現次數較多的情況返回

# return sortedmp[0][0]

def main():

group,labels = createdataset()

var1 = knnclassify([1.2,1.0],group,labels,3)

var2 = knnclassify([0.2,0.3],group,labels,3)

print(var1)

print(var2)

main()

K NN近鄰演算法詳解

k 近鄰演算法屬於一種監督學習分類演算法,該方法的思路是 如果乙個樣本在特徵空間中的k個最相似 即特徵空間中最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。1 需要進行分類,分類的依據是什麼呢,每個物體都有它的特徵點,這個就是分類的依據,特徵點可以是很多,越多分類就越精確。2 機器學...

K 近鄰演算法(kNN)詳解

from numpy import import operator 匯入科學計算包numpy和運算子模組 def creatdataset 建立資料集 樣本點集 和標籤 group array 1.0,1.1 1.0,1.0 0,0 0,0.1 labels a a b b return group...

詳解KNN演算法的python實現

本程式用knn演算法實現對手寫資料 0 9 的識別,k取值影響演算法正確率,大家可以自行測試 k 8,錯誤率 22 k 5,錯誤率 17 k 4,錯誤率 14 k 3,錯誤率 11 k 2,錯誤率 13 from numpy import 科 算模組 import operator 運算子模組 fr...