5

Jestem nowy w Sztucznych sieciach neuronowych.Techniki rozdzielania i porównywania wzorów

Jestem zainteresowany aplikacji takich jak to:

table

mam znacznie duży zbiór obiektów. Każdy obiekt ma sześć właściwości, oznaczonych jako P1 – P6. Każda właściwość ma wartość, która jest wartością symboliczną. Innymi słowy, w moim przykładzie P1 – P6 może mieć wartość ze zbioru {A, B, C, D, E, F}. Nie są numeryczne. (Załóżmy, że A, B, C, D, E, F są kolory;. Wtedy zrozumiesz mój pomysł)

Teraz jest inna właściwość R, że jestem zainteresowany Załóżmy

R =. {G1, G2, G3, G4, G5}

muszę trenować system do dużego zestawu P1 – P6 i odpowiedniej R. teraz chcę wykonać następujące czynności.

  1. mam obiektu i wiem wartości P1 do P6. Muszę znaleźć R (Grupa, do której należy obiekt).

  2. Aby uzyskać pożądany R, jaki jest wzór, który muszę mieć w P1 – P6. Jako przykład biorąc pod uwagę, że R = G2 muszę wymyślić dowolny wzór w P1 – P6.

Moje pytania są następujące:

  1. Jakie są teorie/technologie/techniki powinni czytać i nauki w celu realizacji 1 i 2, odpowiednio?

  2. Jakie narzędzia/biblioteki można polecić, aby uzyskać ten symulacji/realizowane/testowane?

+0

Jak duży jest zestaw de {A, B, C, D, E, F, ...}? czy to jest skończone? – wildplasser

+0

Tak, jest. I są niezależne –

+0

Cóż, to IMHO twój problem wydaje się mniej więcej podobny do wyszukiwarki lub systemu rekomendacji (z wyjątkiem tego, że Px ma stały rozmiar) Czy spojrzałeś na SVD? – wildplasser

Odpowiedz

3

Powinieneś sprawdzić classification algorithms (podsekcja sztucznej inteligencji), szczególnie algorytmy najbliższej sąsiadującej. Twój problem może zostać rozwiązany za pomocą różnych technik, które mają różne zalety i wady.

Jednak nie znam żadnej metody sztucznej inteligencji, która pozwala na dwukierunkową klasyfikację (lub innymi słowy, że obydwa jednocześnie spełniają twoje wymagania wstępne 1 i 2). Jak wszystko, co chcesz zrobić do tej pory jest posiadanie dwukierunkowego mapowania P1..P6 < => R, Proponuję po prostu użyć tablicy mapowania zamiast algorytmu sztucznej inteligencji. AI działałby świetnie, gdybyś nie wiedział dokładnie, która z twoich próbek jest skategoryzowana pod A..E w P1..P6.

Jeśli nalegasz na użycie sztucznej inteligencji, polecam najpierw sprawdzić numer Perceptron. Perceptron składa się z neuronów wejściowych, pośrednich i wyjściowych. Na przykład, masz dane wejściowe - Neurony P1a..P1e, P2a..P2e, ... i pięć wyjściowych neuronów R1..R5. Po treningu powinieneś być w stanie wprowadzić P1..P6 i otrzymać odpowiedni R1..R5 jako wynik.

Jeśli chodzi o frameworki i technologie, znam tylko pakiet Business Intelligence dla Visual Studio, chociaż istnieje wiele innych frameworków dla AI. Ponieważ nie używałem żadnego z nich (zawsze je kodowałem w C/C++), nie mogę polecić żadnego.

5

Sposób opisany problem, trzeba zajrzeć do różnych technik uczenia maszynowego. Jeśli to ja, spróbuję przeczytać o klasyfikacji k-NN (k Nearest Neighbours). Kiedy mówię o klasyfikacji, mam na myśli uzyskanie R, jeśli znasz P1-P6. Jest to naprawdę prosta technika i powinna być pomocna tutaj.

Jeśli chodzi o odwrotnie, to, czego potrzebujesz, to reprezentatywna próbka Twojej populacji. Myślę, że nie tak często, ale możesz spróbować czegoś takiego jak klastrowanie k-średnich. Metody klastrowania zwykle same określają klasę obiektu (właściwość R), ale k-znaczy Clustering jest w tej sytuacji cool, ponieważ trzeba podać liczbę klas obiektów (np. Różne możliwe wartości R), a na końcu otrzymujesz jedną reprezentatywną próbkę.

Zdecydowanie nie powinienem używać naprawdę skomplikowanych technik (takich jak sieci neuronowe), ponieważ twoje dane nie mają dokładnej interpretacji numerycznej, a wartości nie mogą być interpretowane stopniowo.

Zalecane narzędzia zależą od podstawowego języka programowania. Jest wspaniałe narzędzie o nazwie Orange, które jest oparte na języku Python i jest to moje narzędzie wyboru dla tego rodzaju rzeczy (zwłaszcza, że ​​bardzo łatwo jest połączyć moduły Pythona z C/C++). Jeśli wolisz Javę, możesz użyć całkiem podobnego narzędzia o nazwie Weka. Myślę, że Weka jest trochę lepiej udokumentowany, ale ja nie lubię Javy, więc nigdy tego nie wypróbowałem.

Oba te narzędzia mają graficzny klikalny interfejs, w którym można po prostu załadować dane i wykonać klasyfikację, zagrać z parametrami i sprawdzić, jaki rodzaj wyniku uzyskano przy użyciu różnych technik i różnych ustawień. Gdy już zdecydujesz, że masz potrzebne wyniki (lub jeśli nie lubisz graficznych interfejsów), możesz również użyć ich jako bibliotek w swoim rodzaju podczas programowania (Python dla Orange i Java dla Weka) i uczynić klasyfikację część większego projektu.

Jeśli przejrzysz dokumentację Orange lub Weka, myślę, że da ci to kilka pomysłów na temat tego, co możesz zrobić z danymi, które posiadasz i kiedy znasz kilka technik, które wydają ci się interesujące i mają zastosowanie do dane, może moglibyście uzyskać więcej komentarzy o jakości i informacji na temat kilku konkretnych metod tutaj, niż kiedy szukają ogólnej porady.

1

Wygląda na typowy problem z klasyfikacją. Jeśli naprawdę masz dużo danych, spójrz na Apache Mahout, który zapewnia rozproszone implementacje algorytmów uczenia maszynowego. Jeśli potrzebujesz czegoś mniej skomplikowanego do prototypowania, to jest to dobra alternatywa.