【问题标题】:Problems with k-NN regression in RR中的k-NN回归问题
【发布时间】:2014-04-27 02:34:32
【问题描述】:

我正在尝试从包插入符号运行 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向我们展示代码。我想您没有使用公式方法,如果是这种情况,您正在混合数字和非数字数据。 knnreg 会将其转换为矩阵(必须是相同的类型),并且最终可能会转换为所有字符数据。
  • @topepo 你是对的。我正在使用 data.frame 类。这是代码:&gt; fit &lt;- knnreg(train2, Target, k = 2)
  • 通过model.matrix 运行数据以将因子转换为虚拟变量(并且不要忘记对数据进行中心化和缩放)。那么它应该可以工作了。
  • @topepo 感谢当我通过 model.matrix 转换数据时,我得到了非常稀疏的矩阵。默认情况下,矩阵是 double 类型,是否可以立即将其作为逻辑或因子(否则会出现内存分配错误)?
  • 另外:没有办法在不将分类变量转换为虚拟变量的情况下运行 knn 回归吗?所有类型的回归都一样吗?

标签: r regression knn r-caret


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2017-03-08
    • 2020-04-27
    • 2012-07-24
    相关资源
    最近更新 更多