我尝试使用KNN方法进行预测,我已经将因子转换为字符,我的数据集包含数值和特征变量,已删除缺失值。以下是我的R代码:
library(caret)set.seed(142)ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 5) train(LateStage ~ ., data = finalP6, method = "knn", trControl = ctrl, preProcess = c("range"), tuneLength = 10, metric = "Kappa")
我得到了这个错误:
您正在尝试进行回归,但您的结果变量只有两个可能的值。您是否在尝试进行分类?如果是,请将结果列设置为具有两个级别的因子。错误:Kappa指标不适用于回归模型
感谢您的帮助!
回答:
如果您能提供数据示例并解释您希望模型做什么,那将很有帮助。
我猜测您是想用kNN进行分类,实际上,如果您的自变量是因子也是可以的。对于caret,您需要将因变量设置为因子来进行分类。
首先我生成了一些类似您的数据(不要运行这段代码来解决您的问题):
finalP6 = data.frame(LateStage = sample(0:1,1000,replace=TRUE),matrix(runif(1000),ncol=10))
然后运行模型,您会看到相同的错误:
library(caret)set.seed(142)ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 5)train(LateStage ~ ., data = finalP6, method = "knn", trControl = ctrl, preProcess = c("range"),tuneLength = 10,metric = "Kappa")错误:Kappa指标不适用于回归模型此外:警告消息:在train.default(x, y, weights = w, ...) : 您正在尝试进行回归,但您的结果变量只有两个可能的值。您是否在尝试进行分类?如果是,请将结果列设置为具有两个级别的因子。
您需要做的是:
finalP6$LateStage = factor(finalP6$LateStage)train(LateStage ~ ., data = finalP6, method = "knn", trControl = ctrl, preProcess = c("range"),tuneLength = 10, metric = "Kappa")最近邻算法 1000个样本 10个预测变量 2个类别:'0', '1' 预处理:重新缩放到[0, 1](10个) 重抽样:交叉验证(10折,重复5次) 样本大小总结:901, 900, 899, 900, 901, 900, ... 跨调优参数的重抽样结果: k 准确率 Kappa 5 0.4922998 -0.015433129 7 0.4889058 -0.022246806 9 0.5027024 0.005380261 11 0.5074765 0.014693566 13 0.5090744 0.017946500 15 0.5100462 0.019756722 17 0.5048402 0.009260903 19 0.4868552 -0.027103397 21 0.4842232 -0.032544799 23 0.4798550 -0.041286084