0

У меня есть образец из примерно 10 000 твитов, которые я хочу классифицировать в категории «релевантные» и «не имеющие отношения к делу». Я использую Python scikit-learn для этой модели. Я вручную закодировал 1000 твитов как «релевантных» или «не имеющих значения». Затем я запустил SVM-модель, используя 80% данных с ручным кодированием в качестве данных обучения, а остальные - в качестве тестовых данных. Я получил хорошие результаты (точность предсказания ~ 0.90), но чтобы избежать переобучения, я решил использовать кросс-валидацию для всех 1000 твитов, закодированных вручную.Классификация новых документов после cross_val_predict

Ниже приведен мой код после получения матрицы tf-idf для твитов в моем примере. «target» - это массив, указывающий, был ли твит обозначен как «релевантный» или «не релевантный».

from sklearn.linear_model import SGDClassifier 
from sklearn.model_selection import cross_val_score 
from sklearn.model_selection import cross_val_predict 

clf = SGDClassifier() 
scores = cross_val_score(clf, X_tfidf, target, cv=10) 
predicted = cross_val_predict(clf, X_tfidf, target, cv=10) 

С помощью этого кода я был в состоянии получить предсказание о том, что классах в 1000 твитов принадлежали, и я мог бы сравнить, что против моего ручного кодирования.

Я застрял в том, что делать дальше, чтобы использовать мою модель для классификации других ~ 9000 твитов, которые я не вручную кодировал. Я думал снова использовать cross_val_predict, но я не уверен, что включить третий аргумент, поскольку класс - это то, что я пытаюсь предсказать.

Спасибо за вашу помощь заранее!

ответ

4

cross_val_predict is не метод фактически получить прогнозы от модели. Кросс-валидация - это метод выбора/оценки модели, нет до поезд модель. cross_val_predict - очень специфическая функция (которая дает вам прогнозы многих моделей, прошедших обучение во время процедуры перекрестной проверки). Для фактического построения модели yu должны использовать для установки модели для обучения вашей модели и предскажите, чтобы получить прогноз. Здесь нет перекрестной проверки - как было сказано ранее - это для выбора модели (для выбора вашего классификатора, гиперпараметров и т. Д.), А не для обучения реальной модели.

+0

Спасибо, @lejlot! Я все еще немного смущен относительно cross_val_predict. Что именно возвращается? Кроме того, допустим, я запускал «cross_val_predict» и «cross_val_score» для SVM и наивного классификатора Bayes. Должен ли я использовать вывод этих функций, допустим, между классификаторами? – Eunice

+0

cross_val_predict внутренне обучает столько моделей, сколько вы разделите (10 в вашем случае), каждый по разному разбиению данных. После этого он использует каждую модель для прогнозирования невидимых данных и объединяет все результаты для создания списка прогнозов. Это в основном инструмент * отладки */* analysis *, а не что-то для обучения. Для вашего случая использования вы ** не должны ** использовать cross_val_predict. Однако вы можете использовать cross_val_score для выбора между моделями (например, SVM или NB). – lejlot

+0

Это имеет смысл благодаря @lejlot !! Как же вы предотвращаете переобучение для моделей классификации текста? – Eunice