Как восстановить кодирование One-Hot в Spark (Scala)

После запуска k-means (mllib spark scala) я хочу разобраться с кластерными центрами, которые я получил из данных, которые я предварительно обработал, используя (среди прочих преобразователей) OneHotEncoder mllib.

Центр выглядит так:

Центр кластера 0 [0.3496378699559276,0.05482645034473324,111.6962521358467,1.770525792286651,0.0,0.8561916265130964,0.014382183950365071,0.0,0.0,0.0,0.47699722692567864,0.0,0.0,0.0,0.04988557988346689,0.0,0.0,0.0,0.8981811028926263,0.9695107580117296,0.0,0.0,1.7505886931570156, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, 0.0,0.0,0.0,0.0,17.771620072281845,0.0,0.0,0.0,0.0]

Что, очевидно, не очень дружелюбно к человеку... Есть идеи о том, как вернуть горячую кодировку и получить оригинальные категориальные особенности? Что если я найду ближайшую точку данных (используя ту же метрику расстояния, которая используется k-образным средством, которое, как я полагаю, является евклидовым расстоянием) до центроида, а затем верну кодировку этой конкретной точки данных?

1 ответ

Решение

Для центроидов кластера невозможно (настоятельно не рекомендуется) изменить кодировку. Представьте, что у вас есть оригинальная функция "3" из 6, и она закодирована как [0.0,0.0,1.0,0.0,0.0,0.0], В этом случае легко извлечь 3 как правильную функцию из кодировки.

Но после приложения kmeans вы можете получить кластерный центроид, который будет искать эту функцию следующим образом [0.0,0.13,0.0,0.77,0.1,0.0], Если вы хотите декодировать это обратно в то представление, которое у вас было раньше, например "4" из 6, поскольку функция 4 имеет наибольшее значение, вы потеряете информацию, и модель может быть повреждена.

Изменить: Добавить возможный способ вернуть кодировку на точках данных из комментариев к ответу

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

Другие вопросы по тегам