用字符串变量制作决策树

问题描述 投票:0回答:0

我正在尝试从包含歌曲和关于它们的各种属性(流派、节奏等)的数据集中制作决策树。在这些属性中,除了类型之外都是数值。我已经知道如何仅使用数值来制作决策树,但我也想将流派添加到树中。然而,决策树不喜欢字符串。

我试过在流派列上使用

as.factor
,但结果不太理想。使用 as.factor,我的决策树中有一个神秘的流派,名为“cefjkm”。我想也许我可以看看数据集的类型,假设
as.factor
已经改变了值。然而,它们仍然是数据集中的原始词。

然后我尝试在

as.numerical
之后使用
as.factor
。然而,数字也好不到哪儿去。毫无疑问,将它们视为实际数字,从而给出奇怪的节点,如“流派< 4.5".

我也尝试过使用

factor(...)
,但即使阅读了文档,我也不太清楚如何使用它。使用我简单地将流派更改为一个因素的数据集(给我 cefjkm 的那个),我写了这个,只使用两种流派作为测试值:

factor(data_set_test1, levels=c("rap","rock"))

这只会导致所有不是“说唱”或“摇滚”的流派都被 NA 取代。我相信我最大的问题是我不明白在这种情况下什么是水平。当只使用

as.factor
时,它为每个单独的流派创造了一个等级,但我不知道这有什么区别,或者我是否可以利用它。

理想情况下,我希望流派不是数字,而是说它们是什么流派,而不是像“cefjkm”这样的名称。如果那不可能,那么我想查看

as.factor
版本的流派,以便将它们与原始字符串列进行比较。我想看看每个流派都起了什么奇怪的名字

编辑 为了获得帮助,我用 25 首歌曲而不是 200 首歌曲制作了一个数据子集:

MGSHelp2 <- data.frame(
  Genre = factor(
    c(
      "rap", "pop", "covertronica", "country", "pop", "pop", "rock",
      "pop", "pop", "pop", "rap", "rock", "rock", "rock", "rap", "pop",
      "pop", "pop", "pop", "rock", "pop", "rock", "country", "pop",
      "pop"
    ),
    levels = c(
      "aussietronica", "bath indie", "big room", "boy band", "brostep",
      "chillwave", "classic anime", "classical", "contemporary r&b",
      "country", "covertronica", "disco", "edm", "funk carioca", "hip hop",
      "pop", "rap", "reggae fusion", "rock"
    )
  ),
  Danceability = c(
    0.831, 0.688, 0.854, 0.652, 0.463, 0.38, 0.436, 0.528, 0.326, 0.47, 0.909,
    0.429, 0.447, 0.502, 0.67, 0.751, 0.586, 0.578, 0.724, 0.806, 0.694, 0.66,
    0.392, 0.593, 0.621
  ),
  Energy = c(
    0.727, 0.582, 0.806, 0.767, 0.268, 0.325, 0.978, 0.923, 0.528, 0.793, 0.541,
    0.974, 0.967, 0.966, 0.424, 0.834, 0.616, 0.574, 0.491, 0.437, 0.891, 0.462,
    0.37, 0.781, 0.539
  ),
  Speechiness = c(
    0.169, 0.0542, 0.0886, 0.0372, 0.0408, 0.0328, 0.201, 0.058, 0.032, 0.26,
    0.497, 0.0899, 0.0793, 0.0946, 0.292, 0.0437, 0.0324, 0.0454, 0.0296, 0.191,
    0.0949, 0.103, 0.0298, 0.0545, 0.0788
  ),
  Acousticness = c(
    0.447, 0.23, 0.0209, 0.0355, 0.981, 0.712, 6.9e-05, 0.00536, 0.159, 0.164,
    0.322, 0.00168, 0.00448, 0.00575, 0.333, 0.3, 0.182, 0.196, 0.018, 0.0279,
    0.0562, 0.168, 0.205, 0.000724, 0.675
  ),
  Instrumentalness = c(
    0, 0.000157, 0.0542, 6.92e-06, 0.00659, 0, 6.08e-05, 1.46e-05, 3.55e-05,
    1.31e-06, 0, 0, 0, 1.56e-06, 0, 1.77e-05, 0, 0, 1.29e-05, 0, 0, 1.37e-06,
    0.0096, 0, 1.25e-05
  ),
  Liveness = c(
    0.111, 0.0663, 0.0703, 0.397, 0.185, 0.0997, 0.148, 0.134, 0.0862, 0.313,
    0.0942, 0.164, 0.487, 0.117, 0.112, 0.355, 0.0927, 0.083, 0.0887, 0.457,
    0.561, 0.486, 0.0821, 0.225, 0.125
  ),
  Valence = c(
    0.703, 0.872, 0.637, 0.73, 0.109, 0.429, 0.103, 0.267, 0.289, 0.216, 0.823,
    0.33, 0.606, 0.638, 0.743, 0.894, 0.719, 0.301, 0.383, 0.803, 0.563, 0.384,
    0.512, 0.565, 0.202
  ),
  Tempo = c(
    125.068, 85.486, 124.927, 132.017, 112.695, 89.898, 155.98, 130.067, 166.213,
    170.1, 135.106, 110.373, 179.991, 159.948, 77.685, 95.053, 148.088, 174.152,
    105.046, 114.918, 97.939, 167.098, 48.718, 103.025, 81.967
  ),
  Pref2 = factor(c(
    "Bad", "Good", "Bad", "Bad", "Bad", "Bad", "Bad", "Good", "Bad",
    "Bad", "Bad", "Good", "Bad", "Good", "Bad", "Good", "Bad", "Bad",
    "Bad", "Bad", "Bad", "Bad", "Bad", "Good", "Bad"
  ))
)

库:tidyverse、tree、randomForest、rpart 我实际上不确定除 tree 之外的任何库都是必需的。我添加了 randomForest 和 rpart 以防树本身无法帮助我。

这个示例数据集是从我已经完成的完整数据集的一个版本制作的

as.factor(df$genre)
,但如果有必要,我可以提供之前的版本
as.factor
.

此外,这是我尝试的方式

as.numeric

MGSHelp3<-MGSHelp2
MGSHelp3$Genre<-as.numeric(MGSHelp3$Genre)

我不想堵塞这个问题,但如果有必要,我可以添加这个的

dput
版本。

r string decision-tree
© www.soinside.com 2019 - 2024. All rights reserved.