1. 程式人生 > >KNN分類演算法及改進

KNN分類演算法及改進

k近鄰演算法是一種基於例項的演算法,即學習過程只是簡單的儲存已知的訓練資料,遇到新的查詢例項時,從訓練集中取出相似的例項,因此它是一種懶惰(lazy)學習方法。可以為不同的待分類查詢例項建立不同的目標函式進行逼近。

k近鄰演算法原理:

        令D為訓練資料集,當測試集d出現時,將d與D中所有的樣本進行比較,計算他們之間的相似度(或者距離)。從D中選出前k個最相似的樣本,則d的類別由k個最近鄰的樣本中出現最多的類別決定。

        k近鄰演算法關鍵部分是距離(相似度)函式,對於關係型資料,經常使用歐氏距離,對於文字資料,經常採用餘弦相似度。k的選擇是通過在訓練集上交叉檢驗,交叉驗證一般分為三類:double-fold CV即經常所說的2折交叉;10-fold交叉和LOO(leave one out)CV即留一法交叉。

參考http://blog.163.com/[email protected]/blog/static/1194684712011113085410814/

2折:將原始資料集DataSet均分為兩份:一份作為訓練集,即trainingSet,一份作為測試集,即testingSet,然後用訓練集去做訓練,用測試集去驗證;之後再將訓練集作為測試集,測試集作為訓練集進行迭代一次,將兩次所得的誤差經行處理作為總體資料的預測誤差。(注:這裡強調一點,就是資料集一定要均分為兩份,理由是:作為訓練集,資料量一定要不小於測試集,所以在迭代的過程中,使得資料不出現錯誤情況,必須均分。)

       K-折:(在這裡說下K-折)是在將資料集分成K個子集,K個子集中得一個作為測試集,而其餘的K-1個數據集作為訓練集,最後對K個數據子集的錯誤計算均值,K次迭代驗證是對監督學習演算法的結果進行評估的方法,資料集的劃分一般採用等均分或者隨機劃分。【來自邵峰晶等編著《資料探勘原理與演算法》中國水利水電出版社】

      LOO:這個方法是K折的一種特列,就是把資料分為N份,其實每一份都是一個樣本,這樣迭代N次,計算最後的誤差來作為預測誤差。

k近鄰的問題:

       k近鄰簡單直接,有效,健壯,在很多情況下可以和複雜的演算法效能相同。但是k近鄰有三個缺點:

(1)需要更精確的距離函式代替歐氏距離

(2)搜尋一個最優的近鄰大小代替k

(3)找出更精確的類別概率估計代替簡單的投票方法。

針對上述三種問題,提出了三中改進思路:

1.改進距離函式

     由於它基於假設測試例項在歐式空間中最相似於近鄰的例項的類別。由於例項間距離計算基於例項的所有屬性,然而我們搜尋的是例項包括不相關屬性,標準的歐氏距離將會變得不準確。當出現許多不相關屬性時稱為維數災難,kNN對此特別敏感。

      解決方法:(1)消除不相關屬性即特徵選擇。Kohavietal提出了一種纏繞法(wrapper)除此外還有貪婪搜尋和遺傳搜尋。

                        (2)屬性加權。w是屬性a的權重


當所有的屬性不均衡時,屬性加權距離函式定義為


Ip (Ai;C)是屬性A和類別C的互資訊

除此之外,還有一種基於頻率的距離函式,稱之為相異性度量。與卡方距離相似


值差分度量(VDM)是標稱屬性的距離函式


C是輸出的類別數量,P是輸入屬性A時輸出C的條件概率,VDM在度量連續屬性時需要將連續屬性對映為標稱屬性

2.改進近鄰距離大小

     KNN分類準確率對K值敏感,通過交叉驗證方法確定最優的K值。一旦在訓練時學習了最優的K值,可以在分類時對所有的測試集使用。DKNN即動態確定K值,所有的演算法都需要確定K近鄰,為此,在KDTree和NBTree中,例項儲存在葉節點上,鄰近例項儲存在相同或者相近的葉節點上。樹的內部節點通過測試選擇屬性的相關性對測試例項進行排序

3.改進類別概率估計

      KNN的例項鄰近的類別被認為相同。所以改進演算法需要根據他們到測試例項的距離進行加權。


另外一種非常有效的方法是基於概率的區域性分類模型,即結合NB演算法,這種演算法在資料較小的時候表現很好。有研究者發現保持緊鄰k很小將減少對於NB強依賴的機會,然而NB的類別估計概率不可信。

相關推薦

KNN分類演算法改進

k近鄰演算法是一種基於例項的演算法,即學習過程只是簡單的儲存已知的訓練資料,遇到新的查詢例項時,從訓練集中取出相似的例項,因此它是一種懶惰(lazy)學習方法。可以為不同的待分類查詢例項建立不同的目標函式進行逼近。 k近鄰演算法原理:         令D為訓練資料集,當

KNN分類演算法MATLAB程式與結果

K鄰近演算法   KNN演算法的決策過程   k-Nearest Neighbor algorithm    右圖中,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果K=3,由於紅色三角形所佔比例為2/3,綠色圓將被賦予紅色三角形那個類,如果K=5,由於藍

