Яка мета нормалізації рядків


13

Я розумію міркування щодо нормалізації стовпців, оскільки це призводить до того, що характеристики зважуються однаково, навіть якщо вони не вимірюються в одній шкалі - проте, часто в найближчій сусідній літературі обидва стовпці та рядки нормалізуються. Для чого / для чого нормалізувати рядки? Зокрема, як результат нормалізації рядків впливає на подібність / відстань між векторами рядків?


чи можете ви цитувати літературу, яка нормалізує рядки? Я розумію, що це відносно давня дискусія, але нещодавно я натрапив на подібне питання і намагаюся з'ясувати відмінності. Я опублікую своє прийняття на це як відповідь.
DataD'oh

Відповіді:


4

Це відносно стара тема, але я нещодавно зіткнувся з цим питанням у своїй роботі і натрапив на цю дискусію. На це питання відповіли, але я вважаю, що небезпека нормалізації рядків, коли це не одиниця аналізу (див. Відповідь DJohnson вище), не була вирішена.

Основний момент полягає в тому, що нормалізація рядків може завдати шкоди для будь-якого подальшого аналізу, наприклад, найближчого сусіда або k-засобу. Для простоти я збережу відповідь, специфічну для середнього центрування рядків.

Щоб проілюструвати це, я використовуватиму змодельовані дані Гаусса в кутах гіперкуба. На щастя, для Rцього є зручна функція (код знаходиться в кінці відповіді). У двовимірному випадку зрозуміло, що дані, орієнтовані на середнє рядок, будуть падати на лінію, що проходить через початок, під 135 градусами. Потім модельовані дані кластеруються за допомогою k-засобів з правильною кількістю кластерів. Дані та результати кластеризації (візуалізовані у 2D за допомогою PCA за вихідними даними) виглядають приблизно так (осі для крайньої лівої ділянки різні). Різні форми точок на ділянках кластеризації відносяться до присвоєння кластеру "земна правда", а кольори - результат кластеризації k-засобів.

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

У верхньому лівому та нижньому правому кластерах розрізаються навпіл, коли дані розташовані середньо-рядково. Тож відстані після центрування середнього рядка спотворюються і не мають великого значення (принаймні, ґрунтуючись на знаннях даних).

Не так дивно в 2D, що робити, якщо ми будемо використовувати більше розмірів? Ось що відбувається з 3D-даними. Рішення кластеризації після центру середнього рядка є "поганим".

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

І подібне з даними 4D (зараз показано для стислості).

Чому це відбувається? Центрирование середнього рядка висуває дані в деякий простір, де деякі функції наближаються, ніж вони є. Це має бути відображено у співвідношенні між ознаками. Давайте подивимось на це (спочатку на вихідні дані, а потім на дані середньосереднього рядка для 2D та 3D випадків).

[,1] [,2] [1,] 1.000 -0.001 [2,] -0.001 1.000 [,1] [,2] [1,] 1 -1 [2,] -1 1 [,1] [,2] [,3] [1,] 1.000 -0.001 0.002 [2,] -0.001 1.000 0.003 [3,] 0.002 0.003 1.000 [,1] [,2] [,3] [1,] 1.000 -0.504 -0.501 [2,] -0.504 1.000 -0.495 [3,] -0.501 -0.495 1.000 Таким чином, схоже, що посередництво середнього рядка вводить кореляції між ознаками. Як на це впливає кількість особливостей? Ми можемо зробити просте моделювання, щоб зрозуміти це. Результат моделювання показаний нижче (знову ж таки код в кінці).

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

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

То що відбувається, коли ми використовуємо реальні дані? У скільки разів внутрішня розмірність даних нижча, прокляття може не застосовуватися . У такому випадку я б здогадався, що центрування середніх рядків може бути "поганим" вибором, як показано вище. Зрозуміло, необхідний більш жорсткий аналіз, щоб зробити будь-які остаточні твердження.

Код для моделювання кластеризації

