2015-08-26 2 views
0

Я использую sklearn и поддерживает векторные машины для классификации документов. Категории, которые я ищу, чтобы разместить документы, - это (конечно, без курса), где курс представляет собой текст веб-страницы, состоящий из классов, предлагаемых в колледже, и без курса.Классификация категорий двух категорий с использованием sklearn

Этот класс, который я построил, чтобы сделать это сродни этому один:

import numpy as np 
from sklearn.linear_model import SGDClassifier 
from sklearn.pipeline import Pipeline 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.grid_search import GridSearchCV 
from sklearn import metrics 

class TestSVG(object): 
    def __init__(self): 

     self.text_clf = Pipeline([('vect', CountVectorizer()), 
            ('tfidf', TfidfTransformer()), 
            ('clf', SGDClassifier(loss='hinge', alpha=1e-3, random_state=42)), 
           ]) 

     self.grid_params = {'vect__ngram_range' : [(1, 1), (1, 2), (1, 3)], 
          'tfidf__use_idf': (True, False), 
          'clf__alpha': (1e-2, 1e-3), 
          } 

     self.gs_clf = GridSearchCV(self.text_clf, self.grid_params, n_jobs=-1) 
     self.training_target = [] 
     self.training_data = [] 
     self.testing_data = [] 
     self.testing_target = [] 

     self.classifier = None 

    def train(self, training_data, training_target): 
     self.training_data = training_data 
     self.training_target = training_target 
     self.classifier = self.gs_clf.fit(self.training_data, self.training_target) 

    def predict(self, text):  
     if isinstance(text, basestring): 
      text = [text]  
     elif not isinstance(text, list): 
      raise ValueError("Input for prediction must be text of a list") 

     if self.classifier is None: 
      raise ValueError("Classifier must be trained to make predictions.") 

     return self.classifier.predict(text) 

    def test(self, testing_data, testing_target): 
     self.testing_data = testing_data 
     self.testing_target = testing_target 

     predicted = self.classifier.predict(self.testing_data) 
     return np.mean(predicted == testing_target) 

Чтобы собрать обучающие данные курсы, я написал несколько классов webscraping, что скрести текст для набора веб-страниц которого базовые URL-адреса, которые я жестко запрограммировал.

Я застрял в этом пункте. Моя первоначальная стратегия заключалась в том, чтобы ссылаться на страницы описания курса как на документы без курса. Однако, поскольку я классифицирую документы как курсы, а затем в основном «что-то еще», я не уверен, должен ли я использовать связанный контент или полностью несвязанный контент, такой как набор предопределенных страниц википедии для документов, не относящихся к курсу.

Причина, по которой я планировал использовать описания курса, заключается в том, что мой окончательный план - использовать scrapy для создания графика веб-ссылок. Затем я могу пересечь график, очистить текст и найти страницы с перечислением неизвестных страниц, используя машину векторной поддержки. Мое беспокойство заключается в том, что я получаю ложные срабатывания, если svm не был обучен таким образом.

Любое понимание было бы весьма полезным.

ответ

0

Лучше всего, чтобы данные обучения были как можно больше похожи на данные тестирования (или данные, которые вы будете прогнозировать). IMHO данные для не-курса должны состоять из как слегка связанных документов (например, журнальных документов и абсолютно несвязанных документов (спортивные новости).

+0

Предположим, что я должен был использовать более надежный набор категорий, включая связанные документы, такие как академические журналы и несвязанный текст, например, новости. Если бы я проигнорировал использование страниц описания курса для категории «без курса», вместо того чтобы просто использовать страницы университетов для списков курсов для категории «курс», у меня была бы достаточная стратегия для классификации этих документы, даже если я просматриваю и проверяю весь текст в данном университетском веб-домене для списков курсов? – jonnywalkerr

+0

Да, это хорошая стратегия. Вы будете обучать свою модель, чтобы классифицировать все страницы университетского домена как «курс» и «не- -курс" – shanmuga

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