我有一组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)
我只在Java中使用RF,但似乎您需要为每个文档制作一个“标准”向量表示形式。在Java中,可以首先将其表示为SortedMap,其中字符串键是该功能,双val是该文档中术语的频率。如果你像这样矢量化所有东西,那么将每个文档表示为一个标准的double []数组,那么该算法就应该这样做。换句话说,DOC1看起来像a,b和DOC2看起来像a,c,后面的规范/向量化doc 1应该变成a = 1,b = 1,c = 0,而DOC2会变成a = 1,b = 0, C = 1。 –
markg
来自[版本0.16.1的doc](http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.fit)似乎是'sklearn。 ensemble.RandomForestClassifier。fit'现在接受稀疏矩阵作为输入:'参数:\t X:shape = [n_samples,n_features]的数组状或稀疏矩阵' – jul