这是在家工作。
我有两个矩阵,一个用于训练,一个用来测试。数据有两列数据,应用于分类,第三列为已知类别。两个矩阵都有第三列。
[1] [2] [3]
[1] 6.4 0.32 2
[2] 4.8 0.34 0
[3] 4.9 0.25 2
[4] 7.2 0.32 1
其中整数是类(从0-2)。
我的数据集的维度对于训练集是100 3,对于测试集是38 3。
我尝试过使用类lbrary的knn()函数。
knn使用以下参数:(train,test,cl,k=1,l=0,prob=FALSE,use.all=TRUE)
我试着直接使用我的数据集,但后来我得到了错误:"‘训练’和‘类别’有不同的长度"
我试过一些东西,但几个小时后就卡住了。目前,我的编辑器中有以下代码:
cl <- t(factor(c(rep("0",1), rep("1",1), rep("2",1))))
k <- knn(train, test, cl)
但它不起作用。有人能帮我吗?
我想找到用3个不同的k值运行函数,并找到每个值的准确性。之后,我将对最佳k进行5倍的交叉验证。
正如文档所述,cl
是factor of true classifications of the training set
,即y
变量(训练集的第三列)。
这意味着功能应该如下:
cl <- factor(c(2,0,2,1)) #or alternatively factor(train[,3])
k <- knn(train[,c(1,2)], test[,c(1,2)], cl)
正如您在培训和测试集中看到的,y
变量(包含类的列)不包括在测试和培训集中。该列仅作为因子包含在cl
参数中。
您收到的错误是因为训练集的行数不等于因子的长度,在这种情况下,它只有3个元素(这是因为您认为只需要在那里指定因子的级别)。