Кластеризация трехмерных данных с одной номинальной шкалой - PullRequest
0 голосов
/ 11 апреля 2019

Постановка задачи

У меня есть 2D-фреймы данных панд, которые содержат данные о характеристиках использования пользовательских инструментов (например, 88% использования системы A, 11% использования системы B, 1% системы C для соответствующего пользователя:

        A      B       C
Usage  0,88   0,11   0,01

Предположим, что присутствуют три пользователя (ID: 1, 2, 3) и присутствуют следующие матрицы:

ID:1    A      B       C     ID:2    A      B      C     ID:3    A      B    C
Usage  0,88   0,11   0,01    Usage  0,86   0,13   0,01   Usage  0,00  0,00  1,00

Я думал об объединении одиночных 2D-матриц в 3D-матрицу, чтобы идентифицировать кластеры с похожим поведением использования.

Цель

Определение кластеров в рамках использования системы. В этом примере ID1 и ID2 должны быть кластеризованы. Я строю рабочий метод DBSCAN для кластеризации случайных 2D данных.

Однако я сталкиваюсь с проблемой размещения 2D-матриц в фиксированной последовательности в агрегированной 3D-матрице. Таким образом, невозможно идентифицировать сходство, глядя только на одну фиксированную номинальную последовательность, потому что в основном все пользовательские 2D-данные должны сравниваться со всеми другими 2D-данными, чтобы найти знакомое поведение при использовании.

Мысли

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

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

Возможно, у кого-то есть хорошая методическая идея для решения этой проблемы кластеризации. :)

1 Ответ

0 голосов
/ 11 апреля 2019

В примере labels_true используется только для оценки, а не в качестве входных данных для самого DBSCAN.labels_true получены из функции, которая создает фиктивный набор данных.Правильный способ вызова dbscan - db = DBSCAN(eps=0.3, min_samples=10).fit(X) Где x в вашем случае - [[valueA, valueB, valueC], [valueA, valueB, valueC], ...] Результат будет db.labels_.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...