最近在看《機器學習實戰》這本書,書中的**都是對某種演算法在對應應用場景的實現,感覺比大學時代的資料結構或者演算法題還要晦澀難懂,只能慢慢學習了,演算法這種東西類似做數學題,要多做多練。
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 近鄰演算法採用測量不同特徵值之間的距離方法進行分類,屬於監督學習。工作原理 村愛乙個樣本資料集合 亦稱訓練樣本集 並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本...