如何强制模型使用变量

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

我有用于训练二元分类模型的数据。

set.seed(1)
n <- 20
dat <- cbind.data.frame(target=as.factor(sample(0:1,n,T)),
                        price=round(rnorm(n)+1000,2),
                        var1=sample(1:n),
                        var2=round(rnorm(n),2),
                        var3=round(rnorm(n),2)) 

.

   target   price var1  var2  var3
1       1 1001.03    5 -0.95  1.16
2       0 1000.21   13 -0.02 -0.45
3       0  999.49   11  1.20  1.95
4       0 1000.95    7  0.71  0.86
5       1 1001.49   20 -0.44  1.07
6       0  999.45   10  0.78 -1.76
7       1  998.78   12 -1.64 -0.77
8       1  998.23    8  0.67  0.12

我想强制我的模型考虑我在做出的每个决定中指定的变量

price

我将用一个例子来解释我的意思。 假设我正在使用由规则组成的随机森林模型,在这种情况下,我希望每个规则都有一个

price
变量。

这些都是很好的规则,因为每个规则都有一个变量

price

 price<=1001.49 & var1>0.105                           
 var2<=0.12 & price>1001.03 & var3>-0.025             
 price<=998.23 & price>=997.23

这些都是不好的规则,我希望模型中没有这样的规则

var3<=0.57 & var3>0.105                            
var2<=0.12 & var2>-1.005 & var3>-0.025               
var1<=6.5

我知道我无法影响模型本身,但也许我可以以某种方式更改数据集中的变量,最终迫使模型在每个决策中强制使用

price
变量。

作为测试,您可以使用此代码从经过训练的随机森林模型中提取规则。

library(inTrees)
library(randomForest)
rules <- randomForest(target~., dat, ntree=20) |> 
          RF2List() |> 
          extractRules(dat) |> 
          unique() |> 
          getRuleMetric(dat[,-1], dat$target) |> 
          pruneRule(dat[,-1], dat$target) |> 
          buildLearner(dat[,-1], dat$target)

.

presentRules(rules, colnames(dat[,-1]))

    len freq   err condition                                pred
[1,] "2" "0.35" "0" "var1<=15.5 & var2<=-0.05"               "1" 
[2,] "3" "0.2"  "0" "var1<=13.5 & var2>-0.05 & var3<=-0.315" "0" 
[3,] "1" "0.1"  "0" "var2>1.255"                             "1" 
[4,] "2" "0.1"  "0" "var1>17 & var2>-1.55"                   "1" 
[5,] "1" "0.1"  "0" "var3<=-0.16"                            "0" 
[6,] "2" "0.1"  "0" "var2>-0.05 & var3>0.49"                 "0" 
[7,] "1" "0.05" "0" "Else"                                   "1" 

正如您在此阶段所看到的,模型拒绝在其规则中使用变量

price
。但我的任务的具体情况意味着我不需要不使用
price
的规则。

总而言之,我的问题是这样的: 如何更改我的数据集以强制模型在每个规则中使用

price

r machine-learning random-forest feature-extraction feature-engineering
1个回答
0
投票

这个技巧可能会起作用。

随机森林样本列,对吧?然后,我只需添加数十(或数百或数千)价格列的副本来扩展数据集。

© www.soinside.com 2019 - 2024. All rights reserved.