機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法
1、簡介
(1)Cover和Hart在1968年提出最初的臨近演算法
(2)鄰近演算法屬於分類(classification)演算法
(3)輸入基於例項的學習(instance-based learing),懶惰學習(lazy learing)——處理訓練集時並沒有建造任何的模型,當對一個未知的例項進行歸類時才進行歸類
2、舉例
如何將電影的例子模擬成一個廣泛的模型?
對於每一個電影模擬成一個例項點,每個點的特徵向量(在這裡是二維的),可以是N維的,即:每個點都可以抽象成空間中具有多維的空間向量。
每個點所對應的標籤分類的值是我們的目標。如下圖:
3、演算法詳述
(1)步驟:
為了判斷未知例項的類別,以所有已知類別的例項作為參照
選擇引數K(對任意一個未知例項選取最近的K個已知例項進行歸類,通常K的值不會太大,選取1,3,5,7等等的奇數,因為奇數更容易分辨勝負更容易分類,根據實驗對引數進行優化)
計算未知例項與所有已知例項的距離
選擇最近鄰K個已知例項(選擇最近鄰K個距離的例項)
根據少數服從多數的投票法則(majority-voting),讓未知例項歸類為K個最近鄰樣本中最多數的類別
(2)細節
關於距離的衡量方法
歐氏距離Euclidean Distance(最常用)定義:對應點的每個維度求差後的平方求和再開平方。x=(x1,x2,...,xn) y=(y1,y2,...,yn)
其他的距離均衡:餘弦值(cos)、相關度(correlation)、曼哈頓距離(Manhattan Diatance):得名於紐約曼哈頓街道,求點的距離看其走過多少多少街區。
(3)舉例:要求出G點到每一個點的歐氏距離
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#求歐氏距離
import math
def ComputeEuclideanDistance(x1,y1,x2,y2):
d = math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2))
return d
d_ag = ComputeEuclideanDistance(3,104,18,90)
d_bg = ComputeEuclideanDistance(2,100,18,90)
d_cg = ComputeEuclideanDistance(1,81,18,90)
d_dg = ComputeEuclideanDistance(101,10,18,90)
d_eg = ComputeEuclideanDistance(99,5,18,90)
d_fg = ComputeEuclideanDistance(98,2,18,90)
print("d_ag:",d_ag)
print("d_bg:",d_bg)
print("d_cg:",d_cg)
print("d_dg:",d_dg)
print("d_eg:",d_eg)
print("d_fg:",d_fg)
執行結果:
d_ag: 20.518284528683193
d_bg: 18.867962264113206
d_cg: 19.235384061671343
d_dg: 115.27792503337315
d_eg: 117.41379816699569
d_fg: 118.92854997854805
比較以上的計算出的6個歐氏距離,選取最近的3個距離對應的點A,B,C三個點,由於這三個點都屬於Romance型別,則未知資料G點根據最近鄰規則分類(KNN)也屬於Romance型別。若選取的點中兩個型別都存在,則遵從少數服從多數的原則,選取類別數目多的作為未知點的類別。
(4)KNN演算法的優缺點舉例
上圖有兩個不同類別的點分別為紅色和藍色,綠色的點為新的例項,問這個點的歸類?
假設取K=1,只看距離綠色最近的一個點,應該和藍色分類到一起;假設K=4,包含3個紅色與1個藍色,根據少數服從多數原則,應該歸類為紅色;假設K=9,應該歸類為紅色。
所以KNN演算法對於K的選擇非誠敏感,K=1時,不能夠防止噪音,通常會增大K,以增加對噪音的健壯性。
(5)演算法優缺點
演算法優點:簡單、易於理解、容易實現、通過對K的選擇可具備丟噪音資料的健壯性
演算法缺點:需要大量的空間儲存已知的例項、演算法的複雜度高(需要比較所有已知例項與要分類的例項)
當樣本分佈不均衡時,比如其中一類樣本過大(例項資料量過多)佔主導的時候,新的未知例項容易被歸類為這個主導樣本,
因為這類樣本例項的數量過大,但這個新的未知例項實際並未接近目標樣本。
(6)改進版本
考慮距離,根據距離加上權重。比如:1/d(d為距離)
相關文章
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法的應用機器學習RESTKNN演算法
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- 機器學習——KNN(K近鄰)機器學習KNN
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- 機器學習演算法(三):K近鄰(k-nearest neighbors)初探機器學習演算法REST
- 《機器學習實戰》k最近鄰演算法(K-Nearest Neighbor,Python實現)機器學習演算法RESTPython
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- 機器學習——K近鄰演算法機器學習演算法
- 分類演算法-k 鄰近演算法演算法
- K近鄰法(KNN)原理小結KNN
- 機器學習-11-k近鄰演算法機器學習演算法
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- 機器學習演算法之K近鄰演算法機器學習演算法
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- 機器學習筆記1(K-近鄰演算法)機器學習筆記演算法
- K近鄰演算法:機器學習萌新必學演算法演算法機器學習
- K - 近鄰演算法演算法
- K近鄰演算法演算法
- 什麼是機器學習分類演算法?【K-近鄰演算法(KNN)、交叉驗證、樸素貝葉斯演算法、決策樹、隨機森林】機器學習演算法KNN隨機森林
- 什麼是機器學習的分類演算法?【K-近鄰演算法(KNN)、交叉驗證、樸素貝葉斯演算法、決策樹、隨機森林】機器學習演算法KNN隨機森林
- 機器學習實戰2.1. 超詳細的k-近鄰演算法KNN(附Python程式碼)機器學習演算法KNNPython
- 機器學習 第4篇:sklearn 最鄰近演算法概述機器學習演算法
- k-近鄰演算法演算法
- k近鄰演算法python實現 -- 《機器學習實戰》演算法Python機器學習
- 最基礎的分類演算法(KNN)演算法KNN
- 機器學習實戰----k值近鄰演算法(Python語言)機器學習演算法Python
- K-鄰近均值演算法演算法
- 機器學習經典分類演算法 —— k-近鄰演算法(附python實現程式碼及資料集)機器學習演算法Python
- 《機器學習實戰》中的程式清單2-1 k近鄰演算法(kNN)classify0都做了什麼機器學習演算法KNN
- 機器學習_K近鄰Python程式碼詳解機器學習Python
- 【機器學習】機器學習建立演算法第2篇:K-近鄰演算法【附程式碼文件】機器學習演算法
- 用定租問題學透機器學習的K近鄰演算法機器學習演算法
- K近鄰模型模型
- Python:K-近鄰演算法Python演算法
- 2.1 k鄰近演算法之二演算法
- 2.1 k鄰近演算法之一演算法
- K-最近鄰法(KNN)簡介KNN
- KNN演算法——分類部分KNN演算法