《機器學習實戰》K近鄰演算法原理及實現

2021-08-21 07:47:26 字數 3937 閱讀 8982

鳶尾花(iris)有很多種,但又因為特徵很是相近,不好區分,通過大量資料歸納的特徵,我們通過花萼長度(sepal.length),花萼寬度(sepal.width),花瓣長度(petal.length),花瓣寬度(petal.width),4個屬性**鳶尾花卉屬於(setosa,versicolour,virginica)三個種類中的哪一類,從而更加有效地進行區分。

原理:已知曉部分樣本的類別。然後利用歐式距離,計算所有點的距離,對所有資料做乙個排序,確定最小元素前k個元素所在的分類,計算需要判別的樣本與已知樣本不同特徵值之間的距離。最後,將需判別的樣本劃分入在其臨近的k個樣本中出現次數最多的類別之中。

iris,txt(iris

也稱鳶尾花卉資料集,是一類多重變數分析的資料集。資料集包含150個資料集,分為3類,每類50個資料,每個資料報含4個屬性(花萼長度,花萼寬度,花瓣長度,花瓣寬度) 。

橫座標:花萼長度(sepal.length)

縱座標:花萼寬度(sepal.width)

橫座標:花瓣長度(petal.length)

縱座標:花瓣寬度(petal.width)

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

datasetsize = dataset.shape[0]  

diffmat = tile(inx,(datasetsize,1)) - dataset  

sqdiffmat = diffmat**2  

sqdistances = sqdiffmat.sum(axis = 1)  

distances = sqdistances**0.5  

sorteddistindicies = distances.argsort()  

classcount = {}  

for i in range(k):  

voteilabel = labels[sorteddistindicies[i]]  

classcount[voteilabel] = classcount.get(voteilabel,0) + 1  

sortedclasscount = sorted(classcount.items(),  

key=operator.itemgetter(1),reverse=true)  

return sortedclasscount[0][0]  

取k=3,選取50%、60%、70%、80%的資料做測試集,繪製正確率折線圖

k=4,、5、6、7、8、9、10  取50%的資料做測試資料,繪製正確率折線圖

k值        測試資料比例(資料量)                錯誤率

分析:在測試資料量到65%之前演算法分類出錯的概率都非常低,65%之後錯誤率有明顯提高。

k值           測試資料比例(資料量)                錯誤率

分析:在k值小於25時,分類演算法出錯的概率很小,k值影響不大,但25之後錯誤率開始上公升。

優點:1)簡單、有效。

2)重新訓練的代價較低(類別體系的變化和訓練集的變化,在web環境和電子商務應用中是很常見的)。

3)計算時間和空間線性於訓練集的規模(在一些場合不算太大)。

4)由於knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合。

5)該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分。

缺點:1)knn演算法是懶散學習方法(lazy learning,基本上不學習),一些積極學習的演算法要快很多。

2)類別評分不是規格化的(不像概率評分)。

3)輸出的可解釋性不強,例如決策樹的可解釋性較強。

4)該演算法在分類時有個主要的不足是,當樣本不平衡時,如乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的k個鄰居中大容量類的樣本占多數。該演算法只計算「最近的」鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響執行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進。

5)計算量較大。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本

peter harrington。《機器學習實戰》

python使用matplotlib繪製柱狀圖教程

機器學習實戰之knn演算法

《機器學習實戰》 K 近鄰演算法

基本原理 通過計算新資料與給定的樣本資料之間的距離,來確定相似度排名 然後取前k個最相似的樣本,統計這k 一般不大於20 個樣本中出現最多的分類,設為新資料的分類。新資料,訓練樣本集,樣本資料標籤 即分類 最近鄰 前k個最相似資料 最近鄰標籤 演算法實施 首先提取要比較的特徵,確定各特徵的權重,進行...

機器學習實戰 K 近鄰演算法

簡單的說,k 近鄰演算法採用測量不同特徵值之間的距離辦法進行分類.收集資料 可以使用任何方法。準備資料 距離計算所需要的數值,最好是結構化的資料格式。分析資料 可以使用任何方法。訓練演算法 此步驟不適用於k 近鄰演算法。測試演算法 計算錯誤率。使用演算法 首先需要輸入樣本資料和結構化的輸出結果,然後...

機器學習實戰 k 近鄰演算法

本系列是基於 機器學習實戰 這本書做的讀書筆記,原書採用python2作為工具,我則將原書 改為用python3編寫並記錄在此系列中。我將把書中對這些機器學習演算法的定義謄上,然後寫下自己對該演算法的通俗理解,之後貼出書中演算法清單中的 本書講解的第乙個機器學習演算法是k 近鄰演算法 knn 它的工...