R使用kernlab包ksvm函数拟合模型提示x and y don't match错误问询
ksvm报错
Error in .local(x, ...): x and y don't match 排查方案 - 第一步:确认维度匹配
首先验证特征集和标签的长度一致,运行以下代码:
若两个数值不相等,说明读入数据时出现解析错误,检查源文件的分隔符、不规则行,调整# 前10列特征的行数 nrow(data[, 1:10]) # 第11列标签的长度 length(data[, 11]) # 数据集整体行列数 dim(data)read.delim的sep、skip等参数重新读入即可。 - 第二步:检查特征列类型合法性
ksvm要求特征集可转换为数值矩阵,若前10列存在字符、因子、列表类型的列,会触发匹配报错,运行代码检查:
存在非数值类型列时,先做数据清洗转换为数值格式。sapply(data[, 1:10], class) - 第三步:修正标签的传入格式
用[[索引取标签列,保证返回向量格式,避免数据框/tibble索引时的drop参数隐性影响;如果是分类任务,需将integer类型的标签转为因子:# 分类任务用:将标签转为因子 y <- as.factor(data[[11]]) # 回归任务用:保持标签为数值型 y <- as.numeric(data[[11]]) # 特征明确转为矩阵后拟合模型 model <- ksvm(as.matrix(data[, 1:10]), y) - 第四步:排查缺失值
数据中存在NA值也会触发匹配报错,运行代码确认:
存在缺失值时,先用sum(is.na(data[, 1:10])) sum(is.na(data[, 11]))na.omit()删除缺失行,或用对应方法填充缺失值后再拟合模型。
内容的提问来源于stack exchange,提问作者Jonathan Bechtel
相关产品推荐
相关产品推荐

