混淆矩阵与分类图像不一致
Inconsistency between confusion matrix and classified image
由于我的 GIS 软件的计算限制,我正尝试在 R 中实现随机森林以进行图像分类。我的输入是一个多波段 TIFF 图像,它正在 ArcGIS shapefile(目标值 0 和 1)上进行训练。该代码在技术上有效并产生有效输出。当我查看混淆矩阵时,我得到以下信息:
0 1 class.error
0 11 3 0.214285714
1 1 13 0.071428571
这对我的数据很合理。然而,当我在我的 GIS 软件中绘制图像分类的输出时(二进制重新分类的 tiff 值为 0 和 1),它以 100% 的成功率预测训练数据。换句话说,输出图像没有分类错误。混淆矩阵表明存在分类错误是怎么回事?
我是不是漏掉了一些很明显的东西?下面的代码片段。
rf.mdl <- randomForest(x=samples@data[, names(PredMaps)], y=samples@data[, ValueFld], ntree=501, proximity=TRUE, importance=TRUE, keep.forest=TRUE,keep.inbag=TRUE)
ConfMat = rf.mdl$confusion
write.csv(ConfMat,file = "ConfMat1.csv")
predict(PredMaps, rf.mdl, filename=classifiedPath, type="response", na.rm=T, overwrite=T, progress="text")
我预计输出分类图像会根据混淆矩阵中指示的内容将 Value=1 训练点中的 1 个错误分类,并将 Value=0 训练点中的 3 个错误分类。
随机森林算法是一种装袋方法。这意味着它创建了许多弱分类器,然后让每个弱分类器 "vote" 来创建最终预测。在 RF 中,每个弱分类器都是一个决策树,它根据训练集中的随机观察样本进行训练。将每个决策树训练的随机样本视为 "bag" 数据。
混淆矩阵中显示的是 "out-of-bag error"(OOB 错误)。这个 OOB 错误是对你的模型如何泛化到它以前从未见过的数据的准确估计(这个估计通常是通过在保留的测试集上测试你的模型来实现的)。由于每个决策树仅根据训练数据中的一个包进行训练,因此其余数据("outside the bag" 的数据)可以代替此保留数据。
OOB 误差是通过对训练集中的每个观察值进行预测来计算的。但是,在预测每个单独的观察时,只有包 不包含该观察 的决策树才能参与投票过程。结果是训练RF模型后可用的混淆矩阵。
当您使用完整模型预测训练集中的观察结果时,其包 确实包含每个观察结果 的决策树现在参与投票过程。由于这些决策树 "remember" 他们接受训练的观察结果,因此他们将预测偏向正确答案。这就是您达到 100% 准确率的原因。
本质上,你应该相信使用OOB错误的混淆矩阵。这是对模型将如何推广到看不见的数据的可靠估计。
由于我的 GIS 软件的计算限制,我正尝试在 R 中实现随机森林以进行图像分类。我的输入是一个多波段 TIFF 图像,它正在 ArcGIS shapefile(目标值 0 和 1)上进行训练。该代码在技术上有效并产生有效输出。当我查看混淆矩阵时,我得到以下信息:
0 1 class.error
0 11 3 0.214285714
1 1 13 0.071428571
这对我的数据很合理。然而,当我在我的 GIS 软件中绘制图像分类的输出时(二进制重新分类的 tiff 值为 0 和 1),它以 100% 的成功率预测训练数据。换句话说,输出图像没有分类错误。混淆矩阵表明存在分类错误是怎么回事?
我是不是漏掉了一些很明显的东西?下面的代码片段。
rf.mdl <- randomForest(x=samples@data[, names(PredMaps)], y=samples@data[, ValueFld], ntree=501, proximity=TRUE, importance=TRUE, keep.forest=TRUE,keep.inbag=TRUE)
ConfMat = rf.mdl$confusion
write.csv(ConfMat,file = "ConfMat1.csv")
predict(PredMaps, rf.mdl, filename=classifiedPath, type="response", na.rm=T, overwrite=T, progress="text")
我预计输出分类图像会根据混淆矩阵中指示的内容将 Value=1 训练点中的 1 个错误分类,并将 Value=0 训练点中的 3 个错误分类。
随机森林算法是一种装袋方法。这意味着它创建了许多弱分类器,然后让每个弱分类器 "vote" 来创建最终预测。在 RF 中,每个弱分类器都是一个决策树,它根据训练集中的随机观察样本进行训练。将每个决策树训练的随机样本视为 "bag" 数据。
混淆矩阵中显示的是 "out-of-bag error"(OOB 错误)。这个 OOB 错误是对你的模型如何泛化到它以前从未见过的数据的准确估计(这个估计通常是通过在保留的测试集上测试你的模型来实现的)。由于每个决策树仅根据训练数据中的一个包进行训练,因此其余数据("outside the bag" 的数据)可以代替此保留数据。
OOB 误差是通过对训练集中的每个观察值进行预测来计算的。但是,在预测每个单独的观察时,只有包 不包含该观察 的决策树才能参与投票过程。结果是训练RF模型后可用的混淆矩阵。
当您使用完整模型预测训练集中的观察结果时,其包 确实包含每个观察结果 的决策树现在参与投票过程。由于这些决策树 "remember" 他们接受训练的观察结果,因此他们将预测偏向正确答案。这就是您达到 100% 准确率的原因。
本质上,你应该相信使用OOB错误的混淆矩阵。这是对模型将如何推广到看不见的数据的可靠估计。