У меня есть набор текстовых документов 4k. Они относятся к 10 различным классам. Я пытаюсь увидеть, как случайный метод леса выполняет классификацию. Проблема заключается в том, что мои функции извлечения экстрактов извлекают 200 тыс. Функций (комбинация слов, биграмм, коллокаций и т. Д.) Это очень редкие данные, а случайная реализация леса в 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)
Я использовал RF только на Java, но, похоже, вам нужно сделать «нормированное» векторное представление каждого документа. В Java это может быть представлено сначала как SortedMap, где строковый ключ является признаком, а double val - это частота слова в этом документе. если вы вектурируете все, как это, тогда представляете каждый документ как стандартный двойной массив [], алгоритм должен это делать. Другими словами, DOC1 выглядит как a, b, а DOC2 выглядит как a, c, после нормального/vectoization doc 1 должен стать a = 1, b = 1, c = 0 и DOC2 будет a = 1, b = 0, с = 1. –
markg
Из [doc версии 0.16.1] (http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.fit) кажется, что 'sklearn. ensemble.RandomForestClassifier.fit' теперь принимают разреженную матрицу в качестве входных данных: 'Параметры: \t X: массивная или разреженная матрица формы = [n_samples, n_features]' – jul