我有一套4k文字文件。
他们属于10个不同的类别。
我正在尝试查看随机森林方法如何执行分类。
问题是我的特征提取类提取了200k个特征。(单词,字母组合,搭配等的组合)
这是非常稀疏的数据,而sklearn中的随机森林实现不适用于稀疏数据输入。
问:我在这里有什么选择?减少功能数量?如何 ?
问:那里有任何与稀疏数组一起工作的随机森林的实现吗?
我的相关代码如下:
import logging
import numpy as np
from optparse import OptionParser
import sys
from time import time
#import pylab as pl
from sklearn.datasets import load_files
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.ensemble import RandomForestClassifier
from special_analyzer import *
data_train = load_files(RAW_DATA_SRC_TR)
data_test = load_files(RAW_DATA_SRC_TS)
# split a training set and a test set
y_train, y_test = data_train.target, data_test.target
vectorizer = CountVectorizer( analyzer=SpecialAnalyzer()) # SpecialAnalyzer is my class extracting features from text
X_train = vectorizer.fit_transform(data_train.data)
rf = RandomForestClassifier(max_depth=10,max_features=10)
rf.fit(X_train,y_train)
最佳答案
几个选项:通过将max_features=10000
传递给CountVectorizer
,仅采用最流行的10000个功能,然后使用to array方法将结果转换为密集的numpy数组:
X_train_array = X_train.toarray()
否则,使用以下方法将尺寸减小到100或300个尺寸:
pca = TruncatedSVD(n_components=300)
X_reduced_train = pca.fit_transform(X_train)
但是,以我的经验,对于原始的稀疏数据(可能使用TF-IDF归一化),我无法使RF的工作效果比经过良好调整的线性模型(例如具有网格搜索正则化参数的逻辑回归)更好。
关于python - 使用随机森林对文本文档进行分类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21689141/