ML演算法一 K 近鄰演算法

2021-07-27 10:56:08 字數 1460 閱讀 1872

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 近鄰演算法通過測量不同的特徵值之間的距離進行分類。它的工作原理如下 存在乙個樣本的資料集合,也成為訓練樣本集合。並且樣本集中的每個資料都...