gpt4 book ai didi

R:XGBoost 和特征哈希。 MError不断增加

转载 作者:行者123 更新时间:2023-11-30 09:17:09 24 4
gpt4 key购买 nike

我正在研究一个只有 500 多个类的多分类问题。数据与餐厅菜单相关,我的目标是根据项目名称及其所属类别对项目进行分类。我正在使用 R 中的 FeatureHashing 库来哈希出项目名称和类别字段。然后使用 XGBoost 作为我的模型。由于某种原因,训练误差随着每次迭代而增加。数据集非常大... > 200 万行。奇怪的是,当我在 Azure ML 中工作并进行相同类型的特征哈希并使用随机森林模型时,我能够在训练集上实现大约 80% 的准确率。我不确定我做错了什么。这是一些示例代码

## libraries
library(tidyverse)
library(FeatureHashing)
library(xgboost)

## sample data
df <- data.frame(
item_name=c('jose cuervo', 'chicken with shrimp', 'lasagna',
'oreos', 'chicken marsala', 'beef stew'),
category=c('adult beverage', 'chicken dish', 'pasta',
'dessert', 'chicken dish', 'soup'),
target=c(0, 1, 2, 3, 1, 4)
)

## hashing function
f <- ~ category + split(item_name, delim=" ")

## hash features
hashed.mat <- hashed.model.matrix(f, df, hash.size=2^6)

## define some model parameters
num.class <- df$target %>% unique() %>% length()
target <- df$target

## xgboost paramters
xgb.params <- list(booster='gbtree',
objective='multi:softmax',
num_class=num.class,
eta=0.3,
gamma=0,
max_depth=6,
min_child_weight=1,
subsample=1,
colsample_bytree=1)

## fit model
xgb.fit <- xgboost(hashed.mat, target, params=xgb.params, nrounds=10,
verbose=1, print_every_n = 1)

here is what the error is doing

最佳答案

这就是正在发生的事情......

当您训练一个非常小的数据集(例如样本中的数据集(6 行)时)

参数 min_child_weight=1 会防止 split 发生——因此您无需进行模型训练。

设置min_child_weight=0,然后训练...

您应该看到这个(这是您的数据和带有 min_child_weight=0 的代码)...

> xgb.fit <- xgboost(hashed.mat, target, params=xgb.params, nrounds=12,
+ verbose=1, print_every_n = 1)
[1] train-merror:0.000000
[2] train-merror:0.000000
[3] train-merror:0.000000
[4] train-merror:0.000000
[5] train-merror:0.000000
[6] train-merror:0.000000
[7] train-merror:0.000000
[8] train-merror:0.000000
[9] train-merror:0.000000
[10] train-merror:0.000000
[11] train-merror:0.000000
[12] train-merror:0.000000

要观察发生了什么,请执行此操作,这会向您显示训练:

> xgb.model.dt.tree(model = xgb.fit)
Tree Node ID Feature Split Yes No Missing Quality Cover
1: 0 0 0-0 5 -9.536743e-07 0-1 0-2 0-1 0.85576522 1.9200001
2: 0 1 0-1 Leaf NA <NA> <NA> <NA> -0.03846154 1.6000001
3: 0 2 0-2 Leaf NA <NA> <NA> <NA> 0.06060606 0.3200000
4: 1 0 1-0 4 -9.536743e-07 1-1 1-2 1-1 1.62249923 1.9200001
5: 1 1 1-1 Leaf NA <NA> <NA> <NA> -0.03508772 1.2800001
---
176: 58 1 58-1 Leaf NA <NA> <NA> <NA> -0.03234537 1.2372975
177: 58 2 58-2 Leaf NA <NA> <NA> <NA> 0.04115688 0.4767628
178: 59 0 59-0 10 -9.536743e-07 59-1 59-2 59-1 0.47927150 1.7140603
179: 59 1 59-1 Leaf NA <NA> <NA> <NA> -0.03234537 1.2372975
180: 59 2 59-2 Leaf NA <NA> <NA> <NA> 0.04115688 0.4767628

当您在没有约束超参数的情况下运行代码时,应该很好地过拟合!

关于R:XGBoost 和特征哈希。 MError不断增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52763447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com