from numpy import *
import operator
def createdataset():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['a','a','b','b']
return group,labels
def classify0(inx,dataset,labels,k):
datasetsize = dataset.shape[0]
diffmat = tile(inx,(datasetsize,1))-dataset
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
sortedclasscount = sorted(classcount.iteritems(),
key= operator.itemgetter(1),reverse=true)
return sortedclasscount[0][0]
偽**:
1.先得到group的長度
2.根據長度構建乙個和group維度相同的inx矩陣,然後分別和group中的每個點計算距離(向量的距離公式)
3.sortdistindicies是根據距離的大小得到的從小到大的距離向量的索引值
4.找出每乙個索引值對應的labels並計算出現的次數,所以classcount就是乙個鍵值對labels和次數的矩陣
5.將classcount根據次數的大小進行排序(從大到小),則第乙個鍵就是我們需要的資料
注釋:1.numpy的shape函式:返回矩陣的長度。
2.tile函式:
他的功能是重複某個陣列。比如tile(a,n),功能是將陣列a重複n次,構成乙個新的陣列
具體功能還挺複雜的,草草看了一遍,如果以後用到,再來細看吧:
3.還是忘了好多東西,*代表乘法,**代表乘方
4.sum(axis=1)表示將該行向量相加
5. argsort函式返回的是陣列值從小到大的索引值
6.list.get(k,d).get
相當於一條
if...else...語句,引數k在字典中,字典將返回list[k];如果引數k不在字典中則返回引數d,如果k在字典中則返回k對應的value值
k近鄰演算法matlab實現 K 近鄰演算法(一)
k 近鄰演算法是採用不同特徵之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 k 近鄰演算法的一般流程 1 收集資料集 可以使用任何方法 2 準備資料集 距離計算所需要的數值,最好是結構化的資料格式 3 分析資料 可以使用任何方法 4 訓練資料集...
K近鄰演算法(一)
k 近鄰演算法思想 尋找該點周圍最近的k個點。根據這k 個點的類別來判斷該點的類別 核心 資料歸一化。在必要的時候必須進行資料歸一化處理,防止某一特徵在計算資料時佔比較重 計算尤拉距離。使用python中 np的向量相減後的平方再開根號 distances for x train in x trai...
k 近鄰演算法
此文章參考機器學習實戰一書,具體的理論知識可以參考該書。本文的初衷只是為了做乙個複習,將學過的知識加以整理,其中不免有一定的錯誤。2.k 近鄰演算法的原理介紹 k 近鄰演算法通過測量不同的特徵值之間的距離進行分類。它的工作原理如下 存在乙個樣本的資料集合,也成為訓練樣本集合。並且樣本集中的每個資料都...