我正在尝试处理一些数据,并比较glm和lda的测试性能。
数据附件如下。
这是我尝试进行这两种方法的总体计划:
training = read.csv("train.csv")testing = read.csv("test.csv")model_glm <- glm(V1 ~.,family=binomial(link='logit'),data=training)pred_glm <- predict(model_glm, testing)library(MASS)model_lda <- lda(V1 ~ ., data=training)predict_lda <- predict(model_lda, testing)#计算分类错误err_lda <- (pred_lda) - test$V1err2_lda <- err_lda[err_lda != 0]classification_error_lda = length(err2_lda)/length(test$V1)
然而,这些方法都不起作用。我以为存在一个多项式家族类,但似乎并不存在。此外,由于我的第一列是数字,后面是所有灰度值,我以为可以使用V1 ~ .
,但我认为这在这种情况下也不正确。有人知道我的语法/设置是否有误吗?
编辑:我添加了如何尝试计算LDA的分类错误的方法。然而,我不认为我最初的方法有效,因为它给出的结果是:
在(pred_lda) – test$V1中发生错误:二元运算符的非数字参数
回答:
这不是一个二元分类,而是一个多类(数字)分类问题,我们有10个类别标签。因此,您需要使用多项式逻辑回归,而不是逻辑回归。尝试以下方法,我们可以看到,使用多项式逻辑回归模型的预测总体准确性高于lda。
library(nnet)model_mlogit <- multinom(V1 ~ ., data = training, MaxNWts=2581)predict_mlogit <- predict(model_mlogit, testing)library(MASS)model_lda <- lda(V1 ~ ., data=training)predict_lda <- predict(model_lda, testing)library(caret)confusionMatrix(predict_mlogit,testing$V1)# 输出混淆矩阵和统计数据 参考预测 0 1 2 3 4 5 6 7 8 9 0 343 0 5 2 5 4 1 0 7 0 1 0 254 1 0 2 1 0 0 0 0 2 3 2 163 4 5 0 4 2 7 0 3 2 1 6 145 1 7 0 3 3 1 4 3 1 8 1 168 3 4 5 1 3 5 2 0 1 8 2 137 4 0 9 1 6 2 1 1 1 4 3 156 0 0 0 7 3 1 5 2 1 0 0 132 4 2 8 1 1 7 3 4 2 1 0 130 5 9 0 3 1 0 8 3 0 5 5 165总体统计数据 准确率 : 0.8934 95% 置信区间 : (0.879, 0.9065) 无信息率 : 0.1789 P值 [准确率 > 无信息率] : < 2.2e-16 Kappa : 0.8803 Mcnemar 测试 P值 : NA 按类别的统计数据: 类别: 0 类别: 1 类别: 2 类别: 3 类别: 4 类别: 5 类别: 6 类别: 7 类别: 8 类别: 9敏感性 0.9554 0.9621 0.82323 0.87349 0.84000 0.85625 0.91765 0.89796 0.78313 0.93220特异性 0.9854 0.9977 0.98507 0.98696 0.98395 0.98538 0.99347 0.99032 0.98696 0.98634正预测值 0.9346 0.9845 0.85789 0.85799 0.85279 0.83537 0.92857 0.88000 0.84416 0.86842负预测值 0.9902 0.9943 0.98074 0.98857 0.98232 0.98752 0.99239 0.99192 0.98057 0.99340流行率 0.1789 0.1315 0.09865 0.08271 0.09965 0.07972 0.08470 0.07324 0.08271 0.08819检测率 0.1709 0.1266 0.08122 0.07225 0.08371 0.06826 0.07773 0.06577 0.06477 0.08221检测流行率 0.1829 0.1286 0.09467 0.08421 0.09816 0.08171 0.08371 0.07474 0.07673 0.09467平衡准确率 0.9704 0.9799 0.90415 0.93023 0.91198 0.92082 0.95556 0.94414 0.88505 0.95927confusionMatrix(predict_lda$class,testing$V1)#输出混淆矩阵和统计数据 参考预测 0 1 2 3 4 5 6 7 8 9 0 342 0 7 3 1 6 1 0 5 0 1 0 251 2 0 4 0 0 1 0 0 2 0 0 157 3 6 0 3 0 2 0 3 4 2 4 142 0 16 0 2 11 0 4 3 5 12 3 174 3 3 7 7 4 5 1 0 2 9 0 125 3 0 4 0 6 5 3 1 0 2 0 157 0 0 0 7 0 0 1 1 2 0 0 129 0 5 8 3 1 12 4 1 5 3 1 135 3 9 1 2 0 1 10 5 0 7 2 165总体统计数据 准确率 : 0.8854 95% 置信区间 : (0.8706, 0.899) 无信息率 : 0.1789 P值 [准确率 > 无信息率] : < 2.2e-16 Kappa : 0.8713 Mcnemar 测试 P值 : NA 按类别的统计数据: 类别: 0 类别: 1 类别: 2 类别: 3 类别: 4 类别: 5 类别: 6 类别: 7 类别: 8 类别: 9敏感性 0.9526 0.9508 0.79293 0.85542 0.87000 0.78125 0.92353 0.87755 0.81325 0.93220特异性 0.9860 0.9960 0.99226 0.97882 0.97399 0.98971 0.99401 0.99516 0.98207 0.98470正预测值 0.9370 0.9729 0.91813 0.78453 0.78733 0.86806 0.93452 0.93478 0.80357 0.85492负预测值 0.9896 0.9926 0.97767 0.98686 0.98544 0.98121 0.99293 0.99037 0.98314 0.99338流行率 0.1789 0.1315 0.09865 0.08271 0.09965 0.07972 0.08470 0.07324 0.08271 0.08819检测率 0.1704 0.1251 0.07823 0.07075 0.08670 0.06228 0.07823 0.06428 0.06726 0.08221检测流行率 0.1819 0.1286 0.08520 0.09018 0.11011 0.07175 0.08371 0.06876 0.08371 0.09616平衡准确率 0.9693 0.9734 0.89260 0.91712 0.92200 0.88548 0.95877 0.93636 0.89766 0.95845
[编辑]不使用caret
的情况:
table(predict_mlogit,testing$V1)# 输出predict_mlogit 0 1 2 3 4 5 6 7 8 9 0 343 0 5 2 5 4 1 0 7 0 1 0 254 1 0 2 1 0 0 0 0 2 3 2 163 4 5 0 4 2 7 0 3 2 1 6 145 1 7 0 3 3 1 4 3 1 8 1 168 3 4 5 1 3 5 2 0 1 8 2 137 4 0 9 1 6 2 1 1 1 4 3 156 0 0 0 7 3 1 5 2 1 0 0 132 4 2 8 1 1 7 3 4 2 1 0 130 5 9 0 3 1 0 8 3 0 5 5 165# 准确率sum(predict_mlogit==testing$V1)/length(testing$V1)# [1] 0.8933732table(predict_lda$class,testing$V1)# 输出 0 1 2 3 4 5 6 7 8 9 0 342 0 7 3 1 6 1 0 5 0 1 0 251 2 0 4 0 0 1 0 0 2 0 0 157 3 6 0 3 0 2 0 3 4 2 4 142 0 16 0 2 11 0 4 3 5 12 3 174 3 3 7 7 4 5 1 0 2 9 0 125 3 0 4 0 6 5 3 1 0 2 0 157 0 0 0 7 0 0 1 1 2 0 0 129 0 5 8 3 1 12 4 1 5 3 1 135 3 9 1 2 0 1 10 5 0 7 2 165# 准确率sum(predict_lda$class==testing$V1)/length(testing$V1)# [1] 0.8854011