Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

the method to precess missing value #5

Closed
PseudoProgrammer opened this issue Aug 21, 2018 · 10 comments
Closed

the method to precess missing value #5

PseudoProgrammer opened this issue Aug 21, 2018 · 10 comments

Comments

@PseudoProgrammer
Copy link

模型在处理missing value有点问题,麻烦看一下,谢谢!
这是我构造的训练集A,20条样本,训练集上的auc=0.55
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
0 1 0:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1
1 1 1:1

训练集合B,对A补全了特征,20条样本,训练集上auc=1
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
0 1 0:1 1:0
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1
1 1 0:0 1:1

@PseudoProgrammer
Copy link
Author

ps:之所以倾向于构建训练集A,是因为应用场景的特征高维稀疏。训练集A可以降低硬盘存储和训练模型的内存

@qiyiping
Copy link
Owner

你好,

训练数据格式有这么一个约定:如果某一维特征没有出现在样本中,则认为这条样本中这一维特征为缺失(N/A,not available)。

树模型拟合过程中,也会对缺失值进行特殊的处理。

所以目前数据格式中对于特征值为0的情况也得显示的标明。

另外,从训练复杂度来看的话,树模型的训练时间和特征维度成正比,如果特征维度特别高的话,树模型的训练时间会特别大,可以考虑尝试其他模型(LR、FM、FFM等)

@PseudoProgrammer
Copy link
Author

你好,
1、由于一些场景需要,其他模型可能不太适合,需要这个c++的gbdt
2、这两份数据集A和B的信息量是一样,所以期待两分数据抛出来的auc效果是一样的。因为B只是对A的所有缺失值补0而已,信息量没有增加
所以,想问下当前的gbdt对missing value是怎样处理的,以及,有没有推荐的方案供参考

@PseudoProgrammer
Copy link
Author

@qiyiping

@PseudoProgrammer
Copy link
Author

比如xgboost的方案是把missing value的样本全分到左孩子节点

@qiyiping
Copy link
Owner

你好,这个实现中,是用一颗“三叉树”来处理missing value情况的:左右子节点+NaN节点。

所以对数据格式有了这样的要求。

如果你期望实现sparse的数据格式,可以简单修改一下数据加载模块:

result->feature[i] = kUnknownValue;

将初始值从kUnknownValue改为0即可以了。

希望能帮助到你。

多谢

@PseudoProgrammer
Copy link
Author

好的,另外有个疑问哈,如果是三叉树的话,训练集A的auc为什么不是1呢

@PseudoProgrammer
Copy link
Author

特征0 非miss即判断为0类别,miss即判断为1类别

@qiyiping
Copy link
Owner

qiyiping commented Aug 27, 2018 via email

@PseudoProgrammer
Copy link
Author

okay,了解了,谢谢!那我把所有miss的值用计算机的最小值补全,则miss值会分配到左孩子节点。你觉得这样做会不会有什么问题呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants