資料探勘演算法筆記 knn演算法

2021-08-03 23:31:14 字數 3383 閱讀 7315

#前幾篇的總結居然格式錯誤,找時間重新整理。

一調包

import numpy as np
from sklearn.neighbors import kneighborsclassifier
knn=kneighborsclassifier()
data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])   #打鬥和接吻次數
labels = np.array([1,1,1,2,2,2])  #結果
knn.fit(data,labels)
knn.predict([18,90])
二.根據原理編寫
import numpy as np

from numpy import *

import operator

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

datasetsize = dataset.shape[0]  #shape[0]是行數,shape[1]是列數

diffmat = tile(inx, (datasetsize,1)) - dataset #tile是把陣列進行重複

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5 

sorteddistindicies = distances.argsort()  #索引從小到大排列

classcount={}          

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

classcount[voteilabel] = classcount.get(voteilabel,0) + 1   #對出出現的label進行計數

sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1), reverse=true) #對label出現次數進行排序

return sortedclasscount[0][0]  #[0][0]是label出現頻率最多的label

呼叫
classify0([2,0], group, labels, 3)
對for迴圈的解釋:
import numpy as np

from numpy import *

import operator

data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])   #打鬥和接吻次數
labels = np.array([1,1,1,2,2,2])  #結果
inx=[8,10]
datasetsize = data.shape[0]

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

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5

distances
array([ 94.1328848 ,  90.19977827,  71.34423593,  93.        ,

91.13725912, 90.35485598])

sorteddistindicies

= distances.argsort()  

sorteddistindicies #索引序列有小到大排序
array([2, 1, 5, 4, 3, 0], dtype=int32)
for i in range(6):

voteilabel = labels[sorteddistindicies[i]]

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

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

classcount
sortedclasscount

[(1, 3), (2, 3)]

cc={}
cc[1] = cc.get(1,0) + 1
cc
cc[1] = cc.get(1,0) + 1
cc
cc[1] = cc.get(1,0) + 1

cc
#累加

資料探勘演算法 KNN學習

knn k nearest neighbour 是資料探勘領域的基本演算法之一,原理比較簡單,在各類別均衡 樣本容量比較大的情況下比較實用。演算法以樣本間的距離作為相似性測度。在同一測量空間中以測試樣本為中心,檢測一定範圍內的k個樣本類別,用 投票法 得出測試樣本的類別。設k為離測試樣本最近的樣本數...

資料探勘 分類演算法 KNN

knn k nearest neighbors k近鄰分類演算法 knn演算法從訓練集中找到和新資料最接近的k條記錄,然後根據他們的主要分類來決定新資料的類別。knn分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表...

資料探勘K近鄰(KNN)演算法

k近鄰演算法是一種基本分類與回歸演算法,是一種監督式學習。基本思想是在距離空間裡,如果乙個樣本的最接近的k個鄰居裡,絕大多數屬於某個類別,則該樣本也屬於這個類別。俗話叫,隨大流 簡單來說,knn可以看成 有那麼一堆你已經知道分類的資料,然後當乙個新的資料進入的時候,就開始跟訓練裡的每個點求距離,然後...