1. 程式人生 > >KNN-K最近鄰(k-NearestNeighbor)分類演算法

KNN-K最近鄰(k-NearestNeighbor)分類演算法

參考:https://baike.baidu.com/item/鄰近演算法/1151153?fr=aladdin&fromid=3479559&fromtitle=knn

https://www.cnblogs.com/ybjourney/p/4702562.html

       kNN演算法的核心思想是如果一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。該方法在確定分類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。 kNN方法在類別決策時,只與極少量的相鄰樣本有關。由於kNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,kNN方法較其他方法更為適合。

        右圖中,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果K=3,由於紅色三角形所佔比例為2/3,綠色圓將被賦予紅色三角形那個類,如果K=5,由於藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。

       K通常是不大於20的整數。KNN演算法中,所選擇的鄰居都是已經正確分類的物件。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。

       KNN演算法不僅可以用於分類,還可以用於迴歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的

權值(weight),如權值與距離成反比。

在KNN中,通過計算物件間距離來作為各個物件之間的非相似性指標,避免了物件之間的匹配問題,在這裡距離一般使用歐氏距離或曼哈頓距離:

接下來對KNN演算法的思想總結一下:就是在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前K個數據,則該測試資料對應的類別就是K個數據中出現次數最多的那個分類,其演算法的描述為:

1)計算測試資料與各個訓練資料之間的距離;

2)按照距離的遞增關係進行排序;

3)選取距離最小的K個點;

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

5)返回前K個點中出現頻率最高的類別作為測試資料的預測分類。

        優點:

1.簡單,易於理解,易於實現,無需估計引數,無需訓練; 2. 適合對稀有事件進行分類; 3.特別適合於多分類問題(multi-modal,物件具有多個類別標籤), kNN比SVM的表現要好。 缺點: 該演算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。 該方法的另一個不足之處是計算量較大,因為對每一個待分類的文字都要計算它到全體已知樣本的距離,才能求得它的K個最近鄰點。 演算法改進:主要分成了分類效率和分類效果兩方面。 分類效率:事先對樣本屬性進行約簡,刪除對分類結果影響較小的屬性,快速的得出待分類樣本的類別。該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。 分類效果:採用權值的方法(和該樣本距離小的鄰居權值大)來改進,Han等人於2002年嘗試利用貪心法,針對檔案分類實做可調整權重的k最近鄰居法WAkNN (weighted adjusted k nearest neighbor),以促進分類效果;而Li等人於2004年提出由於不同分類的檔案本身有數量上有差異,因此也應該依照訓練集合中各種分類的檔案數量,選取不同數目的最近鄰居,來參與分類。

相關推薦

KNN-K近鄰k-NearestNeighbor)分類演算法

參考:https://baike.baidu.com/item/鄰近演算法/1151153?fr=aladdin&fromid=3479559&fromtitle=knn https://www.cnblogs.com/ybjourney/p/4702562

演算法圖解》第10章 K近鄰K nearest neighbors,KNN演算法

     今天看到這裡的案例非常有意思,即以座標軸中的座標來作為引數。計算不同點的距離。實際上就是標記一些使用者的喜好和習慣,不同的維度代表不同的專案,在這個維度上的值可表示喜好程度。電影評分、音樂收藏...總之,很多情況都可以用,很有趣。就是標記了很多使用者,看哪些使

斯坦福CS231n專案實戰一):k近鄰kNN分類演算法

k最近鄰分類(kNN,K Nearest neighbor)分類演算法是一種最簡單的分類器之一。在kNN演算法訓練過程中,它將所有訓練樣本的輸入和輸出label都儲存起來。測試過程中,計算測試樣本與每個訓練樣本的L1或L2距離,選取與測試樣本距離最近的前k個

K近鄰KNN

K最近鄰演算法 #K最近鄰演算法分辨手寫數字圖片 from sklearn.datasets import load_digits from sklearn.decomposition import PCA digits = load_digits() pca = PCA(n_compone

python機器學習庫sklearn——K近鄰K近鄰分類K近鄰迴歸

這裡只講述sklearn中如何使用KNN演算法。 無監督最近鄰 NearestNeighbors (最近鄰)實現了 unsupervised nearest neighbors learning(無監督的最近鄰學習)。 它為三種不同的最近鄰演算法

K--鄰近K-NN)演算法

程式碼整理: # -*- coding: utf-8 -* import numpy as np import matplotlib.pyplot as plt from collections import Counter def dist(A,B):

基於TensorFlow的近鄰NN)分類器——以MNIST識別為例

一、最近鄰分類理論 二、TF在CPU上實現NN分類 具體程式碼如下: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data

