機器學習實戰筆記1 K近鄰演算法詳解

2021-08-28 00:09:00 字數 2523 閱讀 6103

最近在看《機器學習實戰》這本書,書中的**都是對某種演算法在對應應用場景的實現,感覺比大學時代的資料結構或者演算法題還要晦澀難懂,只能慢慢學習了,演算法這種東西類似做數學題,要多做多練。

k-近鄰演算法乙個典型的應用場景就是在區別電影類別中,比如說根據在電影片段中出現親吻,打

鬥場景來判斷電影是否是愛情片或是動作片。

簡單來說,k-緊鄰演算法採用測量不同特徵值之間的距離方法進行分類。

存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。

演算法步驟為:

1.計算已知類別資料集中的點與當前點之間的距離;

2.按照距離遞增次序排序;

3.選取與當前點距離最小的k個點;

4.確定前k個點所在類別的出現頻率;

5.返回前k個點所出現頻率最高的類別作為當前點的**分類。

首先我們先準備乙個簡單的資料集:

from numpy import *

import operator

defcreatedataset

(): group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) # 訓練樣本

labels = ['a', 'a', 'b', 'b'] # 標籤向量

return group, labels

if __name__ == '__main__':

#建立測試資料集

group, labels = createdataset()

#列印測試資料集

print(group)

print(labels)

然後是k-近鄰演算法:

"""

函式說明:knn演算法,分類器

parameters:

inx - 用於分類的資料(測試集)

dataset - 用於訓練的資料(訓練集)

labes - 分類標籤

k - knn演算法引數,選擇距離最小的k個點

returns:

sortedclasscount[0][0] - 分類結果

"""def

classify0

(inx, dataset, labels, k):

datasetsize = dataset.shape[0] # 第二維的長度

diffmat = tile(inx, (datasetsize, 1)) - dataset #

sqdiffmat = diffmat ** 2

# 冪 - 返回x的y次冪

sqdistances = sqdiffmat.sum(axis=1) # 將乙個矩陣的每一行向量相加

distances = sqdistances ** 0.5

# 求根

sorteddistindicies = distances.argsort() # 元素從小到大排列,提取其對應的index(索引),然後輸出

classcount = {}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

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

# python3中用items()替換python2中的iteritems()

# key=operator.itemgetter(1)根據字典的值進行排序

# key=operator.itemgetter(0)根據字典的鍵進行排序

# reverse降序排序字典

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

return sortedclasscount[0][0]

**主要含義就是根據兩點距離公式:

計算距離,選擇距離最小的前k個點,並返回分類結果。

測試**:

if __name__ == '__main__':

# 建立資料集

group, labels = knn.createdataset()

# knn分類

print(knn.classify0([0, 0], group, labels, 3))

列印出『b』,證明執行正確。

以上**其實就是為了實現上面的數學公式,第一次接觸用python寫科學計算**的同學可能感覺到很吃力,不要著急,慢慢練習就熟練了。

機器學習實戰 1 K近鄰

1.np.tile array,行重複次數,列重複次數 a np.array 1,2,3 b np.tile a,2,3 b 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 2.array.sum axis 0 1 0 每列求和 1 沒行求和 3.array.argsort ...

機器學習實戰1 K近鄰演算法(KNN)

knn k nearest neighbors 演算法,也叫k最近鄰演算法。主要思想是,如果乙個樣本在特徵空間中的k個最相似 或最鄰近 的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。例如,村里投票建水井,有三個選址a,b和c,所有的人家都投了票,除了李四家。村書記決定找出距李四家最近的6戶...

演算法1 k 近鄰

簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類,屬於監督學習。工作原理 村愛乙個樣本資料集合 亦稱訓練樣本集 並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本...