【问题标题】:KNN in R: 'train and class have different lengths'?R中的KNN:'火车和班级有不同的长度'?
【发布时间】:2013-04-22 23:39:47
【问题描述】:

这是我的代码:

train_points <- read.table("kaggle_train_points.txt", sep="\t")
train_labels <- read.table("kaggle_train_labels.txt", sep="\t")
test_points <- read.table("kaggle_test_points.txt", sep="\t")

#uses package 'class'
library(class)
knn(train_points, test_points, train_labels, k = 5);

dim(train_points) 是 42000 x 784
dim(train_labels) 是 42000 x 1

我没有看到问题,但我收到了错误:

knn 中的错误(train_points,test_points,train_labels,k = 5):
'train' 和 'class' 有不同的长度。

有什么问题?

【问题讨论】:

    标签: r


    【解决方案1】:

    卸载 R 以前的版本并安装 R 版本 > 4.0。它会起作用的。

    【讨论】:

      【解决方案2】:

      我在读取 tibble (read_csv) 时遇到了类似的错误,当我切换到 read.csv 时,代码工作正常。

      【讨论】:

        【解决方案3】:

        我在尝试从威斯康星州数据集中将 knn 应用于乳腺癌诊断时遇到了同样的问题我发现这个问题与 cl 参数需要是一个向量因子的事实有关(我的错误是写 cl=labels ,我认为这是要预测的向量它实际上是一列的数据框)所以解决方案是使用以下语法: knn (train, test,cl=labels$diagnosis,k=21) 诊断是标题一列数据框标签,效果很好 希望对您有所帮助!

        【讨论】:

          【解决方案4】:

          尝试使用 as.dataframe() 将数据转换为数据帧。我遇到了同样的问题,之后它工作正常:

          train_pointsdf <- as.data.frame(train_points)
          train_labelsdf <- as.data.frame(train_labels)
          test_pointsdf <- as.data.frame(test_points)
          

          【讨论】:

          • 谢谢!你救了我!你能解释一下什么是数据框吗?
          【解决方案5】:

          当您从数据帧中排除 cl 时,只需设置 drop = TRUE,它会导致从只有一个级别的数组中删除维度:

          cl = train_labels[,1, drop = TRUE]
          knn(train_points, test_points, cl, k = 5)
          

          【讨论】:

            【解决方案6】:

            我最近遇到了一个非常相似的问题。 我只想给出一列作为预测变量。在这种情况下,选择一列,您必须记住 drop 参数并将其设置为 FALSEknn() 函数只接受矩阵或数据帧作为训练和测试参数。不是向量。

            knn(train = trainSet[, 2, drop = FALSE], test = testSet[, 2, drop = FALSE], cl = trainSet$Direction, k = 5)

            【讨论】:

              【解决方案7】:

              无法访问数据,真的很难提供帮助。但是,我怀疑 train_labels 应该是一个向量。所以试试

              cl = train_labels[,1]
              knn(train_points, test_points, cl, k = 5)
              

              还要仔细检查:

              dim(train_points)
              dim(test_points)
              length(cl)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-02-21
                • 2020-04-29
                • 1970-01-01
                • 1970-01-01
                • 2017-01-22
                • 2013-08-06
                • 2016-04-22
                • 2017-10-30
                相关资源
                最近更新 更多