任務4 KNN的決策邊界+交叉驗證+特征規范化


任務目的:

  1.理解K對模型的影響

  2.如何得到最好的k值

  3.如何讓knn減少隱患(更標准化)

 

一、KNN的決策邊界以及K的影響

  決策依據於的某個邊界,在knn中則是用來區分不同類的點的分類邊界。隨着k值的上升,決策邊界也就越趨於平滑。如下圖:

   紫色那條是最佳分類邊界線,黑色的是knn的邊界線,可以看出k越大,決策邊界線越平滑。

那是不是越平滑模型准確率就越高勒?——不是的,越平滑就代表風險越小,收益也越小,所以我們要平衡。當k過大時,意味着離待分類樣本點較遠的點也會被包含進來對其判別產生影響,此時就會欠擬合。

 

二、交叉驗證

  核心思想:一個一個試,然后選出效果最好的K值。

  內容:將訓練數據分出一個區域為驗證數據,K折交叉驗證,就是將所有訓練集分成K塊(這里的k和knn的k是兩個概念),依次用驗證數據驗證k值。

 

  訓練集用於訓練模型。

  驗證集用於模型的參數選擇配置。(在此處就是在配置knn的k參數了)

  測試集對於模型來說是未知數據,用於評估模型的泛化能力。

 

  k折交叉驗證具體做法:

   第一步,不重復抽樣將原始數據隨機分為 k 份。

   第二步,每一次挑選其中 1 份作為測試集,剩余 k-1 份作為訓練集用於模型訓練。

   第三步,重復第二步 k 次,這樣每個子集都有一次機會作為測試集,其余機會作為訓練集。

   第四步,計算 k 組測試結果的平均值作為模型精度的估計,並作為當前 k 折交叉驗證下模型的性能指標。

 

 

代碼(使用sklearn):

 1 import numpy as np  2 from sklearn import datasets  3 from sklearn.neighbors import KNeighborsClassifier  4 from sklearn.model_selection import KFold  5 from sklearn.model_selection import GridSearchCV  6 
 7 iris = datasets.load_iris()  8 X = iris.data  9 y = iris.target 10 
11 k_range = list(range(1,16,2))           #range函數(開始,結束,步長)
12 param_gridknn = dict(n_neighbors = k_range) 13 knn = KNeighborsClassifier() 14 
15 clf = GridSearchCV(knn, param_gridknn, cv = 5) 16 clf.fit(X, y) 17 
18 print("best score is : %.2f" % clf.best_score_, "best param : ", clf.best_params_)
View Code

 剛學完k折交叉驗證,突然發現這和最近的一場cf的一道交互題的思維非常相似qaq。

 

題干:http://codeforces.com/contest/1270/problem/D

題意:有一個長度為n的序列,下標從1到n,你每次可以進行一次詢問,對交互機輸入m個下標,它返回給你第k小的元素的下標,最多詢問n次,通過返回的信息確定那個參數k!

  分析:相對於knn確定參數k,這里也是要確定參數k,對於m個元素的集合,因為它給我們的返回的信息非常少,所以我們使詢問區間的交集盡可能大,對於序列中的m+1個元素的子集,我們每次選取m個作為詢問,這樣就可以詢問m+1次,每個元素只有一次不加入詢問集合,其余m次都在詢問區間,然后我們得到m組的"測試結果“,通過一定找規律就能通過測試集了(指AC,手動紀念把ACM和機器學習結合,雖然稍微有點扯,( •̀ ω •́ )y)

 

 

三、特征規范化

  歐式距離的隱患是:當一個坐標系的計量單位發生過大改變時,會使得knn距離計算中一個坐標會起到很大的作用,另一個坐標沒啥用了。

  不同屬性有不同量級會導致:

    1.數量級的差異將導致量級較大的屬性占據主導地位。

    2.數量級的差異將導致迭代收斂速度減慢。

    3.依賴於樣本距離的算法對於數據的數量級非常敏感。

 

 解決辦法->特征標准化

  分為線性歸一化標准差歸一化

  前者指的是把特征值的范圍映射到[0,1]區間,后者的方法使得把特征值映射到均值為0,標准差為1的高斯分布。

  前者: 

      

  后者:  其中,μ、σ分別為原始數據集的均值和標准差

 

這樣我們就能有效解決坐標維度量級差別帶來的影響,具體哪個歸一辦法好得都試試。

 

 

 

 

 

 

參考博客:

https://www.cnblogs.com/sddai/p/8379452.html

https://blog.csdn.net/bohu83/article/details/93422797


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM