Klasyfikacje wektorów

0

Cześć wszystkim... może mógłby mi ktoś w prostych słowach powiedzieć co znaczy klasyfikacja wektorów i sprawdzanie który najlepiej do którego pasuje? Potrzebne mi jest to do następującego zadania.

W pliku wejściowym zapisano pewną ilość n+1 element
owych wektorów
v(v0,v1,....vn+1). Składowe wektorów v i przyjmują wartości całkowitoliczbowe. Wymiar (ilość elementów) wektora
jest parametrem zewnętrznym programu <n_size>. Plik wejściowy (wskazywany przez parametr <input_file> programu) zawiera w kolejnych liniach ciąg liczb, z których każde n+1 kolejnych traktowane jako współrzędne pewnego wektora. Ilość wektorów określona jest wyłącznie poprzez ilość zapisów w pliku wejściowym. Długość pojedynczej linii ani ilość liczb
w linii nie jest w jakikolwiek sposób określona (format swobodny). Zadanie polega na zaproponowaniu mechanizmu klasyfikacji, przy czym algorytm w pierwszej fazie (w pierwszym etapie) będziemy uczyć. Proces nauczania polega na podaniu pewnej liczby wektorów, o których dokładnie wiemy, do której z klas każdy z nich należy. Ilości klas nie znamy (określona ona jest przez dane wejściowe). W procesie nauczania element 1<=v0<= k oznacza numer klasy do której należy n<wymiarowy wektor (v1,....vn+1). A więc np. jeżeli parametr <n_size> określono jako 4 a w pliku <input_file> napotkamy ciąg liczb 2 5 <1 3 4 0 2 <1 2 ...........
to pierwsza czwórka liczb (2, 5, <1, 3) interpretowana jest następująco : liczba 2 wskazuje, iż występujący po niej trójwymiarowy wektor (5, <1, 3) traktować należy jako punkt należący do klasy 2. Kolejna czwórka liczb (4, 0,2,<1) wskazuje, że wektor
(0, 2, <1) należy do klasy 4 itd. Podając pewną – dość dużą ilość elementów ciągu uczącego dla każdej z klas, uzyskujemy w procesie uczenia wiedzę o cechach charakterystycznych każdej z klas.W pewnym momencie w pliku wejściowym pojawi się pierwszy z wektorów, którego współrzędna v0= 0. Oznacza to, że proces uczenia należy uznać za zakończony, i przechodzimy do fazy rozpoznawania. A więc np.
.....0 3 <1 3 .....
Oznacza, że musimy rozpoznać (sklasyfikować) do której z k klas wcześniej poznanych wektor (3, <1, 3)
najbardziej pasuje

0

Metod uczenia z nauczycielem jest cała masa. Możesz uzyć drzew decyzyjnych, możesz użyć inferencji reguł albo miliona innych podobnych rzeczy. Jak moim zdaniem zrobić to najprościej? (ale tez mało elegancko)
Zapisuj sobie wszystkie wektory dla konkretnych klas gdzieś jako "model", a następnie dla wektora który chcesz przetestować policz odległość cosinusową pomiędzy wektorem wejściowym a każdym z wektorów z danej klasy. Klasa dla której odległość cosinusowa będzie najmniejsza będzie tą pasującą.
Oczywiście ta metoda jest słaba jeśli "model" będzie za duży. Dlatego sensowne podejście zakłada stworzenie wektora charakterystycznego dla danej klasy a dopiero później dopasowywanie na bazie odległości cosinusowej.
Polecam poczytać o: http://en.wikipedia.org/wiki/Support_vector_machine

0

A Twoim zdaniem zapisywanie tych wektorów w Hash Mapie jako [klasa wektora] - elementy jest w miarę poprawna czy stworzyć sobie jakąś swoją strukturkę do tego?Dzięki wielkie bardzo mi pomogłeś. Przynajmniej już wiem z grubsza o co w tym chodzi. Zaraz zagłębie się w ta lekturke i może uda mi się jakoś elegancko to napisać.

0

tworzenie wektora charakterystycznego dla danej klasy

A nie dla danego zbioru?

0

Nie no chciałbyś mieć jeden wektor na jedną klasę przecież więc wektor byłby charakterystyczny dla klasy :)

0

Wiesz bo ja z algebry to trochę kuleję:) Czyli dla klasy przykładowo 5 może być kilka wektorów? W związku z tym jeżeli mam n klas i n wektorow w tych klasach to mam NxN i stąd wynika ten bardzo nieelegancki sposób jeśli chodzi o porównywanie z wektorem wejściowym? Trzeba złożyć wszystkie wektory danej klasy w macierz i z tej macierzy wyliczyć wektor charakterystyczny co doprowadzi, że każda klasa będzie miała tylko jeden wektor i będzie N porównań wtedy. Mniej więcej dobrze to rozumiem?

0

to jest tylko jeden że sposobów. jak już pisałem metod klasyfikacji jest multum a ja nie bardzo wiem jak zaawansowane metody cię interesują. jeśli chodzi o wektor dla danej klasy to absolutnie nie chodziło mi o jakieś matematyczne definicje tylko o intuicyjne wyjaśnienie idei

0

To ja już nie rozumiem teraz czy to co napisałem wcześniej ma sens... Bo wartości własne dla macierzy (utworzonej z wektorów) można liczyć dla macierzy N x N a po drugie wektorów własnych macierz ta moze miec nieskonczenie wiele albo np nie miec wcale... Nie wiem moze myle pojecia ... Nigdzie nie mogę znaleźć na temat wektora charakterystycznego dla zbioru wektorów w danej klasie wektora... Klasie w rozumieniu matematycznym.

0

A kto powiedział że ta "klasa" jest klasą w sensie matematycznym? Wydaje mi się że za bardzo dosłownie wszystko traktujesz. Wektor charakterystyczny o którym mówiłem to nie wektor własny tylko wektor najbardziej zbliżony do wszystkich elementów danej klasy. Pytanie brzmi czy w ogóle o takim wektorze można mówić, bo może się okazać że w danych wejściowych te wektory nie są do siebie za bardzo podobne i trzeba by użyć drzewa decyzyjnego żeby stwierdzić klasę.
Gdyby te wektory jednak były do siebie "podobne" to można taki wektor wspólny dla całej klasy wyznaczyć trochę tak jak w sieci kohonena, ale wykorzystując informacje o docelowej klasie. Tzn aktualizujemy współrzędne tego wektora tak żeby były jak najbardziej bliskie do współrzędnych wektorów w danej klasie.

0

No to w tym momencie już wyraziłeś się jasno :) I dalej mówisz porównania odległością cosinusowa? :)

0

No jeśli taki sensowny wektor będzie się dało stworzyć (co pewne nie jest - może tak być że dana "klasa" będzie obejmować dwa rozłączne zbiory podobnych wektorów!) to wtedy odległość cosinusowa będzie najłatwiejszym i najsensowniejszym rozwiązaniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1