我正在制作一个篮球模型,根据他们在本赛季所有比赛中的表现,预测NBA球员在下一场比赛中的表现。每支NBA球队大约有10名球员,本赛季30支球队中每支球队都打了25场比赛,所以我的数据框架目前大约有10 * 30 * 25 = 7,500个观测值。我每天运行我的模型,预测玩家在第二天的表现如何 - 因此,明天我将做出大约10 * 30 = 300次的预测。
我的问题是这个 - 目前我有大约50个列/特征/ x变量我用于预测,所有这些都是数字变量(平均得分点数,平均篮板数等)。但是,我认为这可能有助于我的模型知道每行对应哪个玩家。也就是说,我想传递第51列,一个包含球员名字的因子变量。我在网上看到GBM可以处理因子变量,因为它会在内部“模仿”它们,但我担心“假装”300名不同的玩家将无法表现良好。将所有玩家名称传递一个因子变量会适得其反并最终伤害我的模型,因为它会在内部创建大量的虚拟变量,或者这样可以吗?
my_df
PLAYER FG FGA X3P X3PA FT FTA
1042 Andre Drummond 6 16 0 0 6 10
17747 Marcus Morris 6 19 1 4 5 6
14861 Kentavious Caldwell-Pope 7 14 4 7 3 3
7976 Ersan Ilyasova 6 12 3 6 1 2
22401 Reggie Jackson 4 10 2 4 5 5
24475 Stanley Johnson 3 10 1 3 0 0
24649 Steve Blake 1 6 1 5 0 0
12489 Jodie Meeks 1 4 0 0 0 0
1955 Aron Baynes 3 5 0 0 0 0
21500 Paul Millsap 7 15 2 6 3 4
答案 0 :(得分:0)
我在gbm中使用了具有大量级别的因子变量,并且您将面临的最大问题是您的计算时间将显着增加。(对于您的情况,这可能不是您正在使用的数据集的问题很小)另外,当你绘制变量重要性时
gbm_model <- train(A0 ~ .,
data = training,
method="gbm",
distribution = "bernoulli",
metric="ROC",
maximise=TRUE,
tuneGrid=grid,
train.fraction = 0.6,
trControl=ctrl)
ggplot(varImp(gbm_model, scale=TRUE))
每个因子级别单独显示,这可能会使评估重要性变得非常混乱。
除此之外,你提到你有7,500个观察,50个特征和300个不同的玩家。如果你考虑添加玩家名称作为一个变量,这意味着每个玩家约25个障碍,这是一个非常小的样本,可能意味着你的模型不会很好地概括。因此,我个人的建议是不要这样做。
然而,我明白你为什么要这样做,并建议你尝试聚集玩家(使用玩家特定的标准,甚至可能是你已经拥有的一些功能),然后使用玩家所属的集群作为变量。
希望这有帮助! :)
答案 1 :(得分:0)
我对gbm函数有同样的问题,例如我添加了一个100级的randomn因子,它似乎是最有影响力的变量。