2012-06-21 6 views
5

Я использую scikit-learn для кластера текстовых документов. Я использую классы CountVectorizer, TfidfTransformer и MiniBatchKMeans, чтобы помочь мне в этом. Все текстовые документы добавляются в систему все время, а это значит, что мне нужно использовать классы выше, чтобы преобразовать текст и предсказать кластер. Мой вопрос: как хранить данные на диске? Должен ли я просто рассортировать объекты векторизатора, трансформатора и kmeans? Должен ли я просто сохранять данные? Если да, то каким образом я могу добавить его обратно в объекты векторизатора, трансформатора и kmeans?Сохраняемые данные в sklearn

Любая помощь будет принята с благодарностью

ответ

6

Это зависит от того, что вы хотите сделать.

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

Если вы хотите создать кластеризацию с новыми данными, вам может потребоваться переустановить весь конвейер, используя объединение новых данных + старые данные, чтобы лексика векторизатора могла создавать новые функции (размеры) для новых слов, и пусть алгоритм кластеризации найдет кластерные центры, которые лучше соответствуют структуре полного набора данных.

Обратите внимание, что в будущем мы предоставим векторизаторы хеширования (см., Например, этот pull request on hashing transformers как первый строительный блок), поэтому хранение словаря больше не понадобится (но вы потеряете способность исследовать «смысл» «размерности функции»).

Что касается травления моделей против использования своего собственного представления для их параметров ответил я эту часть в вашем предыдущем вопросе здесь: Persist Tf-Idf data

4

Да, я думаю, что общий ответ с ск-узнать это pickle и молиться.

Мне кажется, что это супер хрупкий, по сравнению с документированным форматом сериализации, который не зависит от деталей реализации. Но, может быть, они это знают и не будут делать обратно несовместимые изменения в своих классах?

+0

Мы знаем, насколько хрупким это, и нет, мы в настоящее время не гарантируют 100% обратную совместимость (хотя каждое несовместимое изменение должно обсуждаться на ML, и совместимость обычно сохраняется для нескольких выпусков). Лучшее решение для сериализации еще не найдено. –

+0

На работе в Google буферы протокола играют роль простого в использовании и перекрестного формата сериализации языка. В свое время хобби я использовал Thrift, который тоже неплохо работает. –

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