palette(rainbow(10))
set.seed(1024)
require(mlbench)
N <- 5000
for(D in 2:4) {
X <- mlbench.hypercube(N, d=D)
sh <- as.numeric(X$classes)
K <- length(unique(sh))
X <- X$x

Xc <- sweep(X,2,apply(X,2,mean),"-")
Xr <- sweep(X,1,apply(X,1,mean),"-")

show(round(cor(X),3))
show(round(cor(Xr),3))

par(mfrow=c(1,1))

k <- kmeans(X,K,iter.max = 1000, nstart = 10)
kc <- kmeans(Xc,K,iter.max = 1000, nstart = 10)
kr <- kmeans(Xr,K,iter.max = 1000, nstart = 10)
pc <- prcomp(X)
par(mfrow=c(1,4))

lim <- c(min(min(X),min(Xr),min(Xc)), max(max(X),max(Xr),max(Xc)))
plot(X[,1], X[,2], xlim=lim, ylim=lim, xlab="Feature 1", ylab="Feature 2",main="Data",col=1,pch=1)
points(Xc[,1], Xc[,2], col=2,pch=2)
points(Xr[,1], Xr[,2], col=3,pch=3)
legend("topleft",legend=c("Original","Center-cols","Center-rows"),col=c(1,2,3),pch=c(1,2,3))
abline(h=0,v=0,lty=3)

plot(pc$x[,1], pc$x[,2], col=rainbow(K)[k$cluster], xlab="PC 1", ylab="PC 2", main="Cluster original", pch=sh)
plot(pc$x[,1], pc$x[,2], col=rainbow(K)[kc$cluster], xlab="PC 1", ylab="PC 2", main="Cluster center-col", pch=sh)
plot(pc$x[,1], pc$x[,2], col=rainbow(K)[kr$cluster], xlab="PC 1", ylab="PC 2", main="Cluster center-row", pch=sh)
}

Код для збільшення моделювання функцій

set.seed(2048)
N <- 1000
Cmax <- c()
Crmax <- c()
for(D in 2:100) {
X <- matrix(runif(N*D), nrow=N)    
C <- abs(cor(X))
diag(C) <- NA
Cmax <- c(Cmax, max(C, na.rm=TRUE))

Xr <- sweep(X,1,apply(X,1,mean),"-")
Cr <- abs(cor(Xr))
diag(Cr) <- NA
Crmax <- c(Crmax, max(Cr, na.rm=TRUE))
}
par(mfrow=c(1,1))
plot(Cmax, ylim=c(0,1), ylab="Max. cor.", xlab="#Features",col=1,pch=1)
points(Crmax, ylim=c(0,1), col=2, pch=2)
legend("topright", legend=c("Original","Center-row"),pch=1:2,col=1:2)

EDIT

Після деякого гуглінгу опинився на цій сторінці, де симуляції демонструють подібну поведінку, і пропонується, щоб кореляція, запроваджена центром середнього рядка, становила .-1/(p-1)


5

Існують різні форми нормалізації рядків, і ОП не зазначає, яку з них має на увазі.

Типова популярність є специфічною формою нормалізації рядків (нормалізація Евкледової норми), де кожен рядок є нормованим (ділиться на його евкледівську норму).

Причини для використання цієї форми рядки нормалізації добре наведені в розділі частини цієї роботи [0]:3.2

Позначимо рядок, орієнтований на стовпчик, -vector іххp

(0)r(хх)=||хх||2-1хх

рядок нормалізований вектор. Поміркуйте, що ця трансформація робить для ваших даних геометрично . Геометрично, якщо у вихідних даних є змінні і по центру, застосовуючи нормалізацію евклідового ряду, ви проектуєте свої дані на поверхню розмірного одиничного кола.p>1p

Наприклад, якщо вихідні дані по центру (як чорні точки на цьому зображенні) і ви застосуєте до нього нормалізацію рядків, ви отримаєте червоні зірки.

library(car)
p = 2
n = 1000
m = 10
C = matrix(.9, p, p)
diag(C) = 1
set.seed(123)
x = matrix(runif(n * p, -1, 1), n, p) %*% chol(C)
z = sweep(x, 1, sqrt(rowSums(x * x)), FUN = '/')
plot(rbind(x, z), pch = 16, type = 'n', ann = FALSE, xaxt = 'n', yaxt = 'n')
points(x, pch = 16)
points(z, pch = 8, col = 'red')

