Python - использование gridsearchcv с nltk

Я немного не уверен, как я могу применить GridSearchCV SKLearn к случайному лесу, который я использую с NLTK. Как использовать GridSearchCV обычно обсуждается здесь, однако мои данные отформатированы иначе, чем стандартное разделение x и y. Вот мой код:

import nltk
import numpy as np
from nltk.classify.scikitlearn import SklearnClassifier
from nltk.corpus.reader import CategorizedPlaintextCorpusReader
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC


reader_train = CategorizedPlaintextCorpusReader('C:/Users/User/Documents/Sentiment/machine_learning/amazon/amazon/', r'.*\.txt', cat_pattern=r'(\w+)/*', encoding='latin1')

documents_train = [ (list(reader_train.words(fileid)), category)
                 for category in reader_train.categories()
                 for fileid in reader_train.fileids(category) ]

all_words = []

for w in reader_train.words():
    all_words.append(w.lower())

all_words = nltk.FreqDist(all_words)

word_features = list(all_words.keys())[:3500]

def find_features(documents):
    words = set(documents)
    features = {}
    for w in word_features:
        features[w] = (w in words)

return features

featuresets_train = [(find_features(rev), category) for (rev, category) in documents_train]

np.random.shuffle(featuresets_train)

training_set = featuresets_train[:1600]
testing_set = featuresets_train[:400]

RandFor = SklearnClassifier(RandomForestClassifier())
RandFor.train(training_set)
print("RandFor accuracy:", (nltk.classify.accuracy(RandFor, testing_set)) *100)

Этот код вместо обычного разделения x и y создает список кортежей, каждый из которых имеет следующий формат:

({'i': True, 'am': False, 'conflicted': False ... 'about': False}, neg)

Есть ли способ применить GridSearchCV к данным в этом формате?

Вы оборачиваете уже идеальную оценку scikit learn (в данном случае RandomForestClassifier) в совместимую с nltk. Вам нужно работать с RandomForestClassifier и GridSearchCV?

Vivek Kumar 10.08.2018 16:05

GridSearchCV не является необходимостью, я буду рад попробовать другие алгоритмы оптимизации. Однако это должен быть RandomForest.

Laurie 10.08.2018 16:09
0
2
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы преобразовать training_set в форму, пригодную для использования в scikit, вам просто нужно сделать

from sklearn.feature_extraction import DictVectorizer
vectorizer = DictVectorizer()

X_train, y_train = list(zip(*training_set))
X_train = vectorizer.fit_transform(X_train)

X_test, y_test = list(zip(*testing_set))
X_test = vectorizer.transform(X_test)

После этого вы можете легко вызвать

clf = RandomForestClassifier()
clf.fit(X_train, y_train)

accuracy = clf.score(X_test, y_test)
print("RandFor accuracy:", (accuracy) * 100)

Спасибо, приятель, очень признателен и, кажется, работает очень хорошо! Хорошего дня.

Laurie 10.08.2018 16:16

Другие вопросы по теме