2016-05-06 2 views
2

Я пробовал себя в 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, но без увеличения точности.

Кто-нибудь может сказать мне, если что-то не так, я делаю или что нужно сделать для улучшения оценки модели.

Любая помощь будет высоко оценена.

Спасибо!

ответ

1

1) рассмотрите возможность использования GridSearchCv для настройки параметров. http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html

2) рассмотрите конструкторскую функцию, чтобы объединить существующие функции в новые функции. НАПРИМЕР. используйте функции полиномов, функции выбора и инструменты для объединения компонентов, предоставленные в sklearn.

3) попробуйте разные модели. Не все модели работают над всеми проблемами. Попробуйте использовать ансамбль более простых моделей и какую-то функцию решения, чтобы вывести результаты этих моделей и сделать прогноз. Некоторые из них находятся в модуле enesemble, но вы можете использовать классификаторы голосования, чтобы сделать свой собственный.

но, безусловно, самое лучшее и самое важное, чтобы посмотреть данные. Найдите примеры того, где классификатор плохо работает. Почему это произошло плохо? Можете ли вы классифицировать его, прочитав его (т. Е. Разумно ли ожидать, что алго будет классифицировать этот текст?). Если его можно классифицировать, то что пропустит модель.

Все это поможет определить, что делать дальше.

+0

GridSearchCV не реализует метод partial_fit, который я использовал, потому что мой набор данных обучения слишком велик. Для выбора функции я предварительно обработал свои данные обучения, удалив все несущественные термины, а также из-за каждого слова. Можете ли вы конкретно указать, что заставляет точность моей модели застревать на ~ 58%? Благодаря! –

+1

Нет, я не могу, потому что это может быть одна из тысячи причин. Откуда вы знаете, что 58% не является максимально достижимым для вашей проблемы? Что было результатом моего последнего абзаца? Я не могу решить проблему для вас, вы должны сделать это сами. – Chris

Смежные вопросы