您好,登錄后才能下訂單哦!
如何理解R語言中的KNN算法,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
k最臨近(KNN)算法是最簡單的分類算法之一,屬于有監督的機器學習算法。
算法流程
KNN的核心思想是:找出特征空間中距離待分類點最近的k個點,如果這k個點大多數屬于某一個類別,則該樣本也屬于這個類別。
k值一般取20以下的整數。下圖為從網上截取的圖片,可以直觀看到與點x最臨近的5個點里,有4個為紅色圓點,因此將點x的類別判斷為紅色圓點一類。
R語言實現
在R中實現knn聚類,可以使用class包中點knn()函數。在下面的例子中,我們使用UCI的[乳腺癌特征數據集]進行演示。首先,讀入網上的數據:
#讀取網上的數據并設置變量名
url <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data'
wdbc.data <- read.csv(url,header = F)
names(wdbc.data) <- c('ID','Diagnosis','radius_mean','texture_mean','perimeter_mean', 'area_mean','smoothness_mean','compactness_mean','concavity_mean',
'concave points_mean','symmetry_mean','fractal dimension_mean','radius_sd','texture_sd','perimeter_sd','area_sd','smoothness_sd','compactness_sd','concavity_sd','concave points_sd','symmetry_sd','fractal dimension_sd','radius_max_mean','texture_max_mean','perimeter_max_mean','area_max_mean','smoothness_max_mean','compactness_max_mean','concavity_max_mean','concavepoints_max_mean','symmetry_max_mean','fractal dimension_max_mean')
因為有的變量取值大,有的變量取值小,所以我們在使用knn進行分類前,要先對數據通過歸一化來進行無量綱處理。
#編寫歸一化函數
normalize <- function(x)
{
return ((x-min(x))/(max(x)-min(x)))
}
#對數據進行歸一化
wdbc.data.min_max <- as.data.frame(lapply(wdbc.data[3:length(wdbc.data)],normalize))
wdbc.data.min_max$Diagnosis <- wdbc.data$Diagnosis
區分訓練集和測試集,并紀錄相應的分類標簽。
m<-(dim(wdbc.data.min_max))[1]
val<-sample(1:m,size=round(m/3),replace=FALSE,prob=rep(1/m,m))
data.train<-wdbc.data.min_max[-val,]
data.test<-wdbc.data.min_max[val,]
data.train.label<-data.train$Diagnosis
data.test.label<-data.test$Diagnosis
data.train<-wdbc.data.min_max[-val,- length(wdbc.data.min_max)]
data.test<-wdbc.data.min_max[val,- length(wdbc.data.min_max)]
用knn算法進行分類,并用實際的分類標簽與預測出的分類結果進行效果檢測。
library(class)
test.pre.labels <- knn(data.train,data.test,data.train.label,k=7)
library(gmodels)
CrossTable(x = data.test.label, y = test.pre.labels, prop.chisq = F)
檢測結果為:
選取兩個變量作為橫縱坐標進行畫圖,觀察實際類別與預測的分類結果。
plot(data.test$texture_mean,data.test$radius_mean,col=test.pre.labels,pch=as.integer(data.test.label))
顏色代表分類后得到的結果,形狀代表真實的類別。從檢測結果和圖上都可以看出,分類結果基本與真實結果一致。
KNN優缺點
優點:
(1)算法原理簡單,無需估計參數和訓練。
(2)適合稀有事件的分類問題。
缺點:
(1)計算量太大,需要計算與每個點的距離。
(2)可解釋性不強。
(3)樣本不平衡時,k個最近的點中,大容量類別的點占據了大多數,但大容量類別不一定為待分類點的真實類別。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。