0

我使用 python 的 scikit lib 中的随机森林分类器来做我的练习。每次运行时,结果都会发生变化。所以我跑了 1000 次,得到了平均结果。

我将对象rf保存到文件中,以便以后通过 pickle.dump() 进行预测,每个文件大约 4MB。但是, sys.getsizeof(rf) 只给我 36 个字节

rf = RandomForestClassifier(n_estimators = 50)
rf.fit(matX, vecY)
pickle.dump(rf,'var.sav')

我的问题:

  • sys.getsizeof() 在获取 RandomForestClassifier 对象的大小时似乎是错误的,不是吗?为什么?
  • 如何将对象保存在 zip 文件中以使其尺寸更小?
4

1 回答 1

5

getsizeof()只为您提供对象的内存占用,而不是该对象引用的任何其他值。您还需要递归对象以查找所有属性的总大小,以及这些属性所包含的任何内容,等等。

酸洗是一种序列化格式。序列化需要存储元数据以及对象的内容。内存大小和泡菜大小只有粗略的相关性。

Pickles 是字节流,如果您需要更紧凑的字节流,请使用压缩。

如果您将泡菜存储在 ZIP 文件中,则您的数据已经被压缩;在将泡菜存储到 ZIP 之前对其进行压缩在这种情况下将无济于事,因为在额外的 ZIP 压缩之后,由于元数据开销和典型压缩数据中缺乏重复数据,已经压缩的数据可能会变得更大。

于 2013-10-22T11:21:58.557 回答