scikit-learn ExtraTreesClassifier - 为什么 pickle 文件这么大? (数GB)

scikit-learn ExtraTreesClassifier - Why is the pickle file so huge? (Several GB)

使用 python + scikit-learn,我将 "Extremely Randomized Trees" 分类器 (ExtraTreesClassifier) 拟合到一个包含 100 个特征(实值 float64)的约 900K 样本数组。然后我试着腌制它。

我用以下实例化了分类器:

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的space! 在joblib版本中,占用了约1.5GB的space.

它是否固有地存储了一些适合或预测的原始输入数据?

单个 "Extremely Randomized Tree" 可能会随着输入数据的大小而增长,因为它创建了一个决策树,将数据拆分为具有少量观察值的叶节点(例如,要么达到参数化限制-- 默认情况下这是 min_samples_split=2pure 并且包含单个 class).

具有大量高度预测特征的数据将具有具有更多观察值的纯节点,因此占用更少 space。存储的大小也应该与估计器的数量大致成正比。