我正在尝试从 R 中的 3D 图中的分类算法中绘制分区边界(使用plot3D
)。如果我们只有两个预测变量,那么这是一个相对简单的任务,只需要绘制两个轴(例如使用partimat
函数)。我还没有找到一种令人满意的方法来在 3D 空间中绘制基于三个预测器的分类分区。
为了可视化这个问题,让我们首先使用 iris 数据集上的线性判别分析 (LDA) 分类算法为两个轴构建一个分区:
# Load packages and subset the iris dataset:
library(klaR)
data = droplevels(iris[iris$Species != 'virginica', ])
partimat(Species ~ Sepal.Length + Sepal.Width, data,
method = 'lda')
我们得到一个二维图,在两个物种之间有明确的划分:
但是,partimat
一次只能处理两个预测变量(请参阅 参考资料?partimat
)。现在让我们看看 3D 问题:
library(plot3D)
# Plot the raw data:
points3D(data$Sepal.Length, data$Sepal.Width, data$Petal.Length,
colkey = F,
pch = 16, cex = 2,
theta = 30, phi = 30,
ticktype = 'detailed',
col = data$Species)
我想根据 LDA 之类的分类算法绘制一个将两个数据类分开的平面。从Roman Luštrik 的示例中汲取灵感,这是我在定义三个预测变量之间的划分方面的糟糕尝试。本质上,我建立了一个包含三个预测变量的 LDA 模型,然后将物种(setosa 或 versicolor)预测到最大值之间的多个点上。和分钟。所有三个预测变量的值。当绘制在 3D 图上时,这会生成一个点云,以不同的颜色表示 3D 空间,其中任何一种虹膜物种应基于三个预测变量出现:
# Build a classification model with three predictors:
m = lda(Species ~ Sepal.Length + Sepal.Width + Petal.Length, data)
# Predict 'Species' for the full range of each plant metric:
np = 50
nx = seq(from = min(data[, 1]), to = max(data[, 1]), length.out = np)
ny = seq(from = min(data[, 2]), to = max(data[, 2]), length.out = np)
nz = seq(from = min(data[, 3]), to = max(data[, 3]), length.out = np)
nd = expand.grid(Sepal.Length = nx, Sepal.Width = ny, Petal.Length = nz)
p = as.numeric(predict(m, newdata = nd)$class)
part = cbind(nd, Partition = p)
# Plot the partition and add the data points:
scatter3D(part$Sepal.Length, part$Sepal.Width, part$Petal.Length,
colvar = part$Partition,
colkey = F,
alpha = 0.5,
pch = 16, cex = 0.3,
theta = 30, phi = 30,
ticktype = 'detailed',
plot = F)
points3D(data$Sepal.Length, data$Sepal.Width, data$Petal.Length,
colkey = F,
pch = 16, cex = 2,
theta = 30, phi = 30,
ticktype = 'detailed',
col = data$Species,
add = T)
我还添加了数据点。您可以将分区确定为点云中蓝色和红色之间的模糊交集:
这不是一个理想的解决方案,因为很难看到隐藏在点云中的数据点。点云也有点分散注意力。也许一些聪明的点与透明度的绘图会改善事情,但我怀疑一个更好的解决方案是在物种类别之间的相交处(即蓝色和红色点相遇的地方)绘制一个平面(类似于回归平面)。请注意,我最终希望使用不同的分类器(例如随机森林),以防万一存在仅限于 LDA 或类似的解决方案。
非常感谢您提供任何解决方案或建议。