У меня есть данные, представляющие собой матрицу z-показателей. Каждый ряд имеет нулевое среднее. Я пытаюсь выполнить анализ кластера kmeans, чтобы назначить каждую строку для кластера. Чтобы взять очень упрощенный пример, в матрице:
[0, -1, 1, 0]
[0, -1, 1, 0]
[0, 1, -1, 0]
[1, 1, -1, -1]
[-1, -1, 1, 1]
(за исключением того, что фактические данные z-показателя будут иметь дисперсию 1 в каждой строке.)
Python должен понимать, что две верхние строки находятся в одном кластере. Я могу сделать это с помощью sklearn.cluster.KMeans. Однако теперь я хочу, чтобы он обнаружил «антикорреляцию» и классифицировал третий ряд вместе с двумя верхними рядами, потому что это просто отрицательный из них. Если я скажу ему найти два кластера, он должен найти один с тремя верхними рядами и другой с двумя нижними, потому что два нижних также являются отрицательными по отношению друг к другу.
Один из возможных подходов (возможно) - если бы я мог использовать пользовательскую функцию соответствия, которая определяет расстояние двух точек r1 и r2 как минимум sqrt ((r1 + r2) ** 2) и sqrt ((r1-r2) ** 2). Возможно, я бы хотел узнать, использовалась ли данная строка в качестве ее положительной или отрицательной версии в кластере.
Спасибо за любую помощь, которую вы можете оказать.