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=2
或 pure
并且包含单个 class).
具有大量高度预测特征的数据将具有具有更多观察值的纯节点,因此占用更少 space。存储的大小也应该与估计器的数量大致成正比。
使用 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=2
或 pure
并且包含单个 class).
具有大量高度预测特征的数据将具有具有更多观察值的纯节点,因此占用更少 space。存储的大小也应该与估计器的数量大致成正比。