🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.programming
12 messages
12 total messages Started by Borneq Wed, 20 Nov 2019 00:04
Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216516
Author: Borneq
Date: Wed, 20 Nov 2019 00:04
12 lines
1584 bytes
Mam szukać wielokrotnie, nie identycznych a podobnych, coś takiego jak 
wyszukiwanie podobnego obrazu czy odcisku palca bez konieczność 
przeszukania całości czy nawet znacznej części całości.
Gdy mam przypadek 1D to najpierw sortuję.
Dla 2D mogę zrobić boksy wystarczająco duże by nie było marnotrawstwa na 
boksy nie zawierające żadnych elementów , te boksy mają podboksy a te 
elementy.

Jest problem, bo gdy szerokość to 100, wtedy
szukając 401 mogę znaleźć 490 a nie znajdę bliskiego 399.
Trzeba by szukać w boksach naokoło, w 9 zamiast w jednym. To jeszcze się 
da, ale dla 3D będzie to 27, ogólnie 3^n, co gdy mamy 512D?
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216517
Author: M.M.
Date: Wed, 20 Nov 2019 03:03
17 lines
2145 bytes
On Wednesday, November 20, 2019 at 1:04:51 AM UTC+1, Borneq wrote:
> Mam szukać wielokrotnie, nie identycznych a podobnych, coś takiego jak 
> wyszukiwanie podobnego obrazu czy odcisku palca bez konieczność 
> przeszukania całości czy nawet znacznej części całości.
> Gdy mam przypadek 1D to najpierw sortuję.
> Dla 2D mogę zrobić boksy wystarczająco duże by nie było marnotrawstwa na 
> boksy nie zawierające żadnych elementów , te boksy mają podboksy a te 
> elementy.
> 
> Jest problem, bo gdy szerokość to 100, wtedy
> szukając 401 mogę znaleźć 490 a nie znajdę bliskiego 399.
> Trzeba by szukać w boksach naokoło, w 9 zamiast w jednym. To jeszcze się 
> da, ale dla 3D będzie to 27, ogólnie 3^n, co gdy mamy 512D?

Jakie wejście i jakie wyjście programu?

Pozdrawiam
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216518
Author: Borneq
Date: Wed, 20 Nov 2019 06:22
14 lines
1572 bytes
W dniu 20.11.2019 o 04:03, M.M. pisze:
> Jakie wejście i jakie wyjście programu?
> 
> Pozdrawiam
> 

Wejście, dwa zbiory A(p1,p2...pn) B(q1.q2...qm)
gdzie pi, qk - to punktu o tym samym wymiarze

Wyjście:
punkty zbioru A gdzie dla jednego pi mamy podaną listę być może pustą 
iluś punktów ze zbioru B, które są w odległości co najwyżej epsilon, 
odległość może być różnie liczona, chyba że algorytm wymaga by była 
konkretnie np. jako suma po współrzędnych czy maksymalna współrzędna.
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216519
Author: Borneq
Date: Wed, 20 Nov 2019 06:23
7 lines
1611 bytes
W dniu 20.11.2019 o 07:22, Borneq pisze:
> odległość może być różnie liczona, chyba że algorytm wymaga by była 
> konkretnie np. jako suma po współrzędnych czy maksymalna współrzędna.


To znaczy sua po różnicy współrzędnych albo maksymalna różnica 
współrzędnych.
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216520
Author: M.M.
Date: Wed, 20 Nov 2019 06:37
14 lines
2088 bytes
On Wednesday, November 20, 2019 at 7:23:53 AM UTC+1, Borneq wrote:
> W dniu 20.11.2019 o 07:22, Borneq pisze:
> > odległość może być różnie liczona, chyba że algorytm wymaga by była 
> > konkretnie np. jako suma po współrzędnych czy maksymalna współrzędna.
> 
> 
> To znaczy sua po różnicy współrzędnych albo maksymalna różnica 
> współrzędnych.

Trzeba przeiterować i policzyć, albo najpierw zaindeksować czymś w okolicach 
kd-tree. Można posłużyć się bazą danych, np. postgres ma indeksy do tego
celu, działa dobrze na ogromnych zbiorach danych.

