Нужно ли стандартизировать ваши данные перед кластеризацией?

23

Нужно ли стандартизировать ваши данные перед кластером? В примере scikit learnо DBSCAN, здесь они делают это в строке:

X = StandardScaler().fit_transform(X)

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

Зачем было бы необходимо преобразовывать данные?

Candic3
источник
Спасибо за подробные ответы! В качестве продолжения всех ваших ответов: я понимаю, что если функции находятся в разных масштабах, это может представлять проблему. Однако, если показатель расстояния нормализован к дисперсии, достигается ли такой же результат, как при стандартном масштабировании до кластеризации? то есть я обычно использую нормализованное евклидово расстояние, связанное - это также смягчает эффекты масштабирования?
Candic3

Ответы:

19

Нормализация не всегда требуется, но это редко вредит.

Некоторые примеры:

К-значит :

Кластеризация K-средних является «изотропной» во всех направлениях пространства и, следовательно, имеет тенденцию создавать более или менее круглые (а не вытянутые) кластеры. В этой ситуации оставлять неравные отклонения равносильно приданию большего веса переменным с меньшей дисперсией.

Пример в Matlab:

X = [randn(100,2)+ones(100,2);...
     randn(100,2)-ones(100,2)];

% Introduce denormalization
% X(:, 2) = X(:, 2) * 1000 + 500;

opts = statset('Display','final');

[idx,ctrs] = kmeans(X,2,...
                    'Distance','city',...
                    'Replicates',5,...
                    'Options',opts);

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
     'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
     'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')
title('K-means with normalization')

введите описание изображения здесь

введите описание изображения здесь

