Как мне оценить возможности для лучшей кластеризации с очень маленьким набором данных? - PullRequest
4 голосов
/ 15 июля 2011

Я работаю над программой, которая использует несколько (<50) точек высокой размерности в пространстве признаков (1000+ измерений) и выполняю иерархическую кластеризацию на них путем рекурсивного использования стандартной k-кластеризации. </p>

Myпроблема заключается в том, что на любом одном этапе k-кластеризации разные части представления с высокой размерностью являются избыточными.Я знаю, что эта проблема следует под эгидой извлечения, выбора или взвешивания объекта.

В целом, что нужно учитывать при выборе конкретного алгоритма извлечения / выбора / взвешивания объекта?И, в частности, какой алгоритм будет наилучшим способом подготовки моих данных к кластеризации в моей ситуации?

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Проверьте этот документ:

Виттен Д. М. и Р. Тибширани (2010) Основа для выбора функций в кластеризации. Журнал Американской статистической ассоциации 105 (490): 713-726.

И связанная бумага COSA Фридмана. Они оба подробно обсуждают эти вопросы.

0 голосов
/ 18 июля 2011

Я бы предложил комбинацию выбора функций на основе PCA и k-средних.

Найдите ваши основные компоненты и закажите их по весу. И потребляют этих весов на каждой глубине вашей иерархии.

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

W1: 0.32
W2: 0.20
W3: 0.18
W4: 0.09
...
W1000: 0.00

Мы хотим потреблять вес 1/N сверху для каждой глубины, где N - это счетчик глубины. Принимая N здесь 4. 0.25 первого компонента расходуется, и мы достигаем:

W1: 0.07*
W2: 0.20
W3: 0.18
W4: 0.09
...
W1000: 0.00

Новая оценка для первого компонента становится 0.32-0.25=0.07. Во второй итерации мы снова потребляем вершину 0.25.

W1: 0.00*
W2: 0.02*
W3: 0.18
W4: 0.09
...
W1000: 0.00

Третья итерация:

W1: 0.00
W2: 0.00*
W3: 0.00*
W4: 0.04*
...
W1000: 0.00

И четвертая итерация использует остаток, где весит некоторые до 0.25.

На каждой итерации мы используем только те функции, вес которых мы потребляем. Например, мы используем только PC1 и PC2 функций после KLT на второй итерации, поскольку это единственные компоненты, вес которых мы потребляем. Таким образом, компоненты для кластеризации для каждой итерации становятся:

Iteration 1: PC1
Iteration 2: PC1, PC2
Iteration 3: PC2, PC3, PC4
Iteration 4: PC4, ... PC1000

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

Наконец, я не знаю, есть ли название для этого подхода. Просто естественно использовать PCA для неконтролируемых проблем. Вы также можете попробовать контролируемый выбор объектов после первой итерации, поскольку у вас под рукой есть метки кластера.

...