Я использую 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 не был обучен таким образом.
Любое понимание было бы весьма полезным.
Предположим, что я должен был использовать более надежный набор категорий, включая связанные документы, такие как академические журналы и несвязанный текст, например, новости. Если бы я проигнорировал использование страниц описания курса для категории «без курса», вместо того чтобы просто использовать страницы университетов для списков курсов для категории «курс», у меня была бы достаточная стратегия для классификации этих документы, даже если я просматриваю и проверяю весь текст в данном университетском веб-домене для списков курсов? – jonnywalkerr
Да, это хорошая стратегия. Вы будете обучать свою модель, чтобы классифицировать все страницы университетского домена как «курс» и «не- -курс" – shanmuga