Hadoop/MapReduce Spark KNN分類演算法實現

KNN 假如有一群已知分類的點集: //S.txt 100;c1;1.0,1.0 101;c1;1.1,1.2 102;c1;1.2,1.0 103;c1;1.6,1.5 104;c1;1.3,1.7 105;c1;2.0,2.1 106;c1;2.0,2.2 107;c

基於KNN分類演算法手寫數字識別的實現(二)——構建KD樹

上一篇已經簡單粗暴的建立了一個KNN模型對手寫圖片進行了識別,所以本篇文章採用構造KD樹的方法實現手寫數字的識別。 (一)構造KD樹 構造KD樹的基本原理網上都有介紹,所以廢話不多說,直接上程式碼。 #Knn KD_Tree演算法 import math from

AI工程師成長之路-KNN分類演算法實現

本博文是博主在阿里雲大學學習記錄的筆記,未經博主允許禁止隨意轉載。 接下來將學習如何使用Python實現KNN分類演算法。 說明:本實驗的程式檔案與資料在啟動jupyter notebook後,就會在主目錄中顯示,可以直接開啟檢視並執行,但為了增加熟練度,達到最佳的學習效

分類KNN分類演算法之Python實現

KNN稱為K最近鄰。對於待分類資料,它先計算出與其最相近的K個的樣本,然後判斷這K個樣本中最多的類標籤,並將待分類資料標記為這個最多的類標籤。 python樣例程式碼: import numpy as np from sklearn.neighbors import KN

sklearn學習筆記之knn分類演算法

# -*- coding: utf-8 -*- import sklearn from sklearn import neighbors import matplotlib.pyplot as plt from sklearn.model_selection import train_test_

KNN分類演算法原理及其Matlab實現

KNN演算法原理 K近鄰演算法是一種簡單的監督學習演算法。對於給定測試樣本,直接計算該樣本和訓練集的距離,將距離最近的k個“鄰居”點的類別作為參考,作為預測結果返回。 測試資料 程式碼 matlab版

KNN分類演算法java實現

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

機器學習演算法(二)——決策樹分類演算法R語言實現方法

決策樹演算法是分類演算法中最常用的演算法之一。決策樹是一種類似流程圖的樹形結構,可以處理高維資料,直觀易理解,且準確率較高,因此應用廣泛。本篇小博就決策樹的若干演算法:ID3演算法、C4.5演算法以及分類迴歸樹(CART)、C5.0進行對比介紹,並對比C4.5與C5.0處理

KNN分類演算法實現By Java

K最近鄰(k-Nearest Neighbor,KNN)分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。KNN演算法中,

從零開始實現KNN分類演算法

K近鄰分類演算法 (K-Nearest Neighbor) KNN分類演算法非常簡單,該演算法的核心思想是如果一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。該方法在確定分類決策上只依據最鄰近K個樣本的類別來決定

用Python開始機器學習(4:KNN分類演算法) sklearn做KNN演算法 python

http://blog.csdn.net/lsldd/article/details/41357931 1、KNN分類演算法 KNN分類演算法(K-Nearest-Neighbors Classification),又叫K近鄰演算法,是一個概念極其簡單,而分類效果又很優秀的

kNN分類演算法的Python實現

1.k-近鄰演算法實現 from numpy import * import operator def createDataSet(): group = array([[1.0, 1.1], [2.0, 2.0], [0, 0], [4.1, 5.1]]) labels = ['A

文字挖掘——基於TF-IDF的KNN分類演算法實現

一、專案背景 此專案是用於基建大資料的文字挖掘。首先爬蟲師已經從各個公開網站上採集了大量的文字,這些文字是關於基建行業的各種招中標公告,文本里會有部分詞彙明顯或者隱晦的介紹此專案是關於哪一工程類別的,比如公路工程,市政工程,建築工程,軌道交通工程,等等。

【機器學習實戰】—KNN分類演算法

一、KNN演算法概述 kNN分類演算法本身簡單有效,既可以分類又可以進行迴歸。 核心原理:已知樣本資料集的每一個數據的特徵和所屬的分類,將新資料的特徵與樣本資料進行比較,找到最相似(最近鄰)的K(k

Python機器學習實戰kNN分類演算法

自學《機器學習實戰》一書,書中的程式碼親自敲一遍,努力搞懂每句程式碼的含義: 今天將第一章kNN分類演算法的筆記總結一下。 # -*- coding: utf-8 -*- """ k-近鄰演算法小結: k-近鄰演算法是基於例項的學習,k-近鄰演算法必須儲存全部資料集,

機器學習-KNN分類演算法Iris例項

概念 python知識點 KNN例項 # -*- coding: utf-8 -*- """ Created on Sat Mar 5 09:55:02 2016 @au

機器學習實戰之KNN分類演算法

示例:使用KNN改進約會網站配對效果(學習這一節把自己需要注意的和理解的記錄下來) 第零步:實現KNN演算法: 需注意: classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 #Python 字典(

KNN分類演算法優缺點

KNN演算法的優點: 1、思想簡單,理論成熟,既可以用來做分類也可以用來做迴歸; 2、可用於非線性分類; 3、訓練時間複雜度為O(n); 4、準確度高,對資料沒有假設,對outlier不敏感;