我正在尝试从包插入符运行knnreg。出于某种原因,此培训集有效:

> summary(train1)
       V1                V2             V3
 13     : 10474   1      :  6435   7      :  8929
 10     : 10315   2      :  6435   6      :  8895
 4      : 10272   3      :  6435   9      :  8892
 1      : 10244   4      :  6435   10     :  8892
 2      : 10238   7      :  6435   15     :  8874
 24     : 10228   8      :  6435   40     :  8870
 (Other):359799   (Other):382960   (Other):368218


虽然这将不起作用:

> summary(train2)
        V1              V2               V3                   V4
 13     : 10474   1      :  6436   7      :  8929   Christmas   :  5946
 10     : 10315   2      :  6436   6      :  8895   Labor Day   :  8861
 4      : 10272   3      :  6438   9      :  8892   None        :391909
 1      : 10244   4      :  6435   10     :  8892   Super Bowl  :  8895
 2      : 10238   7      :  6435   15     :  8874   Thanksgiving:  5959
 24     : 10228   8      :  6435   40     :  8870
 (Other):359799   (Other):382960   (Other):368218


这是目标向量:

> summary(Target)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  -499    200    712   1980   20210  693100


我得到的错误是在预测阶段:

> fit <- knnreg(train2, Target, k = 2)
> Prediction <- predict(fit,  newdata=test)
Error in knnregTrain(train = list(V1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,  :
  NA/NaN/Inf in foreign function call (arg 5)
In addition: Warning messages:
1: In knnregTrain(train = list(V1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,  :
  NAs introduced by coercion
2: In knnregTrain(train = list(V1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L,  :
  NAs introduced by coercion


这是我的测试集:

> summary(test)
     V1            V2           V3                    V4
 13     : 2836   1      :  1755   51     : 3002   Christmas   :  2988
 4      : 2803   2      :  1755   49     : 2989   Labor Day   :     0
 19     : 2799   3      :  1755   52     : 2988   None        :106136
 2      : 2797   4      :  1755   50     : 2986   Super Bowl  :  2964
 27     : 2791   7      :  1755   6      : 2984   Thanksgiving:  2976
 24     : 2790   8      :  1755   47     : 2976
 (Other):98248   (Other):104534   (Other):97139


我想念什么?

编辑:将V4设置标签切换为“ 1”,“ 2”,...实际上可以解决问题。算法是否将我的特征视为数字特征,即使它们是因素?

最佳答案

我意识到knnreg将仅接收数字值,并且当我尝试使用train1训练模型时,它认为所有值都是数字(实际上它们是分类的)。 train2返回错误,因为V4不是数字,并且knnreg也不能将其转换为数字。

08-19 19:55