(все) направления, перпендикулярные гиперплоскости через p точек данных - PullRequest
4 голосов
/ 26 октября 2009

У меня простой вопрос: по заданным p точкам (неколлинеарным) в R ^ p я нахожу гиперплоскость, проходящую мимо этих точек (чтобы прояснить, что я пишу все в R):

p<-2
x<-matrix(rnorm(p^2),p,p)
b<-solve(crossprod(cbind(1,x[,-2])))%*%crossprod(cbind(1,x[,-2]),x[,2])

затем, учитывая, что p + 1 ^ -ые точки не коллинеарны с первыми p точками, я нахожу направление, перпендикулярное b:

x2<-matrix(rnorm(p),p,1)
b2<-solve(c(-b[-1],1)%*%t(c(-b[-1],1))+x2%*%t(x2))%*%x2

То есть b2 определяет p-мерную гиперплоскость, перпендикулярную b и проходящую через x2. Теперь мои вопросы:

Формула взята из моей интерпретации этой записи в википедии ("solve (A)" - это команда R для A ^ -1). Почему это не работает для p> 2? Что я делаю не так?

PS: я видел это сообщение (на редактировании в betoverflow: извините, я не могу опубликовать более одной ссылки), но каким-то образом оно мне не помогает.

Заранее спасибо,

У меня проблема с реализацией / пониманием решения Лю, когда p> 2:

не должно ли скалярное произведение между разложением qr развернутой матрицы и направлением гиперплоскости быть 0? (т.е. если векторы qr перпендикулярны гиперплоскости)

т.е. когда р = 2 это

c(-b[2:p],1)%*%c(a1)

дает 0. Когда p> 2, это не так.


Вот моя попытка реализовать решение Виктора Лю.

а) с учетом p линейно независимых наблюдений в R ^ p:

p<-2;x<-matrix(rnorm(p^2),p,p);x
      [,1]       [,2]
[1,] -0.4634923 -0.2978151
[2,]  1.0284040 -0.3165424

б) поставьте их в матрицу и вычтите первый ряд:

a0<-sweep(x,2,x[1,],FUN="-");a0
        [,1]        [,2]
[1,] 0.000000  0.00000000
[2,] 1.491896 -0.01872726

в) выполнить QR-разложение матрицы а0. Вектор в нулевом пространстве - это направление, которое я ищу:

qr(a0)
          [,1]       [,2]
[1,] -1.491896 0.01872726
[2,]  1.000000 0.00000000

В самом деле, это направление совпадает с указанным при применении формулы из Википедии (с использованием x2 = (0.4965321,0.6373157)):

       [,1]
[1,]  2.04694853
[2,] -0.02569464

... с преимуществом, что он работает в более высоких измерениях.

У меня последний вопрос: что означает другой p-1 (т. Е. (1,0) здесь) QR-вектор, когда p> 2? Заранее спасибо,

1 Ответ

5 голосов
/ 26 октября 2009

Гиперплоскость p-1 определяется вектором нормали и точкой, через которую проходит плоскость:

n.(x-x0) = 0

, где n - нормальный вектор длины p, x0 - точка, через которую проходит гиперплоскость, . - скалярное произведение, и уравнение должно выполняться для любой точки x на плоскости. , Мы также можем написать это как

n.x = p

, где p = n.x0 - просто число. Это более компактное представление гиперплоскости, параметризованной (n, p). Чтобы найти вашу гиперплоскость, предположим, что ваши точки x1, ..., xp. Сформируйте матрицу A с p-1 строками и p столбцами следующим образом. Строки p являются xi-x1, выложенными как векторы строк, для всех i> 1 (их только p-1). Если ваши точки p не являются "коллинеарными", как вы говорите (они должны быть аффинно независимыми), то матрица A будет иметь ранг p-1 и размерность нулевого пространства 1. Один вектор в пространстве нулей является нормальным вектором гиперплоскость. Как только вы найдете его (назовите его n), тогда p = n.x1. Чтобы найти пустое пространство матрицы, вы можете использовать QR-декомпозицию (подробности см. здесь ).

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