Załóżmy, że mam chmurę punktów podaną w 6-wymiarowej przestrzeni, którą mogę uczynić tak gęstą, jak potrzeba. Punkty te okazują się leżeć na powierzchni niższego wymiaru politytu (tj. Wektory punktowe (x1, x2, ... x6) wydają się być współpłaszczyznowe).Wypukły kadłub w wyższych wymiarach, znajdowanie wierzchołków polytopy
Chciałbym znaleźć wierzchołki tej nieznanej polytopy, a moja obecna próba korzysta z algorytmu qhull, poprzez interfejs scipy w Pythonie. Na początku otrzymywałbym tylko komunikaty o błędach, najwyraźniej spowodowane wprowadzeniem niższego wymiaru i/lub wieloma zdegenerowanymi punktami. Próbowałem kilku metod brutalnej siły, aby wyeliminować zdegenerowane punkty, ale niezbyt udane, a więc w końcu przypuszczam, że wszystkie te punkty muszą leżeć na wypukłym kadłubie.
This question był bardzo pomocny, ponieważ sugeruje zmniejszenie wymiarów za pomocą analizy głównych składników. Jeśli rzutuję punkty na hyperplane 4D, algorytm qhull działa bezbłędnie (dla dowolnego wyższego wymiaru nie działa).
from scipy.spatial import ConvexHull
from sklearn.decomposition import PCA
model = PCA(n_components=4).fit(initial_points)
proj_points = model.transform(initial_points)
hull = ConvexHull(proj_points, qhull_options = "Qx")
Odpowiedź na powyższe pytanie wspomina, że simplices muszą zostać przekształcone z powrotem po jednym oblicza wypukłej prognozowanego punktów. Ale wynik khull składa się tylko z indeksów i dlaczego nie odpowiadają one indeksom początkowych punktów?
Teraz mój problem polega na tym, że nie wiem, którą precyzję użyć, aby uzyskać właściwe wierzchołki. Bez względu na to, jak gęsto wykonuję chmurę punktów, uzyskane wierzchołki różnią się od siebie różnymi szczegółami. Na przykład, dla pierwszych punktów w (10000, 6) tablica dostać (gdzie E0.03 jest maksymalna, dla której pracuje ten):
hull1 = ConvexHull(proj_points, qhull_options = "Qx, E0.03")
print len(hull1.vertices)
print hull1.vertices
5
[ 437 2116 3978 7519 9381]
I wykreślenie go w niektórych (nie strasznie informacyjny) projekcję osiach 0,1,2 (gdzie niebieskie punkty stanowią wybór punktu początkowego chmurze):
Ale dla większej precyzji (oczywiście) I dostać inny zestaw:
hull2 = ConvexHull(proj_points, qhull_options = "Qx, E0.003")
print len(hull2.vertices)
print hull2.vertices
29
[ 74 75 436 437 756 1117 2116 2366 2618 2937 3297 3615 3616 3978 3979
4340 4561 4657 4659 4924 5338 5797 6336 7519 7882 8200 9381 9427 9470]
samej projekcji (tylko trochę inny kąt):
Podejrzewam, że pierwszy obraz nie ma wystarczającej liczby wierzchołków i że drugi obraz ewentualnie ma zbyt wielu. Chociaż oczywiście nie mogę wyciągnąć rygorystycznych informacji z tych wątków. Ale czy istnieje dobry sposób sprawdzenia, której precyzji użyć? A może zupełnie inne podejście do tego problemu (próbowałem już kilku)?
Fascynujące pytanie. Nie mam gotowej odpowiedzi, ale zgadzam się, że pierwszy przykład z pewnością wygląda (na oko), że ma zbyt mało wierzchołków. Wydaje mi się, że ten ostatni zawsze będzie miał wiele wierzchołków wzdłuż "krawędzi" (przepraszam, jeśli jest to zła terminologia, a nie moja dziedzina wiedzy) projektowanej polytopy tylko dlatego, że początkowe punkty są losowe - prawdopodobnie nie dostać jeden na "prawdziwym" wierzchołku polytopy, o którym mówisz, że istnieje. Jeśli masz czas na eksperymentowanie - wypróbowałeś opcję [Q8] (http://www.qhull.org/html/qh-optq.htm#Q8), która wydaje się zignorować punkty "prawie w środku". –
Dzięki za komentowanie. Okazuje się, że większość różnych opcji w Qhull daje te same (zmienne) odpowiedzi, podobnie jak Q8. Jedynym, który daje nieco inną liczbę (ale wciąż niestabilną z różnymi dokładnościami) jest Q9. Prawdą jest, że zestaw prawdopodobnie nie będzie zawierał oczekiwanych "prawdziwych" wierzchołków, ale ponieważ są one tak blisko, wydaje mi się, że powinien istnieć sposób ich uzyskania. – Denor
Im więcej myślę, tym bardziej jestem zaintrygowany. Wydaje się, że jest to wciąż tematem prac w matematyce. [This] (http://cran.r-project.org/web/packages/alphahull/vignettes/alphahull.pdf) pokazuje podejście (2D), w którym ich parametr alfa wydaje się mieć podobny efekt do twojej precyzji. Problem polega na tym, że kadłub jest z definicji * najmniejszym * polytopem, który może zawierać punkty, a jednak zakładamy, że "prawdziwe" wierzchołki mogą leżeć poza zestawem próbek i że w pewnym sensie polytop ma "prostszy kształt" "niż wyprodukowany przez precyzyjne oszacowanie.Oko, OK, algorytmicznie, trudne. –