我正在尝试使用knncat的knncat函数对自动数据运行KNN分析。我的训练集大约有700,000个观察值。当我尝试实施分析时,会发生以下情况。在读取数据时,我尝试使用完整的case方法删除NA。我不确定确切如何处理错误或它们的含义。

kdata.training = kdataf[ind==1,]
kdata.test = kdataf[ind==2,]
kdata_pred = knncat(train = kdata.training, test = kdata.test, classcol = 4)



  knncat中的错误(train = kdata.training,test = kdata.test,classcol = 4):
      有些班只有一名成员。检查“ classcol”


当我尝试运行训练和测试集的一小部分(分别为200和70个观测值)时,出现以下错误:

kdata_strain = kdata.training[1:200,]
kdata_stest = kdata.test[1:70,]
kdata_pred = knncat(train = kdata_strain, test = kdata_stest, classcol = 4)



  knncat中的错误(train = kdata_strain,test = kdata_stest,classcol = 4):
      一些因素的水平为空


这是在kdataf上调用的str方法,该数据帧是针对上述数据采样的:

 str(kdataf)
'data.frame':   1159712 obs. of  9 variables:
 $ vehicle_sales_price: num  13495 11999 14499 12495 14999 ...
 $ week_number: Factor w/ 27 levels "1","2","3","4",..: 11 10 13 10 10 9 18 10 10 10 ...
 $ county: Factor w/ 219 levels "Anderson","Andrews",..: 49 49 49 49 49 49 49 49 49 49 ...
 $ ownership_code     : Factor w/ 23 levels "1","2","3","4",..: 11 11 3 1 11    11 11 11 11 11 ...
 $ X30_days_late      : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 1 ...
 $ X60_days_late      : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ...
 $ penalty            : num  0 0 55.3 0 0 ...
 $ processing_time    : int  28 24 32 29 19 20 63 27 28 24 ...
 $ transaction_code   : Factor w/ 2 levels "TITLE","WDTA": 2 2 2 2 2 2 2 2 2 2 ...


种子设置为“ 1234”,训练与测试数据的比率为2:1

最佳答案

首先,我对R知之甚少,所以请一言以蔽之。
我有同样的问题,没有意义,因为没有NA。我一开始以为我的数据中有奇怪的字符,例如',/等。但是不,当我在定义火车集后放入以下三行代码时,knncat算法适用于那些字符(我使用data.table因为我的数据很大):

write.csv(train, file="train.csv")
train <- fread("train.csv", sep=",", header=T, stringsAsFactors=T)
train[,V1:=NULL]


这样,就不再有“某些因素的水平为空”或“某些类别的成员只有一个”的消息。检查“ classcol”。
我知道这不是解决问题的真正方法,但是至少您可以完成工作。
希望能帮助到你。

关于r - KNNCAT错误“某些类只有一个成员”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38924713/

10-12 19:27