本文由中山大學In+ Lab整理完成,轉載注明出處
團隊介紹 傳送門
序言
KNN全稱K-Nearest Neighbor algorithm,又稱K近鄰算法。由於KNN是“惰性學習”(lazy learning)的著名代表,不做任何模型訓練,訓練時間開銷為零,所以我們稱它為“史上最懶惰的算法”。看到這你一定覺得很訝異,居然還有分類器可以懶惰成這個樣子。那么,我們就來看一看KNN憑什么可以理直氣壯地不做訓練卻能達到分類效果。
什么是KNN
KNN的基本思想莫過於“近朱者赤,近墨者黑”這簡單的八字箴言,他認為“物以類聚,人以群分”,簡而言之就是待預測的樣本點應該與其距離近的樣本點同類,這個距離近的樣本點我們稱之為“鄰居”,K=1時指的是與待測樣本距離最近的鄰居,K>1時則是指距離相對較近的K個鄰居,那么此時待測點是判別為屬於K個鄰居中出現最多的類別。以金融領域中的股票為例,按股票的成長空間可分為潛力股和地雷股。所謂潛力股就是指在未來一段時期存在上漲潛力的股票或具有潛在投資預期的股票。而地雷股正好相反,如果一些公司的造假暴露、突發的業績下降、長時間停牌、或前期遭大幅爆炒,從而導致股票價格大幅下跌甚至連續跌停,使原先買入公司股票的人猝不及防,好像中了地雷,對於這樣的股票,我們就稱它為地雷股。投資者自然希望投資潛力股,避開地雷股。基於上述的場景我們來看下面這張圖片,用藍色方形表示潛力股樣本數據,紅色三角形表示地雷股樣本數據,現在我們需要判斷中間綠色圓形是屬於潛力股還是地雷股。
K的取值≥1:
l 當K=1時,綠色原點的最近1個鄰居是紅色三角形,則判斷判定綠色的這個待分類點屬於紅色的三角形一類(地雷股)。
l 當K=3時,綠色圓點的最近的3個鄰居是2個紅色小三角形和1個藍色小正方形,少數從屬於多數,基於統計的方法,判定綠色的這個待分類點屬於紅色的三角形一類(地雷股)。
l 當K=5時,綠色圓點的最近的5個鄰居是2個紅色三角形和3個藍色的正方形,還是少數從屬於多數,基於統計的方法,判定綠色的這個待分類點屬於藍色的正方形一類(潛力股)。
l ....
分析到這里,大家不難發現KNN算法思想很簡單,其分類結果取決於“K值”以及“近鄰距離的度量方法”。
近鄰距離的度量方法
近鄰的度量方式有很多,不同方式找到的鄰居點也不同,下面介紹幾種常見的近鄰距離的度量方法。
1.LP距離(LP distance)
定義空間中的兩個樣本點為 和
,那么,xi和xj的Lp距離定義如下:
我們知道每個樣本是具有多個特征值的,所以我們可以把樣本點看成是一個由多個特征值組成的特征向量形如。
在這里你會發現有一個未知的參數P,P的取值范圍應是大於等於1的,Lp距離其實是P值不同的一組距離的定義:
l 當P=1時,稱為曼哈頓距離(Manhattan distance),即:
l 當P=2時,就是我們最早學到的歐氏距離(Euclidean distance),即:
回憶一下二維平面上的兩點間距離公式,其實就是二維的歐氏距離。
當P=∞時,稱為切比雪夫距離(Chebyshev distance),即:
玩過國際象棋的人或許知道,國王走一步能夠移動到相鄰的8個方格中的任意一個。那么國王從格子(x1,y1)走到格子(x2,y2)最少需要多少步?你會發現最少步數總是 步 ,切比雪夫就是這樣的一種度量方式。
上述三種不同的P值,當P取不同值時與原點的Lp距離為1的點所構成的圖形如下圖:
2.余弦值(Cosine)
我們學過二維空間兩個向量的夾角余弦公式為:
擴展到多維空間中,對於和
,同樣可以計算多維向量的余弦值:
這里借助三維坐標系來看下歐氏距離和余弦距離的區別,余弦距離使用兩個向量夾角的余弦值作為衡量兩個個體間差異的大小。相比歐氏距離,余弦距離更加注重兩個向量在方向上的差異。
對於文本類型的數據(比如股票新聞數據等)來說,使用余弦值來作為距離量度更為合適。 夾角余弦取值范圍為[-1,1]。夾角余弦越大表示兩個向量的夾角越小,夾角余弦越小表示兩向量的夾角越大。當兩個向量的方向重合時夾角余弦取最大值1,此時兩個向量的相似性最高,當兩個向量的方向完全相反夾角余弦取最小值-1,此時兩個向量的相似性為負。
K值的選擇
K值的選擇會影響選擇多少個鄰居點作為參考點,我們之前提到KNN的分類依據就是K個鄰居點的類別,在所選取的K歌鄰居點中,出現次數最多的類別即為待預測點的類別。關於K值的選取有一下三種可能發生的不當情況:
l 如果選擇較小的K值,就相當於用較小的領域中的訓練實例進行預測,只有與輸入實例較近或相似的訓練實例才會對預測結果起作用,與此同時帶來的問題是預測結果會對鄰近的實例點非常敏感,如果鄰居點恰巧是噪聲,預測結果就會出錯。
l 如果選擇較大的K值,就相當於用較大領域中的訓練實例進行預測,其優點是可以減少噪聲帶來的影響,但缺點是與輸入實例較遠(不相似的)訓練實例也會對預測器作用,使預測發生錯誤,且K值的增大就意味着整體的模型變得簡單。
l 當K=N時,則完全不做選取,因為此時無論輸入實例是什么,都只是簡單的預測它屬於全部訓練實例中最多的類別,這樣的模型過於簡單,忽略了訓練實例中大量有用信息。
在實際應用中,K值一般取一個比較小的數值,通常采用交叉驗證法(簡單來說,就是一部分樣本做訓練集,一部分做測試集),通過觀察K值不同時模型的分類效果來選擇最優的K值。
參考文獻
1.統計學習方法,李航
2.https://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html
3.概率論與數理統計 第四版 盛驟等編,高教版