python - 大数据训练分类器

标签 python machine-learning classification pickle text-classification

我正在尝试进行两类文本分类。通常我会创建经过训练的模型的 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/

相关文章:

java - 具有字符串属性的 WEKA 决策树

python - 如何以正确的方式缩放和预测单个样本

python - TensorFlow 二元分类器输出 3 个类而不是 2 个类的预测?

machine-learning - 如何在 python 中为 xgboost 编写自定义评估指标?

python - Python中Elasticsearch相对时间范围查询

python - 恒定时间随机选择和删除

python - 在python列表列表中转换稀疏矩阵

python - Keras:使用 model.fit() 洗牌数据不会发生变化,但 sklearn.train_test_split() 会发生变化

image-processing - 将图像转换为时间序列

python - Eclipse 无法获取虚拟环境中解释器的信息