Зелені крапки являють собою невелику кількість людей, що відпадають у вихідних даних. Якщо застосувати до них перетворення нормалізації рядків, ви отримаєте сині зірки.

x_1 = sweep(matrix(runif(m * p, -1, 1), m, p), 2, c(2, -2))
z_1 = sweep(x_1, 1, sqrt(rowSums(x_1 * x_1)), FUN = '/')
plot(rbind(x, x_1, z, z_1), pch = 16, type = 'n', ann = FALSE, xaxt = 'n', yaxt = 'n')
points(x, pch = 16)
points(x_1, pch = 16, col = 'green')
points(z, pch = 8, col = 'red')
points(z_1, pch = 8, col = 'blue')

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

Тепер перевага цієї трансформації очевидна. Проекція на одиничне коло пригнічує ефект далеких людей, що вижили. Якщо вихідні дані виведені з орієнтованої моделі за винятком кількох далеких людей (наприклад, зелених крапок), будь-яка оцінка форми ваших даних на основі буде зіпсована сторонами.хЖх

Якщо ви базуєте свої оцінки на нормалізованих даних (зірки, червоні та блакитні), у людей, які перебувають у синьому кольорі, тепер є менше важелів, щоб зіпсувати ваші оцінки.z

Це ви можете переконатись найбільш чітко, порівнюючи матриці фігур (або контурні еліпси), пристосовані по черзі до даних, їх забрудненої версії та нормалізованого перетворення рядків:

ellipse(crossprod(rbind(x, x_1)) / (n + m - 1) / det(crossprod(rbind(x, x_1)) / (n + m - 1))^(1 / p), center = rep(0, p), col = 'green', radius = 1)
ellipse(crossprod(rbind(z, z_1)) / (n + m - 1) / det(crossprod(rbind(z, z_1)) / (n + m - 1))^(1 / p), center = rep(0, p), col = 'red', radius = 1)
ellipse(crossprod(rbind(x)) / (n - 1) / det(crossprod(rbind(x)) / (n - 1))^(1 / p), center = rep(0, p), col = 'black', radius = 1)

Як бачимо, еліпси форми, пристосовані до трансформованих забруднених даних (червоний еліпс), є кращою оцінкою матриці форм незабруднених даних (чорний еліпс), ніж отриманої із забруднених даних (зелений еліпс). Це відбувається тому, що зелені зірки мають менший потяг на червоний еліпс (побудований з перетворених даних ), ніж на зелений (побудований з вихідних даних ).zх

  • [0] С. Візурі, В. Койвунен, Х. Оджа (2000). Матриці коваріації знаків та рейтингу, Журнал статистичного планування та висновку, Том 91, Випуск 2, 557–575.

4

Існують деякі полеві причини для нормалізації рядків. При текстовому аналізі досить часто представити текст з гістограмою слів, які він містить. Починаючи з підрахунку слів для кожного рядка, сировинна стандартизація перетворює його в гістограму.

І обчислювальна причина . Якщо ви працюєте з розрідженою матрицею, ви не можете легко відцентрувати та масштабувати стовпчик даних за стовпцем. Якщо вбудувати їх у щільну матрицю, дані можуть стати занадто великими, щоб вміститись у пам'яті. Однак масштабування рядка за рядком не впливає на загальний об'єм необхідної пам'яті.


З обчислювальної причини, ви хочете сказати, що ми просто беремо транспонирование і рядки нормалізуємо це через те, як представлені розріджені матриці? Я більше запитую, як нормалізація рядків впливає на результати найближчих сусідів на практиці.
curiosity_delivers

3

Нормалізація рядків має назву - ipsative масштабування - яка, як правило, включає масштабування набору функцій, або діленням на максимальне значення для набору, або відніманням середнього значення ознак. Існує багато мотивів вибору такого підходу до трансформації даних, але головним серед них є те, що він обумовлює особливості, що стосуються унікальних характеристик особистості (ряду чи одиниці аналізу).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.