scikit-learn ExtraTreesClassifier - 为啥泡菜文件这么大? (几 GB)
Posted
技术标签:
【中文标题】scikit-learn ExtraTreesClassifier - 为啥泡菜文件这么大? (几 GB)【英文标题】:scikit-learn ExtraTreesClassifier - Why is the pickle file so huge? (Several GB)scikit-learn ExtraTreesClassifier - 为什么泡菜文件这么大? (几 GB) 【发布时间】:2016-03-02 13:57:40 【问题描述】:使用 python + scikit-learn,我将“极端随机树”分类器 (ExtraTreesClassifier) 拟合到包含 100 个特征的约 900K 样本数组(实值 float64)。然后我试着腌制它。
我实例化了分类器:
cls = ExtraTreesClassifier(n_estimators=10, random_state=0, n_jobs=-1)
拟合后,我尝试了两种保存方式:
pickle.dump(cls, open(classifier_file, "wb"))
并且,使用 joblib:
from sklearn.externals import joblib joblib.dump(cls, classifier_file)
在普通的 pickle 中,它占用了 4+ GB 的空间! 在 joblib 版本中,它占用了大约 1.5 GB 的空间。
它是否固有地存储了一些适合或预测的原始输入数据?
【问题讨论】:
【参考方案1】:单个“极端随机树”可能会随着输入数据的大小而增长,因为它会创建一个决策树,该决策树将数据拆分为具有少量观察值的叶节点(例如,达到参数化限制 -默认情况下这是min_samples_split=2
或pure
并包含一个类)。
具有许多高度预测特征的数据将具有具有更多观察值的纯节点,因此占用的空间更少。存储的大小也应该与估算器的数量大致成正比。
【讨论】:
嘿,谢谢你澄清了它,并且非常了解它是如何工作的。以上是关于scikit-learn ExtraTreesClassifier - 为啥泡菜文件这么大? (几 GB)的主要内容,如果未能解决你的问题,请参考以下文章