"nrow(x) == n is not TRUE" 在 Caret 中使用 train 时;已经设置为因素

"nrow(x) == n is not TRUE" when using train in Caret; already set as factors

我正在使用此处找到的数据集:http://archive.ics.uci.edu/ml/datasets/Qualitative_Bankruptcy

当运行代码: 图书馆(插入符号)

bank <- read.csv("Qualitative_Bankruptcy.data.txt", header=FALSE, na.strings = "?", 
             strip.white = TRUE)

x=bank[1:6]
y=bank[7]

bank.knn <- train(x, y, method= "knn", trControl = trainControl(method = "cv"))

我收到以下错误: 错误:nrow(x) == n 不是 TRUE

我找到的唯一例子是 ;我的 Y 已经是一个有两个 类 的因子向量,所有 X 特征也是因子。我试过在 X 和 Y 上使用 as.matrix 和 as.data.frame 但没有成功。

nrow(x) 等于 250,但我不确定包中的 n 指的是什么。

我不是插入符号用户,但我认为您有两个问题。您使用的提取方法没有提供原子向量,而是提供包含向量的列表。如果你要求 length(y) 你得到 1 而不是 250。第一个错误很容易通过更改 y:

的定义来解决
 y <- bank[[7]]  # extract a vector rather than a sublist

然后事情变得一团糟。 KNN 方法需要连续数据(并且您收到的错误消息表明插入符的作者认为它是 "regression method" 并且您正在传递因子数据,因此您需要选择一种分类方法。

y其实不是一个vector,而是一个只有一列的data.frame因为bank[7]不会把第7列转成vector,所以length(y)是1 . 使用 bank[, 7] 代替。它对 x 没有影响,但它也可以由 bank[, 1:6] 生成。

此外,要使 KNN 工作,您可能必须将由因子变量组成的 x data.frame 转换为数字虚拟变量。

x=model.matrix(~. - 1, bank[, 1:6])
y=bank[, 7]
bank.knn <- train(x, y, method= "knn", 
                  trControl = trainControl(method = "cv"))