我正在尝试从包插入符运行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也不能将其转换为数字。