關於K近鄰分類演算法KNN)的綜述

摘要 作為一種非引數的分類演算法, K近鄰(KNN)演算法是非常有效和容易實現的。 它已經廣泛應用於分類、迴歸和模式識別等 。在應用 KNN 演算法解決問題的時候, 要注意兩個方面的問題:—樣本權重和

第九章 KNNK近鄰分類演算法

1、惰性學習法         說到惰性學習法,就要提到急切學習法。         急切學習法:給定訓練集, 在接收待分類的新元祖(如檢驗元組)之前,就構造泛化(即分類)模型。如:決策樹歸納、貝葉斯分類、基於規則的分類、後向傳播分類、支援向量機和基於關聯規則挖掘的分類等。

PCB 加投率計算實現基本原理--K近鄰算法KNN

最近鄰 plist 控制 str 驗收 階段 分享圖片 數據量 出現 PCB行業中,客戶訂購5000pcs,在投料時不會直接投5000pcs,因為實際在生產過程不可避免的造成PCB報廢, 所以在生產前需計劃多投一定比例的板板, 例:訂單 量是5000pcs,加投3%,那就

資料探勘之k-近鄰KNN與KMeans)

最近鄰法基於類比學習,它既可以用於聚類,也可以用於分類 K-means是基於最近鄰法的聚類方法。演算法描述如下: 輸入:k, data[n]; (1) 選擇k個初始中心點,例如c[0]=data[0],…c[k-1]=data[k-1]; (2) 對於data[0]….

K近鄰演算法KNN)---sklearn+python實現

def main(): import numpy as np from sklearn import datasets digits=datasets.load_digits() x=digits.data y=digits.target from sklear

分類2):k-近鄰、貝葉斯分類

一、k-最近鄰 1、演算法 積極學習方法(eager learner):通過訓練樣本建立模型。 消極學習方法(lazy learner):例項的學習,k-最近鄰就屬於這種。 k-最近鄰演算法: 令k是最近鄰數目,D是訓練樣例集合 for

機器學習教程 四.KNNk近鄰演算法理解和應用

import numpy as np import warnings from collections import Counter import pandas as pd import random def k_nearest_neighbors(data, predict, k=3):     if l

K近鄰演算法KNN

       K最近鄰 (k-Nearest Neighbors,KNN) 演算法是一種分類演算法,也是最簡單易懂的機器學習演算法,沒有之一。1968年由 Cover 和 Hart 提出,應用場景有字

機器學習與資料探勘-K近鄰(KNN)演算法的實現java和python版)

KNN演算法基礎思想前面文章可以參考,這裡主要講解java和python的兩種簡單實現,也主要是理解簡單的思想。 python版本: 這裡實現一個手寫識別演算法,這裡只簡單識別0~9熟悉,在上篇文章中也展示了手寫識別的應用,可以參考:機器學習與資料探勘-logistic迴

機器學習之K-近鄰規則分類(KNN)演算法

準備分為兩個部分,一個是理論,一個就是程式碼實現。程式碼也可以在我的GitHub上下載,後面有連結。 一、理論知識 相信我的筆記還是比較詳細的 二、程式碼實現KNN演算法 1. 首先要生成一些資料集,以供訓練和測試 我造的資料是關於通過身高

在Ignite中使用k-近鄰(k-NN)分類演算法

  在本系列前面的文章中,簡單介紹了一下Ignite的線性迴歸演算法,下面會嘗試另一個機器學習演算法,即k-最近鄰(k-NN)分類。該演算法基於物件k個最近鄰中最常見的類來對物件進行分類,可用於確定類成員的關係。    一個適合k-NN分類的資料集是鳶尾花資料集,它可以很容易地通過UCI網站獲得。    鳶尾

在Ignite中使用k-近鄰(k-NN)分類算法

任務 dense 取數 讀取數據 features fit del div 利用   在本系列前面的文章中,簡單介紹了一下Ignite的線性回歸算法,下面會嘗試另一個機器學習算法,即k-最近鄰(k-NN)分類。該算法基於對象k個最近鄰中最常見的類來對對象進行分類,可用於確定

機器學習分類演算法K近鄰K-Nearest Neighbor)

一、概念 KNN主要用來解決分類問題,是監督分類演算法,它通過判斷最近K個點的類別來決定自身類別,所以K值對結果影響很大,雖然它實現比較簡單,但在目標資料集比例分配不平衡時,會造成結果的不準確。而且KNN對資源開銷較大。   二、計算 通過K近鄰進行計算,需要: 1、載入打標好的資料集,然