我有一組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