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