(К вашему сведению: как я могу определить, является ли мой набор данных кластеризованным или некластеризованным (т. Е. Образующим один кластер )

Распределенная кластеризация :

Сравнительный анализ показывает, что результаты распределенной кластеризации зависят от типа процедуры нормализации.

Искусственная нейронная сеть (входы) :

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

Искусственная нейронная сеть (входы / выходы)

Должны ли вы сделать что-либо из этих вещей с вашими данными? Ответ, это зависит.

Стандартизация либо входных, либо целевых переменных приводит к тому, что процесс обучения улучшается за счет улучшения числового условия (см. Ftp://ftp.sas.com/pub/neural/illcond/illcond.html ) задачи оптимизации и обеспечения того, чтобы различные значения по умолчанию Значения, вовлеченные в инициализацию и завершение, являются подходящими. Стандартизация целей также может влиять на целевую функцию.

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


Интересно, что изменение единиц измерения может даже привести к появлению совершенно другой структуры кластеризации: Кауфман, Леонард и Питер Дж. Руссеув. «Поиск групп в данных: введение в кластерный анализ». (2005).

В некоторых приложениях изменение единиц измерения может даже привести к появлению совершенно другой структуры кластеризации. Например, возраст (в годах) и рост (в сантиметрах) четырех воображаемых людей приведены в таблице 3 и нанесены на рис. 3. Похоже, что {A, B) и {C, 0) являются двумя хорошо разделенными кластерами. , С другой стороны, когда высота выражается в футах, можно получить таблицу 4 и рисунок 4, где очевидными кластерами являются {A, C} и {B, D}. Этот раздел полностью отличается от первого, потому что каждый субъект получил другого компаньона. (Рисунок 4 был бы еще более плоским, если бы возраст измерялся в днях.)

Чтобы избежать этой зависимости от выбора единиц измерения, есть возможность стандартизировать данные. Это преобразует исходные измерения в единичные переменные.

введите описание изображения здесь введите описание изображения здесь

Кауфман и соавт. Продолжаем с некоторыми интересными соображениями (стр. 11):

С философской точки зрения стандартизация на самом деле не решает проблему. Действительно, выбор единиц измерения приводит к относительному весу переменных. Выражение переменной в меньших единицах приведет к большему диапазону для этой переменной, что затем окажет большое влияние на результирующую структуру. С другой стороны, стандартизируя, мы пытаемся придать всем переменным одинаковый вес в надежде достичь объективности. Как таковой, он может быть использован практикующим, который не обладает предварительными знаниями. Однако вполне может быть, что некоторые переменные по своей природе более важны, чем другие в конкретном приложении, и тогда присвоение весов должно основываться на знании предмета (см., Например, Abrahamowicz, 1985). С другой стороны, были попытки разработать методы кластеризации, которые не зависят от масштаба переменных (Friedman and Rubin, 1967). Предложение Харди и Рассона (1982) состоит в поиске раздела, который минимизирует общий объем выпуклых оболочек скоплений. В принципе, такой метод является инвариантным относительно линейных преобразований данных, но, к сожалению, не существует алгоритма для его реализации (кроме аппроксимации, которая ограничена двумя измерениями). Поэтому в настоящее время дилемма стандартизации кажется неизбежной, и программы, описанные в этой книге, оставляют выбор за пользователем. Предложение Харди и Рассона (1982) состоит в поиске раздела, который минимизирует общий объем выпуклых оболочек скоплений. В принципе такой метод является инвариантным относительно линейных преобразований данных, но, к сожалению, не существует алгоритма для его реализации (кроме аппроксимации, которая ограничена двумя измерениями). Поэтому в настоящее время дилемма стандартизации кажется неизбежной, и программы, описанные в этой книге, оставляют выбор за пользователем. Предложение Харди и Рассона (1982) состоит в поиске раздела, который минимизирует общий объем выпуклых оболочек скоплений. В принципе такой метод является инвариантным относительно линейных преобразований данных, но, к сожалению, не существует алгоритма для его реализации (кроме аппроксимации, которая ограничена двумя измерениями). Поэтому в настоящее время дилемма стандартизации кажется неизбежной, и программы, описанные в этой книге, оставляют выбор за пользователем.

Франк Дернонкур
источник
1
Этот ответ феноменален
Candic3
6

Стандартизация данных рекомендуется, потому что в противном случае диапазон значений в каждой функции будет действовать как вес при определении способа кластеризации данных, что обычно нежелательно.

Например, рассмотрим стандартную метрику для большинства алгоритмов кластеризации (включая DBSCAN в sci-kit learn) euclidean, иначе называемую нормой L2. Если одна из ваших функций имеет диапазон значений, значительно больший, чем у других, кластеризация будет полностью подчиняться этой функции. Чтобы проиллюстрировать это, посмотрите на простой пример ниже:

>>> import numpy as np
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.metrics.pairwise import euclidean_distances
>>> 
>>> X = np.array([[1,2,100],[4,3,50],[1,1,75]])
>>> 
>>> print X
[[  1   2 100]
 [  4   3  50]
 [  1   1  75]]
>>> 
>>> print euclidean_distances(X)
[[  0.          50.0999002   25.01999201]
 [ 50.0999002    0.          25.25866188]
 [ 25.01999201  25.25866188   0.        ]]
>>> print euclidean_distances(StandardScaler().fit_transform(X))
[[ 0.          3.46410162  1.73205081]
 [ 3.46410162  0.          3.46410162]
 [ 1.73205081  3.46410162  0.        ]]

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

Дэвид
источник
1

Стандартизация не обязательна, независимо от того, требуется она или нет, может зависеть от выбранного вами показателя расстояния.

Например, если вы выберете расстояние Махаланобиса, то разделение будет основано на количестве стандартных точек, разделяющих точки, а не на абсолютном расстоянии между ними, так как это метрика, инвариантная к масштабу.

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

image_doctor
источник
0

В некоторых случаях я нашел полезным определить функцию «оценки бизнеса», определяющую «важность» измерений, используемых для кластеризации. Например, для группирования покупателей по зеленому продукту, если яблоки в два раза дороже апельсинов, количество яблок увеличится вдвое.

Мармит Бомбер
источник
Но тогда вы не могли бы просто включить это как дополнительную функцию, на которой вы кластеризуетесь? то есть цена становится функцией кластеризации?
Candic3