Pozdrawiam
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216521
Author: Borneq
Date: Wed, 20 Nov 2019 07:51
6 lines
1743 bytes
W dniu 20.11.2019 o 07:37, M.M. pisze:
> Trzeba przeiterować i policzyć, albo najpierw zaindeksować czymś w okolicach
> kd-tree. Można posłużyć się bazą danych, np. postgres ma indeksy do tego
> celu, działa dobrze na ogromnych zbiorach danych.

Bardziej chodzi mi o algorytm, czyli kd-tree?
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216522
Author: M.M.
Date: Thu, 21 Nov 2019 00:13
12 lines
2142 bytes
On Wednesday, November 20, 2019 at 8:51:33 AM UTC+1, Borneq wrote:
> W dniu 20.11.2019 o 07:37, M.M. pisze:
> > Trzeba przeiterować i policzyć, albo najpierw zaindeksować czymś w okolicach
> > kd-tree. Można posłużyć się bazą danych, np. postgres ma indeksy do tego
> > celu, działa dobrze na ogromnych zbiorach danych.
> 
> Bardziej chodzi mi o algorytm, czyli kd-tree?

Jeśli chcesz zaindeksować przed wyszukiwaniem, to można próbować kd-tree. 
Ale nie tylko, może pomysł z gridem być lepszy.

Pozdrawiam
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216523
Author: Borneq
Date: Thu, 21 Nov 2019 18:44
20 lines
2445 bytes
W dniu 21.11.2019 o 01:13, M.M. pisze:
> On Wednesday, November 20, 2019 at 8:51:33 AM UTC+1, Borneq wrote:
>> W dniu 20.11.2019 o 07:37, M.M. pisze:
>>> Trzeba przeiterować i policzyć, albo najpierw zaindeksować czymś w okolicach
>>> kd-tree. Można posłużyć się bazą danych, np. postgres ma indeksy do tego
>>> celu, działa dobrze na ogromnych zbiorach danych.
>>
>> Bardziej chodzi mi o algorytm, czyli kd-tree?
> 
> Jeśli chcesz zaindeksować przed wyszukiwaniem, to można próbować kd-tree.
> Ale nie tylko, może pomysł z gridem być lepszy.
> 
> Pozdrawiam
> 

Grid sprawdza się dla małej wymiarowości,
mam grid co 100, mam punkt 401, znajduję 490, ale nie mogę znależć już 
399 choć jest bliżej,
więc trzeba by naokoło, zamiast jednego boxa -9!
Dla dwóch wymiarów, a dla trzech 26, ogólnie 3^n, co z kilkuset?
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216524
Author: M.M.
Date: Thu, 21 Nov 2019 23:31
34 lines
3276 bytes
On Thursday, November 21, 2019 at 7:44:43 PM UTC+1, Borneq wrote:
> W dniu 21.11.2019 o 01:13, M.M. pisze:
> > On Wednesday, November 20, 2019 at 8:51:33 AM UTC+1, Borneq wrote:
> >> W dniu 20.11.2019 o 07:37, M.M. pisze:
> >>> Trzeba przeiterować i policzyć, albo najpierw zaindeksować czymś w okolicach
> >>> kd-tree. Można posłużyć się bazą danych, np. postgres ma indeksy do tego
> >>> celu, działa dobrze na ogromnych zbiorach danych.
> >>
> >> Bardziej chodzi mi o algorytm, czyli kd-tree?
> > 
> > Jeśli chcesz zaindeksować przed wyszukiwaniem, to można próbować kd-tree.
> > Ale nie tylko, może pomysł z gridem być lepszy.
> > 
> > Pozdrawiam
> > 
> 
> Grid sprawdza się dla małej wymiarowości,
> mam grid co 100, mam punkt 401, znajduję 490, ale nie mogę znależć już 
> 399 choć jest bliżej,
> więc trzeba by naokoło, zamiast jednego boxa -9!
> Dla dwóch wymiarów, a dla trzech 26, ogólnie 3^n, co z kilkuset?

Stosuje się też techniki zmniejszania wymiarów. W przypadku odcisków 
palców np. zlicza ilość charakterystycznych wzorów.

Jeśli wymiarów jest dużo, np. 100 i ma być gęste wypełnienie w każdym
wymiarze, to potrzeba M^100 elementów, gdzie M jest duże, ma wartość
chociaż 10 :) Nie wiem jak kd-tree się sprawdzi dla dużej wymiarowości.
By trzeba sprawdzić, albo poczytać.

