簡體   English   中英

K最近鄰居問題

[英]K Nearest Neighbor Questions

嗨,我在嘗試在代碼中實現K最近鄰居算法時遇到了麻煩。 我正在R中實現此功能,但只想了解其工作原理,因此我對代碼的關注程度不像對過程那樣擔心。 我將發布我所擁有的,我的數據以及我的問題是什么:

Training Data (just a portion of it): 

Feature1 | Feature2  | Class
   2     |     2     |   A
   1     |     4     |   A
   3     |     10    |   B
   12    |     100   |   B
   5     |     5     |   A

到目前為止,在我的代碼中:

kNN <- function(trainingData, sampleToBeClassified){

    #file input
    train <- read.table(trainingData,sep=",",header=TRUE)
    #get the data as a matrix (every column but the class column)
    labels <- as.matrix(train[,ncol(train)])
    #get the classes (just the class column)
    features <- as.matrix(train[,1:(ncol(train)-1)])
}

為此,我使用以下公式計算“距離”:

distance <- function(x1,x2) {
   return(sqrt(sum((x1 - x2) ^ 2)))
}

那么其余算法的過程如下:

1.遍歷每個數據(在這種情況下,每行2列),計算一次與一個數字的距離,並將其與sampleToBeClassified?

2.在開始的情況下,我想要1個最近鄰分類,我是否只存儲與sampleToBeClassified距離最小的變量?

3.無論最接近的距離變量是什么,找出那個類,然后該類成為sampleToBeClassified的類?

我的主要問題是功能在其中起什么作用? 我的直覺是,這兩個功能共同將那個數據項定義為某個類,那么我應該計算什么呢?

我完全走對了嗎? 謝謝

看來您在正確的軌道上。 您的過程中的三個步驟似乎對於最近的1個鄰居案例是正確的。 對於kNN,您只需要列出k個最近的鄰居,然后確定該列表中最常見的類。

至於功能,這些只是定義每個實例的屬性,並且(希望)為我們提供了它們所屬的類的指示。 例如,如果我們嘗試對動物進行分類,則可以使用heightmass作為特征。 因此,如果我們在elephant類別中有一個實例,它的高度可能是3.27m,質量可能是5142kg。 dog中的一個實例的高度可能為0.59m,質量為10.4kg。 在分類中,如果我們得到的東西高0.8m,重18.5kg,我們知道它比大象更可能是狗。

由於我們在這里僅使用2個特征,因此我們可以輕松地將它們繪制在圖形上,其中一個特征作為X軸,另一個特征作為Y(與哪個特征無關緊要),不同類別用不同的顏色表示或符號之類的東西。 如果您在上面繪制訓練數據的樣本,則很容易看到A類和B類之間的分離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM