1.K-近鄰(KNearestNeighbor,KNN)算法簡介 :對于一個未知的樣本,我們可以根據(jù)離它最近的k個樣本的類別來判斷它的類別。

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站制作與策劃設(shè)計,無錫網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:無錫等地區(qū)。無錫做網(wǎng)站價格咨詢:18982081108
以下圖為例,對于一個未知樣本綠色小圓,我們可以選取離它最近的3的樣本,其中包含了2個紅色三角形,1個藍色正方形,那么世喊我們可以判斷綠色小圓屬于紅色三角形這一類。
我們也可以選取離它最近的5個樣本,其中包含了3個藍色正方形,2個紅色三角形,那么我們可以判斷綠色小圓屬于藍色正方形這一類。
3.API文檔
下面我們來對KNN算法中的參數(shù)項做一個解釋說明:
'n_neighbors':選取的參考對象的個數(shù)(鄰居個數(shù)),默認值為5,也可以自己指定數(shù)值,但不是n_neighbors的值越大分類效果越好,最佳值需要我們做一個驗證。
'weights': 距離的權(quán)重參數(shù),默認uniform。
'uniform': 均勻的權(quán)重,所有的點在每一個類別中的權(quán)重是一樣的。簡單的說,就是每個點的重要性都是一樣的。
'distance':權(quán)重與距離的倒數(shù)成正比,距離近的點重要性更高,對于結(jié)果的影響也更大。
'algorithm':運算方法,默認auto。
'auto':根絕模型fit的數(shù)據(jù)自動選擇最合適的運算方法。
'ball_tree':樹模型算法BallTree
'kd_tree':樹模型算法KDTree
'brute':暴力算法
'leaf_size':葉子的尺寸,默認30。只有當algorithm = 'ball_tree' or 'kd_tree',這個參數(shù)需要設(shè)定。
'p':閔可斯基距離,當p = 1時,選擇曼哈頓距離;當p = 2時,選擇歐式距離。
n_jobs:使用計算機處理器數(shù)目,默認為1。當n=-1時,使用所有的處理器進行運算。
4.應(yīng)用案例演示
下面以Sklearn庫中自帶的數(shù)據(jù)集--手寫數(shù)字識別數(shù)據(jù)集為例,來測試下kNN算法。上一章,我們簡單的介紹了機器學習的一般步驟:加載數(shù)據(jù)集 - 訓練模型 - 結(jié)果預(yù)測 - 保存模型。這一章我們還是按照這個步驟來執(zhí)行。
[手搜笑野寫數(shù)字識別數(shù)據(jù)集]
5.模型的方法
每一種模型都有一些它獨有的屬性方法(模型的技能,能做些什么事),下面我們來了解下knn算法常用的的屬性方法。
6.knn算法的優(yōu)缺點
優(yōu)點:
簡單,效果還不錯,升攔適合多分類問題
缺點:
效率低(因為要計算預(yù)測樣本距離每個樣本點的距離,然后排序),效率會隨著樣本量的增加而降低。
乳腺癌數(shù)據(jù)包括569例細胞活檢案例,每個案例有32個特征。
第一個特征是識別號碼,
第二個特征是癌癥診斷結(jié)果(癌癥診斷結(jié)果用編碼“M”表示惡性,用編碼“B”表示良性),
其他30個特征是數(shù)值型的實驗室測量結(jié)果。(其他30個數(shù)值型測量結(jié)果由數(shù)字化細胞核的10個不同特征的均值、標準差和最差值(即最大值)構(gòu)成)。這些特征包括:
Radius(半徑)、Texture(質(zhì)地)、Perimeter(周長)、Area(面積)、Smoothness(光滑度)、Compactness(致密性)、Concavity(凹度)、Concave points(凹點)、Symmetry(對稱性)、Fractal dimension(分形維數(shù))
最終的數(shù)據(jù)為:
可以得到有357個為良性,有212個為惡性 因為id列沒有意義,去掉id列
并將目標屬性編碼因子化B良性M惡性
并計算各自占比
round四舍五入round(x,digits=n)
prop.table得到邊緣概率prop.table(x,margin=null)
通過summary詳細地觀察3個特征:可以看出不同特征的度量值差別大
kNN的距離計算在很大程度上依賴于輸入特征的測量尺度。由于光滑度的范圍是0.05~0.16,且面積的范圍是143.5~2501.0,所以在距離計算中,面積的影響比光滑度的影響大很多,這可能潛在地導(dǎo)致我們的分類器出現(xiàn)問題,所以我們應(yīng)用min-max標準化畝配卜方法將特征值重新調(diào)整到一個標準范圍內(nèi),對數(shù)據(jù)通過歸一化來進行無量綱處理
即顯然數(shù)據(jù)需要轉(zhuǎn)換,轉(zhuǎn)換函數(shù)為:
我們并不需要對這30個數(shù)值變量逐個進行min-max標準化,這里可以使用R中的一個函數(shù)來自動完成此過程
lapply()函數(shù)接受一個列表作為輸入?yún)?shù),然后把一個具體函數(shù)應(yīng)用到每一個列表元素。因為數(shù)據(jù)框是一個含有等長度向賣液量的列表,所以我們可以使用lapply()函數(shù)將normalize()函數(shù)應(yīng)用到數(shù)據(jù)框中的每一個特征。最后一個步驟是,應(yīng)用函數(shù)as.data.frame()把lapply()返回的列表轉(zhuǎn)換成一個數(shù)據(jù)框迅穗。過程如下所示:
這里使用的后綴_n是一個提示,即wdbc中的值已經(jīng)被min-max標準化了。
為了確認轉(zhuǎn)換是否正確應(yīng)用,讓我們來看看其中一個變量的匯總統(tǒng)計量:
正如預(yù)期的那樣,area_mean變量的原始范圍是143.5~2501.0,而現(xiàn)在的范圍是0~1。
接下來需要切分數(shù)據(jù)集,實際需要構(gòu)造training、validation、test,其中validation用來校正提高模型準確性,為簡單起見,我們只用train和test
第一種方法:由于我們沒有新病人的數(shù)據(jù),所以使用前469條記錄作為訓練數(shù)據(jù)集,剩下的100條記錄用來模擬新的病人
第二種方法:如果樣本中的惡性腫瘤大部分分布在1,則將469作為訓練集就有很大問題,此時采用隨機取樣
第三種方法:直接利用"caret"包中的crateDataPartition函數(shù)可自動分區(qū)
構(gòu)建模型,class包中的knn函數(shù),由于訓練數(shù)據(jù)集含有469個實例,所以我們可能嘗試k = 21,它是一個大約等于469的平方根的奇數(shù)。根據(jù)二分類的結(jié)果,使用奇數(shù)將消除各個類票數(shù)相等這一情況發(fā)生的可能性。
函數(shù)knn()返回一個因子向量,為測試數(shù)據(jù)集中的每一個案例返回一個預(yù)測標簽,我們將該因子向量命名為wdbc_test_pred。
現(xiàn)在,我們可以使用knn()函數(shù)對測試數(shù)據(jù)進行分類:
該過程的下一步就是評估wdbc_test_pred向量中預(yù)測的分類與wdbc_test_labels向量中已知值的匹配程度如何。為了做到這一點,我們可以使用gmodels添加包中的CrossTable()函數(shù),它在第2章中介紹過。如果你還沒有安裝該添加包,可以使用install.packages("gmodels")命令進行安裝。
在使用library(gmodels)命令載入該添加包后,可以創(chuàng)建一個用來標識兩個向量之間一致性的交叉表。指定參數(shù)prop.chisq = FALSE,將從輸出中去除不需要的卡方(chi-square)值,如下所示:
行為真實結(jié)果,列為預(yù)測結(jié)果,對角框的數(shù)字越小,模型越好
選取兩個變量作為橫縱坐標進行畫圖,觀察實際類別與預(yù)測的分類結(jié)果。
顏色代表分類后得到的結(jié)果,形狀代表真實的類別。從檢測結(jié)果和圖上都可以看出,分類結(jié)果基本與真實結(jié)果一致。
knn算法(k-Nearest Neighbor algorithm).是一種經(jīng)典的分類算法.
注意,不是聚碼螞類算法.所以這種分類算法必然包括了訓練過程.
然而和一般性的分類算法不同,knn算法是一種 懶惰算法 .它并非
像其他的分類算法先通過訓練建立分類模型.,而是一種被動的分類
過程.它是逗帆邊測試邊訓山模雹練建立分類模型.
算法的一般描述過程如下:
1.首先計算每個測試樣本點到其他每個點的距離.
這個距離可以是歐氏距離,余弦距離等.
本文標題:knn算法java代碼 java knn算法
當前地址:http://chinadenli.net/article47/dsppcej.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、定制網(wǎng)站、企業(yè)網(wǎng)站制作、標簽優(yōu)化、、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)