KNN(K近鄰)總結

2021-08-18 07:21:21 字數 1933 閱讀 9517

一、knn思想簡介

knn 採用的是「物以類聚,人以群分」的思想。也就是找出k個距離待遇測點最近的資料點,然後根據這k個點的類別(或者數值),根據一定的規則判斷(或者計算)得到帶**點的類別(或者數值)。

knn的核心就是找出資料點的k個鄰近的資料點。

分類中採用少數服從多數或者加權的少數服從多數的分類方法。(當然,knn一般用於分類)

回歸中採用平均值或者加權平均值的方法得到回歸值。

二、

查詢knn中k個最近鄰的資料點的方法

1)暴力求解(brute,樣本量較少的時候適用)

所謂暴力求解就是計算待遇測點到每個資料點的距離,然後進行排序處理,再將排序後的最近的k的點取出,就是要找的k個最近鄰的點。

這裡給出暴力求解的偽**:

對未知類別屬性的資料集中每個點依次執行如下步驟:

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

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

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

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

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

2)kd-tree(樣本量較多的時候適用

根據第一種方法我們可以求解k近鄰的資料點,且該方法在資料集較小的情況下能夠得到較好的結果。然而,在資料集較大(樣本量較多)的時候,要對於每個點都計算距離在排序,程式執行效率較低,不能快速得到結果。因此,這裡提出了第二種方法,也就是kd-tree的方法。(要理解kd-tree思想)

kd-tree的構建方法:

1、計算所有特徵的方差,並選擇最大的方差(方差體現資料集的離散程度)作為劃分的標準;

2、對於方差最大的特徵,選擇資料集中的該特徵的中位數作為劃分點,將特徵小於劃分點的樣本資料劃分到左子樹中,將大於劃分點的樣本資料劃分到右子樹中。

3、不斷重複第二步即完成了kd-tree的構建。

那麼,構建好的kd-tree該如何查詢近鄰的k個點呢??

1、首先,對於給定的目標點,我們先要在kd-tree中找到包含該目標點的葉子節點

2、以目標點為圓心,以目標點到葉子節點樣本例項的距離半徑,得到乙個超球體,要找到k個最近鄰的點一定在這個超球體中。

3、返回葉子節點的父節點,檢查另外乙個葉子節點的超矩形體是否與超球體相交。如果相交,則到這個超矩形體中找是否有更近鄰的資料點。如果有,則更新近鄰點。(簡單點說,就是看所在節點的分割面與超球體是否相交割,如果是,說明這個分割面將超球體分為了兩個部分,k近鄰點可能被分割到了另乙個子樹中去,所以要到另乙個子樹中查詢是否存在更近鄰的點)

4、如果不相交,則返回父節點的父節點,繼續查詢另外乙個分支是否有更近鄰的點。直到遍歷到根節點,結束遍歷過程。所得到的k個近鄰點就是最近鄰的點。

三、小結

knn作為較為簡單的演算法模型,其演算法的原理理解起來也較為簡單。然而,knn能夠既能夠實現分類,也能夠運用於回歸中,演算法的效果也都是不錯的。其中的kd-tree的方法理解稍難(遞迴的過程),且在後面的決策樹、密度聚類等演算法中也較多的應用。

KNN k近鄰演算法

現在假如我們已經擁有了一些資料 稱為訓練資料集 ts,並且擁有所有資料的類別名 即每條資料應該歸於哪個類別。當我們要判斷一條不知類別的資料時,首先讓這條資料m和已經擁有的所有的資料ts中的每一條資料進行比較,然後根據比較結果選擇出和m最相似 一般是基於距離 的k條資料 k是個整數,並且通常是小於20...

kNN(k近鄰演算法)

k近鄰分析 knn 一 概述 knn演算法是一種有監督學習的分類演算法。所謂有監督學習,就是在應用演算法之前我們必須準備一組訓練集,訓練集中的每個例項都是由一些特徵和乙個分類標籤組成 通常還會存在乙個測試集,用來測試訓練出來的分類模型的準確性。其實knn演算法並沒有體現出有監督學習的所有特點,沒有模...

kNN k近鄰演算法

一 knn演算法的思想 knn演算法作為機器學習演算法中非常有效比較容易掌握的演算法,其基本思想是採用測量不同特徵值之間的距離的方法進行分類。knn屬於監督學習演算法,它的工作原理是 存在乙個樣本資料集,訓練樣本集,並且樣本集中的每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。...