You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言For循环输出异常排查:KSVM模型C值遍历后test_accuracy结果不符合预期

问题诊断与修复方案

咱们一步步拆解你的问题,很快就能搞定:

核心问题1:初始化test_accuracy时的致命错误

你写的初始化代码是:

test_accuracy <- rep(0, length(11))

这里length(11)返回的是1(因为11是单个数值,长度为1),所以你的test_accuracy一开始只有1个元素。当循环里x不断递增到2、3...11时,R会自动扩展这个向量,额外的位置默认填充NA,这就是你看到大量NA的直接原因。

正确的初始化应该匹配Test_Cs的长度:

test_accuracy <- rep(0, length(Test_Cs))

这样一开始就创建了11个0的数值向量,刚好对应你要测试的11个C值。

核心问题2:潜在的变量污染

从你的输出里能看到混合的字符串(比如"C:1000.009:0.862385321100917"),这说明你当前环境里的test_accuracy可能之前被定义成了字符型向量。当你往字符向量里赋值数值时,R会自动把数值转成字符,导致结果混乱。

解决办法:在运行代码前,先清理这个旧变量:

rm(test_accuracy) # 先删除旧的污染变量
test_accuracy <- rep(0, length(Test_Cs)) # 重新初始化数值向量

优化建议:用更安全的循环索引

你用x手动计数的方式容易出错,不如直接用seq_along(Test_Cs)遍历索引,这样更直观也更不容易出问题:

# 先清理并初始化正确的向量
rm(test_accuracy)
test_accuracy <- rep(0, length(Test_Cs))

# 用索引遍历,替代手动维护x变量
for (x in seq_along(Test_Cs)) {
  current_C <- Test_Cs[x]
  # 训练模型(注意把中文引号改成英文引号!)
  ksvm_model <- ksvm(as.matrix(data[,1:10]), as.factor(data[,11]), 
                     scaled=TRUE, type="C-svc", kernel="vanilladot", C=current_C)
  # 预测并计算准确率
  pred <- predict(ksvm_model, data[,1:10])
  accu_percentage <- sum(pred == data[,11])/nrow(data)
  # 赋值到对应位置
  test_accuracy[x] <- accu_percentage
}

print(test_accuracy)

额外注意点

  • 检查你的type和kernel参数引号:你写的是中文引号“C-svc”,必须改成英文引号"C-svc",不然R会直接报错!
  • 如果你是想测试模型的泛化能力,建议不要用训练数据data来计算准确率,应该提前拆分出单独的测试集,不然得到的只是训练准确率,不能反映模型的真实性能。

内容的提问来源于stack exchange,提问作者Grace_radetsk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 07:49:06