KNN 的簡單應用

2021-08-21 09:09:58 字數 1991 閱讀 3838

本報告在單一資料集上測試了 knn 的 k 值,尤拉距離的使用與否,歸一化資料與否對 knn 演算法結果的影響,測試資料**於 uci 機器學習資料集的 iris 資料集,由於資料量較少,採用交叉驗證的方式(10-fold-cross validation),實驗結果表明,在本資料集上使用尤拉距離,不進行特徵歸一化,在 k = sqrt(m)(m 為資料測試量)能取得最小的錯誤率,並對不同變數影響下的結果進行了分析。

iris 資料集的中文名是安德森鳶尾花卉資料集,英文全稱是 anderson』s iris dataset。iris 包含 150 個樣本,對應資料集的每行資料。每行資料報含每個樣本的四個特徵和樣本的類別資訊,一共分為三類:

雖然是四維資料,但其屬性主要分為兩類:sepal 的長寬, petal 的長寬,首先分別根據其繪製散點圖進行分析:

圖中可以看出紅色點代表的 setosa 類與其他兩類區分交大,而藍綠點在 sepal屬性上有所混疊,可以嘗試使用 knn 演算法。

由於資料量較小採用 10-fold-crossvalidation 的方法進行測試分析,誤差測度採用分類錯誤率。

機器學習實戰的**中並沒有用尤拉距離賦權,對其 classify0 **稍作修改,

新增 ifuseed 0-1 變數控制賦權與否。

改變部分如下:

封裝了 cross_validation 函式用於測試改變 k, fold 值(k-fold-cross validation),ifuseed,返回交叉驗證的平均錯誤率,函式原型如下:

另外,設計的交叉驗證演算法每次根據順序取樣資料與測試集,為了增加實驗結果的普遍性,每次單一測試前對資料集順序進行打亂:

首先,測試採用尤拉矩陣賦權與否根據 k 值對結果的影響,繪製結果圖如下:

測試前查閱相關文獻發現,一般 k 值的選取根據經驗主義(empirically)可以選用資料量的開方,本資料採用 10-fold crossvalidation,總資料量 150,所以訓練資料是 135,sqrt(135)=11.62,可以看出與實驗結果較為符合,並且在本資料集上,不使用尤拉距離賦權在 26 之前錯誤率甚至優於使用尤拉賦權但隨 k 值增大,錯誤率波動增大,而使用尤拉距離賦權的錯誤率隨 k 增長趨於穩定。

同時測試了在本資料集上實現歸一化資料與否對精確度的影響,兩組測試都使用尤拉距離賦權:

在本資料集上,不歸一化特徵的錯誤率明顯優於歸一化後的,可能原因是幾組資料處於乙個量級,不會產生由於資料量級導致的偏差,並且歸一化後影響了本身不同資料的權重。

為了保證實驗結果的普遍性,每組測試對測試資料打亂再交叉驗證,其他組的測試結果如下:

其結果與之前的實驗分析較為一致

KNN應用及演算法簡單實現

鳶尾 yu n w i 學名 iris tectorum maxim.iris 資料集,統計學常用資料集 fromsklearn importneighbors fromsklearn importdatasets knn neighbors.kneighborsclassifier iris da...

KNN簡單實現

knn算是機器學習入門演算法中比較容易理解的了,要注意和k means的一些區別 knn k means 1.knn是分類演算法 2.監督學習 3.餵給它的資料集是帶label的資料,已經是完全正確的資料 1.k means是聚類演算法 2.非監督學習 3.餵給它的資料集是無label的資料,是雜亂...

KNN 演算法的例項應用

為了提高給 helen 女士匹配約會物件的成功率,收集了各位男士的以下三種資訊 每年的飛行里程數 玩遊戲所耗時間百分比 每週消費的冰淇淋公升數 約會資料 datingtestset.txt 先看一下資料集的內容 這裡擷取了三行,前三列分別是每年的飛行里程數 玩遊戲所耗時間百分比和每週消費的冰淇淋公升...