用Scikit-Learn进行单元分析

2024-04-26 14:38:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对Sci-Kit-Learn中的unigrams做一些分析。我创建了svmlight格式的文件并尝试运行MultinomialNB() KNeighborsClassifier() and SVC()。我们第一次尝试使用unigrams,我得到了一个X训练维度的错误,大概是因为给定例子中包含的unigram是在训练中出现的unigram。我尝试创建svmlight格式的训练文件,其中包括语料库中每一个看到的unigram的占位符,甚至那些不在给定例子中的。在

问题是训练文件从3MB膨胀到300MB。这导致sklearn加载文件时出现内存错误。有没有一种方法可以避免维度不匹配或内存溢出。在

X_train, y_train= load_svmlight_file(trainFile)
x_test, y_test = load_svmlight_file(testFile)
try:
    clf = MultinomialNB()
    clf.fit(X_train, y_train)
    preds = clf.predict(x_test)
    print('Input data:  ' + trainFile.split('.')[0])
    print('naive_bayes')
    print('accuracy: ' + str(accuracy_score(y_test, preds)))
    if 1 in preds:
        print('precision: ' + str(precision_score(y_test, preds)))
        print('recall: ' + str(recall_score(y_test, preds)))
except Exception as inst:
    print 'fail in NB  ' + 'Input data:  ' + trainFile.split('.')[0]
    print str(inst)
    pass

2828个测试示例和1212个测试示例,包含18000个不同的unigram

EDIT我试图使用sklearn CountVectorizer,但仍然存在内存问题。这是最好的办法吗?在

^{pr2}$

Tags: 文件内存test格式trainscoreprintclf
1条回答
网友
1楼 · 发布于 2024-04-26 14:38:15

尝试使用scikitlearn的^{},它将为您对原始文本进行特征提取。最重要的是,对一组训练示例调用的方法fit_transform将自动进行单词包单字转换,在这里它跟踪在训练语料库中找到的所有{}唯一单词,并将每个文档转换为一个长度为n的数组,其特征可以是离散字数或二进制存在特征(取决于binary选项)。CountVectorizer最棒的地方在于它以numpy稀疏矩阵格式存储数据,这使得它非常节省内存,并且应该能够解决任何内存问题。在

然后您可以在以后的测试示例中调用transform,它将像正常情况一样进行转换。在

这也有助于解决任何维度的问题,因为CountVectorizer的工作就是规范化所有的东西。具体使用信息如下:

http://scikit-learn.org/stable/modules/feature_extraction.html#common-vectorizer-usage

这样做的另一个好处是,您可以使用^{}将这个向量器与分类器结合起来,使拟合和测试更加方便。在

相关问题 更多 >