我在尝试使用RandomForestClassifier处理一个自然语言处理问题时,使用predict_log_proba方法时遇到了除零错误。我检查了predict_proba方法的结果,发现原因是一些类别的概率(共有6个类别)为0。当predict_log_proba尝试对0应用np.log时就会出错。有没有可以避免这个问题的参数?
我知道predict_log_proba可以正确用于随机森林分类器,因为我看到这个示例代码使用它并且运行正常:http://scikit-learn.org/stable/auto_examples/calibration/plot_calibration_multiclass.html
我使用的是sklearn版本0.19,并且使用了RandomForestClassifier的默认参数值。
回答:
如果你的模型对于某个类别输出了零概率,那么该类别的对数概率就是负无穷大。因此,如果你在对数空间中对概率求和(或出于其他原因需要这个值),显然你无法处理这种情况。
在随机森林中发生这种情况,意味着所有的树都同意对于该特定数据点,该特定类别的概率为零。你可以通过增加树的数量来缓解这个问题(这样至少有一棵树会认为这个例子属于该类别的概率增加)。或者你可以减少max_depth
参数来达到类似的效果。
另一种方法是,在应用对数之前软化模型的输出,例如,将输出概率设置为min(max(p, 0.001), 0.999)。
希望这对你有帮助。