Я пробовал себя в Machine Learning и использовал для этого библиотеку Scikit на основе python.Scikit SGD-классификатор с точностью Хеширования векторизатора застрял на 58%
Я хочу решить проблему «Классификация», в которой фрагмент текста (скажем, слова 1k-2k) классифицируется в одну или несколько категорий. Для этого я уже некоторое время изучаю scikit.
Как быть мои данные в диапазоне 2-3 миллиона, так что я использовал SGDClassfier с HashingVectorizer с целью использования методики обучения partial_fit, кодируются, как показано ниже:
import pandas as pd
from sklearn.linear_model import SGDClassifier
from sklearn.feature_extraction.text import HashingVectorizer
import numpy as np
from sklearn.externals import joblib
import copy
data = pd.read_csv(
open('train_shuffled.csv'), error_bad_lines=False)
data_all = copy.deepcopy(data)
target = data['category']
del data['category']
cls = np.unique(target)
model = SGDClassifier(loss='log', verbose=1)
vect = HashingVectorizer(stop_words='english', strip_accents='unicode', analyzer='word')
loop = len(target)/100
for passes in range(0, 5):
count, r = 0, 0
print("Pass " + str(passes + 1))
for q in range(0, loop):
d = nltk.word_tokenize(data['content'][r:r + 100])
d = vect.fit_transform(d)
t = np.array(target[r:r + 100])
model.partial_fit(d, t, cls)
r = r + 100
data = copy.deepcopy(data_all)
data = data.iloc[np.random.permutation(len(data))]
data = data.reset_index(drop=True)
target = data['category']
del data['category']
print(model)
joblib.dump(model, 'Model.pkl')
joblib.dump(vect, 'Vectorizer.pkl')
При переходе процесса обучения, я прочитал в ответ здесь на стек, который вручную рандомизирует данные обучения на каждом этапе итерации в лучшую модель.
Использование классификаторов и векторизаторов с параметрами по умолчанию, я получил оценку точности ~ 58,4%. С тех пор я пытаюсь играть с разными параметрами для Vectorizer и Classifier, но без увеличения точности.
Кто-нибудь может сказать мне, если что-то не так, я делаю или что нужно сделать для улучшения оценки модели.
Любая помощь будет высоко оценена.
Спасибо!
GridSearchCV не реализует метод partial_fit, который я использовал, потому что мой набор данных обучения слишком велик. Для выбора функции я предварительно обработал свои данные обучения, удалив все несущественные термины, а также из-за каждого слова. Можете ли вы конкретно указать, что заставляет точность моей модели застревать на ~ 58%? Благодаря! –
Нет, я не могу, потому что это может быть одна из тысячи причин. Откуда вы знаете, что 58% не является максимально достижимым для вашей проблемы? Что было результатом моего последнего абзаца? Я не могу решить проблему для вас, вы должны сделать это сами. – Chris