我正在尝试进行两类文本分类。通常我会创建经过训练的模型的 Pickle 文件,并在训练阶段加载这些 pickle 以消除重新训练。
当我每个类(class)有 12000 条评论 + 超过 50000 条推文时,训练模型大小达到 1.4 GB。
现在将如此大的模型数据存储到 Pickle 中并加载它确实不可行且不可取。
对于这种情况有更好的替代方案吗?
这里是示例代码,我尝试了多种pickleing方法,这里我使用了dill
包
def train(self):
global pos, neg, totals
retrain = False
# Load counts if they already exist.
if not retrain and os.path.isfile(CDATA_FILE):
# pos, neg, totals = cPickle.load(open(CDATA_FILE))
pos, neg, totals = dill.load(open(CDATA_FILE, 'r'))
return
for file in os.listdir("./suspected/"):
for word in set(self.negate_sequence(open("./unsuspected/" + file).read())):
neg[word] += 1
pos['not_' + word] += 1
for file in os.listdir("./suspected/"):
for word in set(self.negate_sequence(open("./suspected/" + file).read())):
pos[word] += 1
neg['not_' + word] += 1
self.prune_features()
totals[0] = sum(pos.values())
totals[1] = sum(neg.values())
countdata = (pos, neg, totals)
dill.dump(countdata, open(CDATA_FILE, 'w') )
更新:大pickle背后的原因是分类数据非常大。我考虑过1-4克进行特征选择。分类数据集本身约为 300mb,因此考虑使用 multigram 方法进行特征选择会创建大型训练模型。
最佳答案
Pickle 作为一种格式非常繁重。它存储对象的所有详细信息。 以 hdf5 等高效格式存储数据会更好。 如果您不熟悉 hdf5,您可以考虑将数据存储在简单的平面文本文件中。您可以使用 csv 或 json,具体取决于您的数据结构。您会发现两者都比 pickle 更有效。
您可以查看gzip
来创建和加载压缩文件。
关于python - 大数据训练分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053594/