我有一个情绪分析任务,我需要指定scikit可以处理多少数据(在我的例子中是文本)。我有一个2500个意见的语料库都准备好标记。我现在认为这是一个小型语料库,但我的论文顾问要求我专门论证scikit学习可以处理多少数据。我的顾问对python / scikit有疑问,她想知道有多少文本参数,特征和相关内容可以处理scikit-learn。
答案 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
的内部结构都是在C
或Fortran
中实现的,所以它非常有效。例如,scikit-learn
随机森林是最快的(see page 116 in this link)。为了将文本转换为向量,我已经成功地在几秒钟内在桌面上运行的50k文档的数据集和几GB的内存。如果您愿意使用散列矢量化器(以换取无法解释特征词汇表),您可以做得更好。在分类器方面,朴素贝叶斯花费O(NVC)
时间,其中N
是文档数量,V
是要素数量,C
是等级数量。非线性SVM可以为您提供更好的结果,但会使多更长。如果你开始在密集的numpy矩阵中存储东西(而不是稀疏的scipy矩阵),你更有可能耗尽内存。