Tam piszą też że się nie nadają:
https://stackoverflow.com/questions/37132774/why-k-d-trees-is-not-used-for-high-dimensional-data

Pozdrawiam
Re:Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216525
Author: slawek
Date: Sat, 07 Dec 2019 04:47
13 lines
1895 bytes
Borneq <borneq@antyspam.hidden.pl> Wrote in message:
> Mam szukać wielokrotnie, nie identycznych a podobnych, coś takiego jak wyszukiwanie podobnego obrazu czy odcisku palca bez konieczność przeszukania całości czy nawet znacznej części całości.Gdy mam przypadek 1D to najpierw sortuję.Dla 2D mogę zrobić boksy wystarczająco duże by nie było marnotrawstwa na boksy nie zawierające żadnych elementów , te boksy mają podboksy a te elementy.Jest problem, bo gdy szerokość to 100, wtedyszukając 401 mogę znaleźć 490 a nie znajdę bliskiego 399.Trzeba by szukać w boksach naokoło, w 9 zamiast w jednym. To jeszcze się da, ale dla 3D będzie to 27, ogólnie 3^n, co gdy mamy 512D?

W 2D sortuj po x i po y, czyli 2*1D. Punkty bliskie w 2D są też
 bliskie po x i po y. Przejdź do nD: będzie n sortowań. Czyli 512
 sortowań. Szukasz sąsiadów, masz ich jakieś 2*512, z sąsiadów
 wybierasz najbliższego. Jak chcesz mieć m najbliższych bierzesz
 2*m*n sąsiadów. Co powinno być wykonalne.
-- 


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216526
Author: M.M.
Date: Sun, 08 Dec 2019 03:58
15 lines
2677 bytes
On Saturday, December 7, 2019 at 5:47:21 AM UTC+1, slawek wrote:
> Borneq <b@a.h.p> Wrote in message:
> > Mam szukać wielokrotnie, nie identycznych a podobnych, coś takiego jak wyszukiwanie podobnego obrazu czy odcisku palca bez konieczność przeszukania całości czy nawet znacznej części całości.Gdy mam przypadek 1D to najpierw sortuję.Dla 2D mogę zrobić boksy wystarczająco duże by nie było marnotrawstwa na boksy nie zawierające żadnych elementów , te boksy mają podboksy a te elementy.Jest problem, bo gdy szerokość to 100, wtedyszukając 401 mogę znaleźć 490 a nie znajdę bliskiego 399.Trzeba by szukać w boksach naokoło, w 9 zamiast w jednym. To jeszcze się da, ale dla 3D będzie to 27, ogólnie 3^n, co gdy mamy 512D?
> 
> W 2D sortuj po x i po y, czyli 2*1D. Punkty bliskie w 2D są też
>  bliskie po x i po y. Przejdź do nD: będzie n sortowań. Czyli 512
>  sortowań. Szukasz sąsiadów, masz ich jakieś 2*512, z sąsiadów
>  wybierasz najbliższego. Jak chcesz mieć m najbliższych bierzesz
>  2*m*n sąsiadów. Co powinno być wykonalne.

A jakby dopracować ( bo to pomysł nieprzemyślany ) takie indeksowanie, że
dajemy ileś dodatkowych losowych punktów i im przypisujemy grupy najbliższych
punktów? 

Pozdrawiam
Re: Wyszukiwanie bliskich punktów w wielowymiarowej przestrzeni
#216527
Author: slawek
Date: Sun, 08 Dec 2019 07:51
15 lines
1632 bytes
"M.M." <mmarszik@gmail.com> Wrote in message:
> A jakby dopracować ( bo to pomysł nieprzemyślany ) takie indeksowanie, żedajemy ileś dodatkowych losowych punktów i im przypisujemy grupy najbliższychpunktów? Pozdrawiam

Sortowanie sprawdziło się w 3D. Powinno sprawdzić się i w 1024D itd.

Ale ogólnie - jeżeli A jest blisko B, B jest blisko C, to A jest
 blisko C. Tyle że przy n punktach relacji d(P, Q) będzie O(n**2),
 a indeksów posortowanych po współrzędnych przestrzeni k
 wymiarowej O(k*n). Nawet dla k=1024 sortowanie wydaje się
 bardziej opłacalne. Chyba że np. k=1024, n=10. Wtedy policzenie
 brute force to tylko 45 policzyć odległość.


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads