knn距離度量影響 KNN中K以及 距離度量

2021-10-18 08:12:38 字數 2704 閱讀 6625

從k近鄰演算法、距離度量談到kd樹、sift+bbf演算法 - 結構之法 演算法之道 - csdn部落格​blog.csdn.net

)。knn中的k值選取對k近鄰演算法的結果會產生重大影響。如李航博士的一書「統計學習方法」上所說:

如果選擇較小的k值,就相當於用較小的領域中的訓練例項進行**,「學習」近似誤差會減小,只有與輸入例項較近或相似的訓練例項才會對**結果起作用,與此同時帶來的問題是「學習」的估計誤差會增大,換句話說,k值的減小就意味著整體模型變得複雜,容易發生過擬合, (偏差小方差大)

如果選擇較大的k值,就相當於用較大領域中的訓練例項進行**,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入例項較遠(不相似的)訓練例項也會對**器作用,使**發生錯誤,且k值的增大就意味著整體的模型變得簡單。

k=n,則完全不足取,因為此時無論輸入例項是什麼,都只是簡單的**它屬於在訓練例項中最多的類,模型過於簡單,忽略了訓練例項中大量有用資訊。

在實際應用中,k值一般取乙個比較小的數值,例如採用交叉驗證法(簡單來說,就是一部分樣本做訓練集,一部分做測試集)來選擇最優的k值。

近似誤差和估計誤差的關係?

答:近似誤差:可以理解為對現有訓練集的訓練誤差。估計誤差:可以理解為對測試集的測試誤差。

近似誤差其實可以理解為模型估計值與實際值之間的差距。 估計誤差其實可以理解為模型的估計係數與實際係數之間的差距。

近似誤差關注訓練集,如果近似誤差小了會出現過擬合的現象,對現有的訓練集能有很好的**,但是對未知的測試樣本將會出現較大偏差的**。模型本身不是最接近最佳模型。

估計誤差關注測試集,關注泛化能力,估計誤差小了說明對未知資料的**能力好。模型本身最接近最佳模型。

最小化近似誤差容易過擬合

最小化估計誤差整體的泛化能力好。

方差和偏差

對於機器學習來說,泛化誤差可以理解為兩部分,分別是偏差(bias)和方差(variance);偏差指的是演算法的期望**與真實**之間的偏差程度,反應了模型本身的擬合能力;方差度量了同等大小的訓練集的變動導致學習效能的變化,刻畫了資料擾動所導致的影響。

當模型越複雜時,擬合的程度就越高,模型的訓練偏差就越小;

但此時如果換一組資料可能模型的變化就會很大,即模型的方差很大,所以模型過於複雜的時候會導致過擬合。

error反映的是整個模型的準確度,bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精準度,variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性。

下面以乙個簡單的例子進行闡述:搶手在進行打靶實驗的時候,目標是為了打到10環,但是實際上只打到了7環,那麼這裡面的error就是3。具體分析打到7環的原因,可能有兩方面:
瞄準出了問題,比如實際上射擊瞄準的是9環而不是10環;

槍本身的穩定性有問題,雖然瞄準的是9環,但是只打到了7環。

那麼在上面一次射擊實驗中,bias就是1,反應的是模型期望與真實目標的差距,而在這次試驗中,由於variance所帶來的誤差就是2,即雖然瞄準的是9環,但由於本身模型缺乏穩定性,造成了實際結果與模型期望之間的差距。
在乙個實際系統中,bias與variance往往是不能兼得的。如果要降低模型的bias,就一定程度上會提高模型的variance,反之亦然。造成這種現象的根本原因是,我們總是希望試圖用有限訓練樣本去估計無限的真實資料。當我們更加相信這些資料的真實性,而忽視對模型的先驗知識,就會盡量保證模型在訓練樣本上的準確度,這樣可以減少模型的bias。但是,這樣學習到的模型,很可能會失去一定的泛化能力,從而造成過擬合,降低模型在真實資料上的表現,增加模型的不確定性。相反,如果更加相信我們對於模型的先驗知識,在學習模型的過程中對模型增加更多的限制,就可以降低模型的variance,提高模型的穩定性,但也會使模型的bias增大。bias與variance兩者之間的trade-off是機器學習的基本主題之一,機會可以在各種機器模型中發現它的影子。

具體到k-fold cross validation的場景,其實是很好的理解的。首先看variance的變化,還是舉打靶的例子。假設我把搶瞄準在10環,雖然每一次射擊都有偏差,但是這個偏差的方向是隨機的,也就是有可能向上,也有可能向下。那麼試驗次數越多,應該上下的次數越接近,那麼我們把所有射擊的目標取乙個平均值,也應該離中心更加接近。更加微觀的分析,模型的**值與期望產生較大偏差,在模型固定的情況下,原因還是出在資料上,比如說產生了某一些異常點。在最極端情況下,我們假設只有乙個點是異常的,如果只訓練乙個模型,那麼這個點會對整個模型帶來影響,使得學習出的模型具有很大的variance。但是如果採用k-fold cross validation進行訓練,只有1個模型會受到這個異常資料的影響,而其餘k-1個模型都是正常的。在平均之後,這個異常資料的影響就大大減少了。相比之下,模型的bias是可以直接建模的,只需要保證模型在訓練樣本上訓練誤差最小就可以保證bias比較小,而要達到這個目的,就必須是用所有資料一起訓練,才能達到模型的最優解。因此,k-fold cross validation的目標函式破壞了前面的情形,所以模型的bias必然要會增大。

參考:

機器學習中的bias(偏差),error(誤差),和variance(方差)有什麼區別和聯絡?​www.zhihu.com

KNN距離函式的簡單拓展

knn k nearestneighbor可以是是分類法中最簡單的演算法了。大致的idea為 找出k各跟新資料點最像的點,看這些點主要屬於哪類,那麼新資料點也就屬於哪類的了。其偽 如下 1.拿到乙個新的資料點 2.計算其到training set中每個點的距離 3.對距離排序 4.對距離新資料點最近...

KNN演算法應用 影響薪水的因素

目錄導包 資料和目標值 資料是隨機的 資料是按比列的 總結 train test split,kfold,stratifiedkfold左右都是將資料拆分。屬性 刪除無用資料 資料結構 演算法進行 影響薪水的因素有很多,比如教育背景,年齡,種族,工作單位等等,可以用knn進行分類。import nu...

KNN的優化演算法1 距離加權

參考文章 對參考文章中最後一部分說的有問題的地方進行了修改。權值加權 為每個點的距離增加乙個權重,使得距離近的點可以得到更大的權重,在此描述如何加權。該方法最簡單的形式是返回距離的倒數,比如距離d,權重1 d。有時候,完全一樣或非常接近的商品權重會很大甚至無窮大。基於這樣的原因,在距離求倒數時,在距...