#前幾篇的總結居然格式錯誤,找時間重新整理。
一調包
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
sorteddistindiciesarray([ 94.1328848 , 90.19977827, 71.34423593, 93. ,
91.13725912, 90.35485598])
= distances.argsort()
sorteddistindicies #索引序列有小到大排序
for i in range(6):array([2, 1, 5, 4, 3, 0], dtype=int32)
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可以看成 有那麼一堆你已經知道分類的資料,然後當乙個新的資料進入的時候,就開始跟訓練裡的每個點求距離,然後...