我在做文本分类。我有大约32K(垃圾邮件和火腿)文件。在
import numpy as np
import pandas as pd
import sklearn.datasets as dataset
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import BernoulliNB
from sklearn.preprocessing import LabelEncoder
import re
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.linear_model import SGDClassifier
from BeautifulSoup import BeautifulSoup
from sklearn.feature_extraction import text
from sklearn import cross_validation
from sklearn import svm
from sklearn.grid_search import GridSearchCV
from sklearn.feature_selection import VarianceThreshold
# Now load files from spam and ham
data = dataset.load_files("/home/voila/Downloads/enron1/")
xData = data.data
yData = data.target
print data.target_names
countVector = CountVectorizer(decode_error='ignore' , stop_words = 'english')
countmatrix = countVector.fit_transform(xData)
countermatrix
将是矩阵,其中countermatrix[i][j]
表示文档中j
的字数i
现在我想删除80%以上文档中出现countermatrix[i][j] > 1
(意味着word太常见)的所有特性。在
我该怎么做?在
谢谢
您可以将max_df设置为小于1的值,请参见docs。在
我想你可以按列检索矩阵:
试试这个:
它首先计算一个布尔矩阵,如果
countmatrix > 1
为真,并计算其列平均值。如果平均值小于0.8(80%),则相应的列索引由nonzero()
返回。在因此,
^{pr2}$goodwords
将包含不太频繁的单词的所有索引。现在你可以简单地减少矩阵相关问题 更多 >
编程相关推荐