R最佳可视化

R best vizualization

我想对我的分类问题中所有错误分类的数字的 2 个向量(predikcia 和测试数据)进行可视化,我在两个向量中都有 76 个数据 - 第一个(predikcia)的数字为 0-9分类器错误预测的内容和第二个向量(测试数据)中的数字应该是什么。这些向量的基本图没有很好的表示,或者没有提供一些关于哪些数字被错误分类以及哪些数字应该被正确分类的有用信息。这是一张图片,显示的是基本情节

数据

classres <- data.frame(
  predikcia = c(9L, 8L, 3L, 9L, 1L, 6L, 2L, 2L, 
    6L, 3L, 5L, 9L, 8L, 1L, 5L, 1L, 3L, 3L, 5L, 9L, 
    5L, 1L, 8L, 9L, 5L, 0L, 1L, 9L, 5L, 5L, 8L, 9L,
    2L, 5L, 8L, 5L, 6L, 9L, 9L, 4L, 9L, 3L, 5L, 5L, 9L, 9L, 9L, 4L, 3L,    
    5L, 8L, 3L, 0L, 5L, 8L, 8L, 7L, 3L, 8L, 8L, 5L, 9L, 9L, 1L, 5L, 5L,
    9L, 9L, 5L, 3L, 1L, 9L, 2L, 5L, 8L, 9L),
  testdata = c(4L, 6L, 1L, 5L, 5L, 1L, 1L, 1L, 5L, 
   9L, 7L, 8L, 0L, 8L, 8L, 9L, 7L, 1L, 9L, 5L, 8L,
   8L, 0L, 5L, 1L, 8L, 4L, 1L, 9L, 1L, 0L, 5L, 1L,
   9L, 0L, 0L, 0L, 4L, 1L, 2L, 7L, 5L, 9L, 8L, 5L,
   5L, 5L, 1L, 9L, 9L, 0L, 9L, 8L, 9L, 6L, 0L, 8L,
   5L, 0L, 9L, 8L, 5L, 5L, 9L, 2L, 8L, 0L, 5L, 7L,
   1L, 8L, 8L, 9L, 9L, 7L, 1L))

我假设存在“正确”或“不正确”的预测,否则图表需要更多工作。

首先,我有数据,其中有预测值和实际值。在这个例子中它们是整数,但我假装它没有任何意义。

classres <- data.frame(
  predikcia = c(9L, 8L, 3L, 9L, 1L, 6L, 2L, 2L, 
                6L, 3L, 5L, 9L, 8L, 1L, 5L, 1L, 3L, 3L, 5L, 9L), 
  testdata = c(4L, 6L, 1L, 5L, 5L, 1L, 1L, 1L, 5L, 
               9L, 7L, 8L, 0L, 8L, 8L, 9L, 7L, 1L, 9L, 5L))

然后我创建一个计数 data-frame。 “因素”部分很重要,因为我希望所有可能的组合都出现在图中。

dat.plot <- classres %>% 
  count(testdata, predikcia) %>% 
  mutate(
    testdata = factor(testdata, levels = 0:9),
    predikcia = factor(predikcia, levels = 0:9)) 

最后,我根据数据创建了一个热图,用计数值为每个单元格的内部着色,并为预测被认为正确的单元格添加了边框(这就是为什么我需要 goodclass data-frame).

goodclass <- data.frame(
  testdata = factor(0:9),
  predikcia = factor(0:9)
)

dat.plot %>%
  ggplot(aes(testdata, predikcia, fill = n)) +
  geom_tile() + 
  scale_fill_gradient(low = "goldenrod", high = "darkorchid4") + 
  geom_tile(data = goodclass, 
            aes(testdata, predikcia, color = "Correct\npredictions"), 
            inherit.aes = FALSE, fill = NA, size = 2) +
  scale_color_manual(values = c(`Correct\npredictions` = "limegreen")) + 
  labs(x = "Real class value", y = "Predicted class value", 
       fill = "count", color = "") +
  coord_equal() + 
  theme_minimal() + 
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_line(color = "black", size = 2))

结果有点让人眼前一亮:可能需要更多的工作才能找到更漂亮的颜色。