"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"))
我正在使用此处找到的数据集: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
我找到的唯一例子是
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"))