我迷失在这个开始的地方。使用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代码
答案 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个最近邻分类,并在结尾处将结果显示为混淆矩阵。你能否告诉我这是否是我发布的问题的合理方法?