2014-11-23 3 views
3

Я новичок в кластеризацию и нужен несколько советов о том, как подойти к этой проблеме ...кластеризация в Python с документами

Скажем, у меня есть тысячи предложений, но немногие из образца может быть:

  • Опыт в области сетевых технологий Опыт
  • СИЛЬНЫЕ продаж
  • Сильные сетевые навыки Preferred
  • продаж требуются специальные знания
  • Шоколад Яблоки
  • Работа имеют решающее значение для сетей майоры

Для того, чтобы объединить эти лучший способ, какой подход мог бы я взять?

Я искал k-means с вектором вектора, но когда у меня есть тысячи предложений, которые могут содержать разные слова, будет ли это эффективным создание вектора такого размера, а затем прохождение каждого из них, чтобы увидеть, какое предложение имеет эти слова?

Какие еще существуют подходы, которые я не нашел?

То, что я сделал до сих пор:

  • импортировали предложения из CSV в DICT С ID: Предложению
  • Я извлекая стоп-слова из каждого предложения
  • Я тогда подсчет всех слов по отдельности построить главный вектор и подсчитать, сколько раз появляется слово.
+0

Какую цель ставите перед собой? Возможно, кластеризация - это не средство достижения этого. Для чего вы хотите сгруппировать документы? Другие простые методы: [Слайд 15] (http://www.slideshare.net/niccokunzmann/clustering-gruppieren-von-datenpunkten). – User

ответ

6

Здесь есть два связанных (но четких технических вопроса); первый относится к выбору метода кластеризации для этих данных.

Второй вопрос с предикатом относится к модели данных - то есть для каждого предложения в необработанных данных, как преобразовать его в вектор данных, подходящий для ввода в алгоритм кластеризации.

кластеризации Техник

к-средства, вероятно, является наиболее популярным методом кластеризации, но есть много вышестоящих; рассмотрите, как работает k-kmeans: пользователь выбирает из числа данных небольшое количество точек данных (центры кластеров для начальной итерации в алгоритме k-средних, aka centroids). Затем определяется расстояние между каждой точкой данных и набором центроидов, и каждая точка данных, назначенная центроиду, закрывается; то новые центроиды определяются из среднего значения точек данных, присвоенных одному и тому же кластеру. Эти два этапа повторяются до тех пор, пока не будет достигнут какой-либо критерий конвергенции (например, между двумя последовательными итерациями, объединенное движение центроидов падает ниже некоторого порога).

Лучшие методы кластеризации сделать гораздо больше, чем просто переместить центры кластеров вокруг - например, спектральной кластеризация методы вращать и растяжение/сжать данные, чтобы найти одну ось максимальной дисперсии затем определить дополнительные оси ортогональны к оригиналу и друг к другу, т. е. к трансформированному пространству объектов. PCA (анализ главных компонент), LDA (линейный дискриминантный анализ), и kPCA все члены этого класса, определяющей характеристикой которого является то, что, что вычисление пар собственное/собственный вектор для каждой функции в исходные данные или в ковариационной матрице. Scikit-learn имеет модуль для PCA computation.

Модель данных

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

Вот одна общая последовательность методов, чтобы помочь решить эту проблему, которая может быть особенно эффективным учитывая ваши данные: Объединить связанные термины в единый термин с использованием общей последовательности обработки нормализующий, вытекающих и синонимизация.

Это интуитивно понятно: например,

Нормализовать: трансформировать все слова в нижний регистр (строки Python имеют более низкий метод, так

REquired.lower() 

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

Стебель: После того, как вытекающие, требуется, требуют и требует, свернуты в один знак, Requir.

Два из наиболее распространенных стволовых клеток - это портер и стволовые ланкастеры (NLTK, обсуждаемый ниже, имеет оба).

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

Превосходная Python NLP библиотеки, NLTK имеет (по крайней мере) несколько отличных синонимы компиляций или цифровой тезаурус (тезаурусы?), Чтобы помочь вам сделать все три из них, программно.

Например, nltk.corpus.reader.lin это один (только один, есть по крайней мере несколько более синоним-искатели в NLTLK), и это простое в использовании - просто импортировать этот модуль и вызвать синоним, переходящий в перспективе.

Несколько стволовых клеток находятся в NLTK's stem package.

4

Я на самом деле недавно собрал руководство по кластеризации документов в Python. Я бы предложил использовать комбинацию k-средних и скрытого распределения дирихле. Взгляните и дайте мне знать, если я еще могу что-нибудь объяснить: http://brandonrose.org/clustering

+1

Здравствуйте, я недавно видел вашу страницу о кластеризации: почему вы выполняете уменьшение размеров (MDS/PCA) после кластеризации? Во многих других примерах/статьях они всегда выполняют кластеризацию по значительно уменьшенным данным, так как это должно подчеркивать любую возможную «привязку» между документами. – Vektor88

+1

@ Vektor88 Я выполнил кластеризацию данных более высокого размера, а затем использовал MDS для уменьшения данных до двух измерений исключительно для целей визуализации (для создания диаграммы рассеяния). Я мог запустить MDS до кластеризации, но обнаружил, что кластеры были несколько менее рациональными (хотя они будут визуально чрезвычайно жесткими). Если бы у меня было больше данных, где было слишком дорого запускать алгоритмы кластеризации из-за его высокой размерности, я бы, конечно же, использовал MDS. – brandomr

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