Как выбрать функции для кластеризации? - PullRequest
0 голосов
/ 07 февраля 2019

У меня были данные временных рядов, которые я сгруппировал за 3 недели и транспонировал в функции.

Теперь у меня есть функции: A_week1, B_week1, C_week1, A_week2, B_week2, C_week2 и так далее.Некоторые функции незаметны, некоторые - непрерывны.

Я думаю о применении K-Means или DBSCAN.

Как мне подойти к выбору функции в такой ситуации?Должен ли я нормализовать функции?Должен ли я представить некоторые новые, которые бы как-то связали периоды вместе?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Формализуйте вашу проблему, не взламывайте какой-либо код.

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

Для DBSCAN расстояние - только двоичное решение: достаточно близко или нет.Если вы используете версию GDBSCAN, это легче понять, чем с расстояниями.Но со смешанными переменными я бы предложил использовать максимальную норму.Два объекта затем закрываются, если они различаются по каждой переменной не более чем на «eps».Вы можете установить eps = 1 и масштабировать свои переменные так, чтобы 1 была «слишком большой» разницей.Например, в дискретных переменных вы можете захотеть допустить один или два дискретных шага, но не три.

Логически легко увидеть, что порог максимального расстояния разлагается на дизъюнкцию предложений с одной переменной:

 maxdistance(x,y) <= eps
 <=>
 forall_i |x_i-y_i| <= eps
0 голосов
/ 08 февраля 2019

Поскольку K-means и DBSCAN являются алгоритмами обучения без контроля, выбор функций над ними связан с сеточным поиском.Возможно, вы захотите протестировать их, чтобы оценить такие алгоритмы на основе внутренних мер, таких как индекс Дэвиса-Болдина, коэффициент Силуэт и другие.Если вы используете python, вы можете использовать Поиск по исчерпывающей сетке , чтобы выполнить поиск.Вот ссылка на библиотеку scikit .

...