在我的spark
研究中,我经常遇到应用程序崩溃,并带有一些跟踪" can not find key xxx
"。在遇到碰撞跟踪中未清晰的消息后,我发现这是因为测试数据具有一定的价值,而培训数据没有。
例如:
有一个分类功能包含4个唯一值(1,2,3,4)
。在split
之后,数据集用于训练/测试数据集,培训数据仅具有此功能的(1,2,3(,并且测试数据集具有(...,4(。训练模型后,使用测试数据集评估模型时,应用程序将崩溃。
当数据预处理或有办法避免这种情况时,是否有任何最佳做法?
更新更多详细信息:
-
我正在训练具有几个分类特征和数值特征的决策树。
-
培训/测试数据集为70/30,然后评估失败了:"由:java.util.nosuchelementException引起:找不到键:5.0"
- 然后我将培训/测试更改为100/30,错误消失了。
所以我认为问题来自培训数据中缺少的分类价值,我需要一种避免这种情况的方法。
使用分层采样。
您将数据集由标签拆分,然后在每个标签中进行采样。
然后,您之后再次加入并洗牌所有标签。
您可以尝试对分类属性进行相同的尝试。但是,当然,您最终可能会观察到您从未见过的独特价值。良好的实现不应崩溃!