У меня есть образец из примерно 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
, но я не уверен, что включить третий аргумент, поскольку класс - это то, что я пытаюсь предсказать.
Спасибо за вашу помощь заранее!
Спасибо, @lejlot! Я все еще немного смущен относительно cross_val_predict. Что именно возвращается? Кроме того, допустим, я запускал «cross_val_predict» и «cross_val_score» для SVM и наивного классификатора Bayes. Должен ли я использовать вывод этих функций, допустим, между классификаторами? – Eunice
cross_val_predict внутренне обучает столько моделей, сколько вы разделите (10 в вашем случае), каждый по разному разбиению данных. После этого он использует каждую модель для прогнозирования невидимых данных и объединяет все результаты для создания списка прогнозов. Это в основном инструмент * отладки */* analysis *, а не что-то для обучения. Для вашего случая использования вы ** не должны ** использовать cross_val_predict. Однако вы можете использовать cross_val_score для выбора между моделями (например, SVM или NB). – lejlot
Это имеет смысл благодаря @lejlot !! Как же вы предотвращаете переобучение для моделей классификации текста? – Eunice