Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Проецирование многомерного вектора на 2D


Автор: Kaz 26.4.2009, 21:52
Доброго времени суток.

Может кто вдруг знает какие-то методы для проецирования многомерного вектора на двумерную плоскость.

Есть программа, которая производит классификацию образов геометрическими методами (k ближайших соседей и тд).

Каждый образ представлен точкой в многомерном пространстве.

Для программы нужна "картинка", чтобы было чего показать. В общем, чтобы расстояние между двумя точками в 2D соответствовало расстоянию между этими точками в многомерном пространстве

Подскажите хотя бы где можно копнуть на этот счет (гугл не предлагать). Ну и желательно, чтобы этот метод можно было легко перевести в код.


спасибо

Автор: dereyly 26.4.2009, 22:35
Можно использовать как вы уже писали метод к-средних...
Так же по данную проблему можно решать с помощью  SOM, т.е. карты Кохонены данный метод несколько лучше, но дольше работает. Существует несколько разновидностьей SOM, интересным можно считать иерархический SOM, но на практике я его не тестировал, но идея прикольная...
Еще есть нейрогаз как способ кластеризации данных, хотя на мой взгляд на практике применять этот метод не стоит, хотя некоторые проблемы SOM и к-средних он восполняет.

Если вы работаете с растровыми изображениеми то перед тем как отправить их в кластеризатор нужно выделить признаки этого изображения....

Автор: Kaz 26.4.2009, 23:38
Хм, как мне спроецировать многомерный вектор путем применения метода кластеризации образов, а строить карту Кохонена только лишь для проецирования на двумерную плоскость...


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

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

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

Автор: maxdiver 27.4.2009, 09:11
Ну в общем случае спроецировать всю картинку на двумерную плоскость с сохранением расстояний просто невозможно. Уже с кубом из трёхмерного пространства не получится такое сотворить.

Если же считается, что ответ есть (а чтобы он был, надо, чтобы все точки лежали в одной плоскости), то нам надо сначала получить эту плоскость (взяв любые три точки из A, B, C из набора, не лежащие на одной прямой), а потом уже каждую точку P набора проецировать в эту плоскость, для чего, например, можно считать скалярные произведения вектора AP на AB и AC, в результате мы спроецируемся в аффинную плоскость (с осями AB и AC), а чтобы перейти к "нормальной" декартовой, надо в декартовую плоскость уложить треугольник ABC (A в начало координат, C удобно на ось oX, а точку B каким-нибудь образом, чтобы расстояния AB, AC, BC сохранились как и в многомерном пространстве), ну а теперь уже ответ очевиден:
x = |AC| * scalar_mult (AC, AP) + |AB| * cos(alpha) * scalar_mult (AB, AP),
y = |AB| * sin(alpha) * scalar_mult (AB, AP)
здесь scalar_mult я обозначил те скалярные произведения, которые мы считали в многомерном пространстве, alpha - угол при вершине A в треугольнике.

Автор: dereyly 27.4.2009, 13:17
Все таки к-среднеие являются более общим алгоритмом факторного анализа и плоскость на которую проецирукется пространство входов выбирается оптимально.

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

Автор: Kaz 27.4.2009, 22:00
Цитата(dereyly @ 27.4.2009,  13:17)
Все таки к-среднеие являются более общим алгоритмом факторного анализа и плоскость на которую проецирукется пространство входов выбирается оптимально.

честно говоря, не очень понимаю как метод кластеризации может мне помочь спроецировать многомерный вектор на двумерное пространство :(

Автор: dereyly 27.4.2009, 22:24
Вы просто не очень точно ставите задачу "есть данные -- нужно их отобразить в 2Д пространстве". Ряд методов которые я перечислил перебирают множество входов в многомерном пространстве и строят устойчивые точки которые соотвсетсвуют скоплениям данных, эти точки соотвествующие разреженности или сгущениям данных далее отображаются в 2Д пространстве (1Д или 3Д). По которым можно судить о какой то топалогии многомерного пространства. 
Если вы используете какрты Кохонена то элементы не только пытаются занять оптимальное положение в пространств, но и действуют в рамках своих структурных ограничений...
Вот что-то нашел про применение http://old.e-xecutive.ru/print/publications/analysis/article_1882/ для отображения топологии многомерных данных

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)