有多少文字可以处理scikit-learn?

时间:2014-09-23 01:29:22

标签: python machine-learning nlp scikit-learn

我有一个情绪分析任务,我需要指定scikit可以处理多少数据(在我的例子中是文本)。我有一个2500个意见的语料库都准备好标记。我现在认为这是一个小型语料库,但我的论文顾问要求我专门论证scikit学习可以处理多少数据。我的顾问对python / scikit有疑问,她想知道有多少文本参数,特征和相关内容可以处理scikit-learn。

3 个答案:

答案 0 :(得分:1)

以下是我机器上scikit-learn的文档分类示例的一些时间安排(Python 2.7,NumPy 1.8.2,SciPy 0.13.3,scikit-learn 0.15.2,使用电池供电的Intel Core i7-3540M笔记本电脑)。数据集是二十个新闻组;我已经把输出调整了很多。

$ python examples/document_classification_20newsgroups.py --all_categories
data loaded
11314 documents - 22.055MB (training set)
7532 documents - 13.801MB (test set)
20 categories

Extracting features from the training dataset using a sparse vectorizer
done in 2.849053s at 7.741MB/s
n_samples: 11314, n_features: 129792

Extracting features from the test dataset using the same vectorizer
done in 1.526641s at 9.040MB/s
n_samples: 7532, n_features: 129792

________________________________________________________________________________
Training: 
LinearSVC(C=1.0, class_weight=None, dual=False, fit_intercept=True,
     intercept_scaling=1, loss='l2', multi_class='ovr', penalty='l2',
     random_state=None, tol=0.001, verbose=0)
train time: 5.274s
test time:  0.033s
f1-score:   0.860
dimensionality: 129792
density: 1.000000

________________________________________________________________________________
Training: 
SGDClassifier(alpha=0.0001, class_weight=None, epsilon=0.1, eta0=0.0,
       fit_intercept=True, l1_ratio=0.15, learning_rate='optimal',
       loss='hinge', n_iter=50, n_jobs=1, penalty='l2', power_t=0.5,
       random_state=None, shuffle=False, verbose=0, warm_start=False)
train time: 3.521s
test time:  0.038s
f1-score:   0.857
dimensionality: 129792
density: 0.390184

________________________________________________________________________________
Training: 
MultinomialNB(alpha=0.01, class_prior=None, fit_prior=True)
train time: 0.161s
test time:  0.036s
f1-score:   0.836
dimensionality: 129792
density: 1.000000


________________________________________________________________________________
Training: 
BernoulliNB(alpha=0.01, binarize=0.0, class_prior=None, fit_prior=True)
train time: 0.167s
test time:  0.153s
f1-score:   0.761
dimensionality: 129792
density: 1.000000

未显示数据集加载的计时,但它不会超过半秒;输入是包含文本的zipfile。 “提取功能”包括标记化和停用词过滤。总而言之,我可以在5秒内加载18.8k文档并在11k上训练一个朴素的贝叶斯分类器,或者在10秒内训练一个SVM。这意味着解决20×130k的尺寸优化问题。

我建议你在你的机器上重新运行这个例子,因为实际的时间取决于很多因素,包括磁盘的速度。

[免责声明:我是scikit-learn开发人员之一。]

答案 1 :(得分:0)

如果您在尝试加载的数据量方面遇到一些问题,

This Scikit page可能会提供一些答案。

正如您关于数据大小concerning Weka的其他问题中所述,我同意ealdent您的数据集看起来很小(除非您有特别多的功能)并且加载数据集不应该是一个问题这个大小的记忆。

希望这有帮助!

答案 2 :(得分:0)

问题不在于scikit-learn,而在于您想要使用哪种算法。大多数scikit-learn的内部结构都是在CFortran中实现的,所以它非常有效。例如,scikit-learn随机森林是最快的(see page 116 in this link)。为了将文本转换为向量,我已经成功地在几秒钟内在桌面上运行的50k文档的数据集和几GB的内存。如果您愿意使用散列矢量化器(以换取无法解释特征词汇表),您可以做得更好。在分类器方面,朴素贝叶斯花费O(NVC)时间,其中N是文档数量,V是要素数量,C是等级数量。非线性SVM可以为您提供更好的结果,但会使更长。如果你开始在密集的numpy矩阵中存储东西(而不是稀疏的scipy矩阵),你更有可能耗尽内存。