Cri*_*a23 13 classification machine-learning random-forest scikit-learn text-classification
我正在努力使用Scikit学习Python中的随机森林.我的问题是我用它进行文本分类(3个类 - 正/负/中性),我提取的特征主要是单词/ unigrams,所以我需要将它们转换为数字特征.我找到了一种方法做它DictVectorizer的fit_transform:
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import classification_report
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False)
rf = RandomForestClassifier(n_estimators = 100)
trainFeatures1 = vec.fit_transform(trainFeatures)
# Fit the training data to the training output and create the decision trees
rf = rf.fit(trainFeatures1.toarray(), LabelEncoder().fit_transform(trainLabels))
testFeatures1 = vec.fit_transform(testFeatures)
# Take the same decision trees and run on the test data
Output = rf.score(testFeatures1.toarray(), LabelEncoder().fit_transform(testLabels))
print "accuracy: " + str(Output)
Run Code Online (Sandbox Code Playgroud)
我的问题是该fit_transform方法正在处理火车数据集,其中包含大约8000个实例,但是当我尝试将我的测试集转换为数字特征时,也就是大约80000个实例,我得到一个内存错误,说:
testFeatures1 = vec.fit_transform(testFeatures)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\dict_vectorizer.py", line 143, in fit_transform
return self.transform(X)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\dict_vectorizer.py", line 251, in transform
Xa = np.zeros((len(X), len(vocab)), dtype=dtype)
MemoryError
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种情况,是否有任何解决方法?非常感谢!
lej*_*lot 13
您不应该fit_transform对您的测试数据进行操作,而只是transform.否则,您将获得与训练期间使用的矢量化不同的矢量化.
对于内存问题,我建议TfIdfVectorizer,它有许多减少维度的选项(通过删除罕见的unigrams等).
UPDATE
如果唯一的问题是拟合测试数据,只需将其拆分为小块.而不是像
x=vect.transform(test)
eval(x)
Run Code Online (Sandbox Code Playgroud)
你可以做
K=10
for i in range(K):
size=len(test)/K
x=vect.transform(test[ i*size : (i+1)*size ])
eval(x)
Run Code Online (Sandbox Code Playgroud)
并记录结果/统计数据并在之后进行分析.
特别是
predictions = []
K=10
for i in range(K):
size=len(test)/K
x=vect.transform(test[ i*size : (i+1)*size ])
predictions += rf.predict(x) # assuming it retuns a list of labels, otherwise - convert it to list
print accuracy_score( predictions, true_labels )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9204 次 |
| 最近记录: |