[英]scikit-learn: Classification timing correct?
嗨,我正在将推文分为7个班级。 我有大约250,000条培训推文和另外250.000条不同的测试推文。 我的代码可以在下面找到。 training.pkl是培训推文,testing.pkl测试推文。 你可以看到我也有相应的标签。
当我执行我的代码时,我发现将测试集(原始)转换为特征空间需要14.9649999142秒。 我还测量了在测试集中对所有推文进行分类所需的时间,即0.131999969482秒。
虽然这对我来说似乎不太可能,这个框架能够在0.131999969482秒内对250.000条推文进行分类。 我现在的问题是,这是正确的吗?
file = open("training.pkl", 'rb')
training = cPickle.load(file)
file.close()
file = open("testing.pkl", 'rb')
testing = cPickle.load(file)
file.close()
file = open("ground_truth_testing.pkl", 'rb')
ground_truth_testing = cPickle.load(file)
file.close()
file = open("ground_truth_training.pkl", 'rb')
ground_truth_training = cPickle.load(file)
file.close()
print 'data loaded'
tweetsTestArray = np.array(testing)
tweetsTrainingArray = np.array(training)
y_train = np.array(ground_truth_training)
# Transform dataset to a design matrix with TFIDF and 1,2 gram
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, ngram_range=(1, 2))
X_train = vectorizer.fit_transform(tweetsTrainingArray)
print "n_samples: %d, n_features: %d" % X_train.shape
print 'COUNT'
_t0 = time.time()
X_test = vectorizer.transform(tweetsTestArray)
print "n_samples: %d, n_features: %d" % X_test.shape
_t1 = time.time()
print _t1 - _t0
print 'STOP'
# TRAINING & TESTING
print 'SUPERVISED'
print '----------------------------------------------------------'
print
print 'SGD'
#Initialize Stochastic Gradient Decent
sgd = linear_model.SGDClassifier(loss='modified_huber',alpha = 0.00003, n_iter = 25)
#Train
sgd.fit(X_train, ground_truth_training)
#Predict
print "START COUNT"
_t2 = time.time()
target_sgd = sgd.predict(X_test)
_t3 = time.time()
print _t3 -_t2
print "END COUNT"
# Print report
report_sgd = classification_report(ground_truth_testing, target_sgd)
print report_sgd
print
X_train打印
<248892x213162 sparse matrix of type '<type 'numpy.float64'>'
with 4346880 stored elements in Compressed Sparse Row format>
X_train printen
<249993x213162 sparse matrix of type '<type 'numpy.float64'>'
with 4205309 stored elements in Compressed Sparse Row format>
提取的X_train
和X_test
稀疏矩阵的非零特征的形状和数量是多少? 它们是否与您语料库中的单词数量近似相关?
预计分类比线性模型的特征提取快得多。 它只是计算一个点积,因此与非零的数量直接成线性关系(即近似于测试集中的单词数)。
编辑 :获取稀疏矩阵X_train
和X_test
内容的统计信息:
>>> print repr(X_train)
>>> print repr(X_test)
编辑2 :你的数字看起来不错。 数值特征的线性模型预测确实比特征提取快得多:
>>> from sklearn.datasets import fetch_20newsgroups
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> twenty = fetch_20newsgroups()
>>> %time X = TfidfVectorizer().fit_transform(twenty.data)
CPU times: user 10.74 s, sys: 0.32 s, total: 11.06 s
Wall time: 11.04 s
>>> X
<11314x56436 sparse matrix of type '<type 'numpy.float64'>'
with 1713894 stored elements in Compressed Sparse Row format>
>>> from sklearn.linear_model import SGDClassifier
>>> %time clf = SGDClassifier().fit(X, twenty.target)
CPU times: user 0.50 s, sys: 0.01 s, total: 0.51 s
Wall time: 0.51 s
>>> %time clf.predict(X)
CPU times: user 0.10 s, sys: 0.00 s, total: 0.11 s
Wall time: 0.11 s
array([7, 4, 4, ..., 3, 1, 8])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.