在R

时间:2016-06-17 09:27:11

标签: r classification

我迷失在这个开始的地方。使用R内置的IRIS数据集,我的任务是:

使用最近邻分类器(NN)[1]编写一段R代码,为每个OBSERVATIONS(四维)分配单个类别标签。使用A部分作为参考数据库(观察和类标签),将B部分作为测试集。假设您不知道B部分的类别标签,对于B部分的每次观察,找到A部分中最近的观察值,并将其类别标签分配给A部分的观察。

计算并返回每类精确度(每个类别正确分类的观测数量除以观察总数)。

我为第一部分编写的代码非常简单:

newData = iris

evenRows.A <- newData[seq(2, nrow(newData), 2),]  #SELECT EVEN ROWS

oddRows.B <- newData[seq(1, nrow(newData), 2),]   #SELECT ODD ROWS. This is the testing set

对于班级标签的任何帮助都已经非常感激了。

编辑:格式化的R代码

1 个答案:

答案 0 :(得分:1)

    newData = iris
    evenRows.A <- newData[seq(2, nrow(newData), 2),]  #SELECT EVEN ROWS
    oddRows.B <- newData[seq(1, nrow(newData), 2),]   #SELECT ODD ROWS. This is the testing set

normalize <- function(x){return((x-min(x))/(max(x)-min(x)))}       #Define a function to normalize the data
    evenRows.train<- as.data.frame(normalize(evenRows.A[,c(1,2,3,4)]))  #Apply normalization to part A, the reference data
    oddRows.test<- as.data.frame(normalize(oddRows.B[,c(1,2,3,4)]))    #Apply normalization to part B, the test data
    evenRows.train.target<-evenRows.A[,5]

    require(class)  #load required classes for nearest neighbor modelling
    sqrt(150)
    #rule of thumb: pick k= sqrt(observations), rounded to nearest odd integer. In this case, 12.247 --> k = 13

    model1<-knn(train=evenRows.train, test=oddRows.test, cl=evenRows.train.target, k=13)
    model1

    #Display confusion matrix of results, to quantify correct versus incorrect classification

    table(oddRows.test.target, model1) 

我试图应用k个最近邻分类,并在结尾处将结果显示为混淆矩阵。你能否告诉我这是否是我发布的问题的合理方法?