R中基于ISLR的Auto数据集拆分训练测试集实现LDA并生成混淆矩阵
R语言线性判别分析(LDA)实现代码
前置依赖
需要提前安装ISLR、MASS两个包,安装命令如下:
install.packages(c("ISLR", "MASS"))
完整实现代码
# 加载依赖包 library(ISLR) library(MASS) # 导入Auto数据集 data(Auto) # 构造二分类响应变量:mpg高于全数据集中位数标记为high,否则标记为low Auto$mpg_class <- ifelse(Auto$mpg > median(Auto$mpg), "high", "low") # 拆分训练集与测试集:年份不等于75为训练集,年份等于75为测试集 train_set <- Auto[Auto$year != 75, ] test_set <- Auto[Auto$year == 75, ] # 拟合LDA模型 lda_model <- lda(mpg_class ~ cylinders + displacement + horsepower + weight + acceleration + origin, data = train_set) # 测试集预测 lda_pred_res <- predict(lda_model, newdata = test_set) # 输出混淆矩阵 confusion_mat <- table(真实类别 = test_set$mpg_class, 预测类别 = lda_pred_res$class) print(confusion_mat) # 可选:输出预测准确率 cat("测试集预测准确率:", sum(diag(confusion_mat))/sum(confusion_mat), "\n")
问题说明
调用replace后所有值都被设为high,大概率是replace的条件判断逻辑错误,比如条件表达式返回全为TRUE,或者误将全量数据的判断条件应用到了测试集子集上。上述代码先对全数据集构造分类标签再拆分训练/测试集,逻辑更简洁,避免子集操作的条件错误。
内容的提问来源于stack exchange,提问作者The Pointer
相关产品推荐
相关产品推荐

