機器學習 k 近鄰 kNN 演算法

2021-07-01 20:43:23 字數 2348 閱讀 5884

一、基本原理

存在乙個樣本資料集合(也稱訓練樣本集),並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。

我們一般只選擇樣本集中前k(k通常是不大於20的整數)個最相似的資料,最後選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。

二、演算法流程

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

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

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

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

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

三、演算法的特點

優點:精度高、對異常值不敏感、無資料輸入假定。

缺點:計算複雜度高、空間複雜度高。

適用資料範圍:數值型和標稱型。

四、python**實現

1、建立資料集

def create_data_set():

group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])

labels = ['a', 'a', 'b', 'b']

return group, labels

2、實施knn演算法

##############################

#功能:將每組資料劃分到某個類中

#輸入變數:inx, data_set,labels,k

# 分類的向量,樣本資料,標籤,k個近鄰的樣本

#輸出變數:sorted_class_count[0][0] 選擇最近的類別標籤

##############################

def classify0(inx, data_set, labels, k):

data_set_size = data_set.shape[0]  # 獲得陣列的行數

# 利用tile(inx, (data_set_size, 1)),在原來的基礎上再構造data_set_size*1的inx

# 每行資料相當於某個向量點的座標

# 對每行資料進行求和,得到乙個data_set_size*1的矩陣

# 最後計算歐式距離

diff_mat = tile(inx, (data_set_size, 1))-data_set

sq_diff_mat = diff_mat**2

sq_distances = sq_diff_mat.sum(axis=1)

distances = sq_distances**0.5

# argsort函式返回的是陣列值從小到大的索引值

sorted_dist_indicies = distances.argsort()

class_count = {}

for i in xrange(k):

vote_label = labels[sorted_dist_indicies[i]]

# get相當於一條if...else...語句

# 如果引數vote_label不在字典中則返回引數0,如果vote_label在字典中則返回vote_label對應的value值

class_count[vote_label] = class_count.get(vote_label, 0) + 1

# items以列表方式返回字典中的鍵值對,iteritems以迭代器物件返回鍵值對,而鍵值對以元組方式儲存,即這種方式[(), ()]

# operator.itemgetter(0)獲取物件的第0個域的值,即返回的是key值

# operator.itemgetter(1)獲取物件的第1個域的值,即返回的是value值

# operator.itemgetter定義了乙個函式,通過該函式作用到物件上才能獲取值

# reverse=true是按降序排序

sorted_class_count = sorted(class_count.iteritems(), key=operator.itemgetter(1), reverse=true)

return sorted_class_count[0][0]

3、**測試

def main():

group, labels = create_data_set()

sorted_class_labels = classify0([0, 0], group, labels, 3)

print 'sorted_class_labels=', sorted_class_labels

if __name__ == '__main__':

main()

機器學習 k近鄰演算法 kNN

knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...

機器學習 k 近鄰演算法(KNN)

簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用範圍 數值型和標稱型。對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的...

機器學習 KNN演算法 K 近鄰

如何計算測試樣本與y已分類樣本之間的距離 如何選擇k值 k值過大或過小的影響 k值過小 例如k 1,結果對近鄰的例項點非常敏感,容易受到雜訊影響,發生過擬合 k值過大 可以一定程度上避免上述情況,但是現有訓練集的訓練誤差會增大,輸入不相似的訓練例項會導致 錯誤 適合分類問題,有較高的精確度,對異常值...