0

我想使用 tidymodels 来拟合基于 C5.0 规则的分类模型。我已指定模型如下

c5_spec <- 
  C5_rules() %>% 
  set_engine("C5.0") %>% 
  set_mode("classification")

在 C5_rules() 命令的文档中,我阅读了以下内容。

在对数据使用 fit.model_spec() 函数之前,不会训练或拟合模型。

我不太确定在那之后我需要对欧洲防风草模型对象做什么。每次我尝试拟合模型时,都会出现以下错误

预处理器 1/1,模型 1/1(预测):predict.C5.0 中的错误(object = object$fit,newdata = new_data,type = "class"):必须提供树或规则

我错过了什么?

非常感谢!

4

1 回答 1

3

这是一个好的开始!您已经定义了模型规范,但如果您想使用工作流来适应,您还需要创建一个配方和工作流。Julia Silge 的博客是习惯使用 tidymodels 的最佳资源。这是一个将 C5 分类器拟合到训练数据的表示:

# load tidymodels & rules
library(tidymodels)
#> Registered S3 method overwritten by 'tune':
#>   method                   from   
#>   required_pkgs.model_spec parsnip
library(rules)
#> Warning: package 'rules' was built under R version 4.1.1
#> 
#> Attaching package: 'rules'
#> The following object is masked from 'package:dials':
#> 
#>     max_rules

# example training dataset
cars_train <- as_tibble(mtcars)

# change the number of cylinders to character for predicting as a class
cars_train <- 
  cars_train %>%
  mutate(cyl = as.character(cyl))

# training df
cars_train
#> # A tibble: 32 x 11
#>      mpg cyl    disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  21   6      160    110  3.9   2.62  16.5     0     1     4     4
#>  2  21   6      160    110  3.9   2.88  17.0     0     1     4     4
#>  3  22.8 4      108     93  3.85  2.32  18.6     1     1     4     1
#>  4  21.4 6      258    110  3.08  3.22  19.4     1     0     3     1
#>  5  18.7 8      360    175  3.15  3.44  17.0     0     0     3     2
#>  6  18.1 6      225    105  2.76  3.46  20.2     1     0     3     1
#>  7  14.3 8      360    245  3.21  3.57  15.8     0     0     3     4
#>  8  24.4 4      147.    62  3.69  3.19  20       1     0     4     2
#>  9  22.8 4      141.    95  3.92  3.15  22.9     1     0     4     2
#> 10  19.2 6      168.   123  3.92  3.44  18.3     1     0     4     4
#> # ... with 22 more rows

# setup recipe with no preprocessing
cars_rec <-
  recipe(cyl ~ ., data = cars_train)

# specify c5 model; no need to set mode (can only be used for classification)
cars_spec <- 
  C5_rules() %>%
  set_engine("C5.0")

# create workflow
cars_wf <-
  workflow() %>%
  add_recipe(cars_rec) %>%
  add_model(cars_spec)

# fit workflow
cars_fit <- fit(cars_wf, data = cars_train)

# add predictions to df
cars_preds <- 
  predict(cars_fit, new_data = cars_train) %>%
  bind_cols(cars_train) %>%
  select(.pred_class, cyl)

cars_preds
#> # A tibble: 32 x 2
#>    .pred_class cyl  
#>    <fct>       <chr>
#>  1 6           6    
#>  2 6           6    
#>  3 4           4    
#>  4 6           6    
#>  5 8           8    
#>  6 6           6    
#>  7 8           8    
#>  8 4           4    
#>  9 4           4    
#> 10 6           6    
#> # ... with 22 more rows

# confusion matrix
cars_preds %>%
  conf_mat(truth = cyl, 
           estimate = .pred_class)
#> Warning in vec2table(truth = truth, estimate = estimate, dnn = dnn, ...): `truth`
#> was converted to a factor
#>           Truth
#> Prediction  4  6  8
#>          4 11  0  0
#>          6  0  7  0
#>          8  0  0 14

reprex 包于 2021-09-30 创建(v2.0.1)

于 2021-09-30T21:41:56.367 回答