You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggplot2绘制LDA决策边界等高线图时出现Summary.factor错误

解决LDA决策边界绘制的错误问题

错误原因

geom_contour要求z参数为连续数值型变量,你代码中使用的predict(lda.fit, ...)$class是因子类型(分类结果),因子无法计算数值范围(range),因此触发报错。要绘制LDA决策边界,需使用数值型的预测输出(如后验概率、判别函数得分),而非直接用分类类别。

修正步骤与代码

假设你已经训练好LDA模型lda.fit <- lda(Group ~ GPA + GMAT, data = train),按以下步骤修改:

  1. 生成覆盖特征范围的网格数据
    为了绘制完整的决策边界,需要创建覆盖GPA和GMAT取值范围的密集网格点,而非仅使用原始数据点:

    # 生成网格序列
    gpa_seq <- seq(min(train$GPA), max(train$GPA), length.out = 100)
    gmat_seq <- seq(min(train$GMAT), max(train$GMAT), length.out = 100)
    # 展开为网格数据框
    grid_df <- expand.grid(GPA = gpa_seq, GMAT = gmat_seq)
    
  2. 对网格数据做LDA预测,提取数值型结果
    提取后验概率(多分类场景下,某类概率=0.5即为两类边界)或判别函数得分:

    # 对网格数据进行LDA预测
    grid_pred <- predict(lda.fit, newdata = grid_df)
    # 提取第一类的后验概率(可根据你的分类调整列索引)
    grid_df$posterior_prob <- grid_pred$posterior[, 1]
    
  3. 绘制散点图与决策边界
    使用geom_contour基于数值型的后验概率绘制边界:

    ggplot(train, aes(x = GPA, y = GMAT, color = Group)) +
      geom_point(size = 2) +
      ggtitle("带LDA决策边界的GPA与GMAT分组散点图") +
      # 绘制决策边界:后验概率=0.5的等高线
      geom_contour(data = grid_df, aes(x = GPA, y = GMAT, z = posterior_prob),
                   breaks = 0.5, color = "black", size = 1, alpha = 0.8)
    

补充说明

  • 如果是二分类场景,也可以使用LDA的判别函数得分(grid_pred$x[,1]),边界对应得分=0的位置,只需将breaks设为0即可。
  • 多分类场景下,需为每两类之间的边界分别提取对应类别的后验概率,重复绘制geom_contour。

内容的提问来源于stack exchange,提问作者Remonda Hanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:13:01