Zdjęcie poniżej pokazuje 7 punktów wokół początku. Jeden z nich został wybrany przez człowieka na podstawie zasad i doświadczenia i ma kolor czerwony (ten w lewym dolnym kwadrancie).
Teraz mamy ponad 1000 takich zestawów punktów i dla każdego zestawu człowiek wybrał jeden punkt. Warunki te dotyczą wszystkich zestawów:
- Każdy zestaw ma około 3 - 10 punktów
- Nie ma wartości odstających
- Punkty mogą mieć wartości dodatnie i ujemne
- Przy wyborze punktu nie popełniono żadnych błędów
Moje pytanie brzmi: czy istnieje algorytm uczenia maszynowego do uczenia się na podstawie tych zestawów i wyborów dokonanych przez człowieka, aby mógł automatycznie decydować, który punkt wybrać, gdy zostanie podany nowy zestaw punktów? Ten nowy zestaw oczywiście spełnia pierwsze 3 warunki z góry.
2 uwagi końcowe:
- Podany przeze mnie przykład jest tylko przypadkowo skonstruowanym przeze mnie przykładem, który wspiera ideę punktów w płaszczyźnie wokół początku wraz z wybranym. W prawdziwym życiu może być więcej struktur, ale na razie jestem ciekawy i chciałbym wiedzieć, co jest możliwe w tej sprawie.
- Czy możliwe byłyby zmiany? Powiedzmy, że jest to około 2 wybranych punktów lub masz koła o danym promieniu zamiast punktów.
machine-learning
Elmex80s
źródło
źródło
Odpowiedzi:
To fascynujący problem! Dwie rzeczy sprawiają, że jest to szczególnie trudne:
age
iheight
(w centymetrach). Każda próbka ma jeden wpis dla każdej i oczywiście(age, height) = (22, 180)
nie jest taka sama jak(age, height) = (180, 22)
. Żaden problem nie dotyczy prawdy. Zestaw punktów ma od 3 do 10 punktów, a kolejność, w jakiej wprowadzamy punkty, nie powinna mieć znaczenia przy porównywaniu dwóch zestawów punktów.Pozwól, że nakreślę algorytm, który zajmuje się obydwoma wyzwaniami. Dokładność prognoz nie jest bardzo dobra; ale może widzisz sposób, w jaki można to poprawić. I przynajmniej coś przewiduje , prawda?
1. Symulowanie próbek
Aby móc przetestować algorytm, napisałem funkcje generujące próbki i etykiety.
Generowanie próbek: Każda próbka zawiera od 3 do 10 punktów. Liczba punktów jest losowa i pochodzi z jednolitego rozkładu. Każdy punkt ma formę
(x_coordinate, y_coordinate)
. Współrzędne są ponownie losowe, pochodzą z rozkładu normalnego.Generowanie etykiet: Jako zabawkowy przykład przyjmijmy, że reguła wyboru punktu jest następująca: zawsze wybieraj punkt najbliższy
(0, 0)
, gdzie „najbliższy” należy rozumieć w kategoriach normy euklidesowej.Możemy teraz tworzyć nasze zestawy pociągów i testów:
2. Porównywanie zestawów punktów za pomocą odległości Hausdorffa
Zajmijmy się pierwszym problemem: jak powinniśmy porównywać różne zestawy punktów? Liczba punktów w zestawach punktów jest inna. Pamiętaj również, że kolejność, w jakiej zapisujemy punkty, nie powinna mieć znaczenia: porównanie z zestawem punktów
[(0,0), (1,1), (2,2)]
powinno dać taki sam wynik, jak porównanie z zestawem punktów[(2,2), (0,0), (1,1)]
. Moje podejście polega na porównaniu zestawów punktów na podstawie odległości Hausdorffa :3. Prognozowanie przez najbliższych sąsiadów i uśrednianie
Mamy teraz pojęcie odległości między zestawami punktów. Umożliwia to zastosowanie k-najbliższej klasyfikacji sąsiadów: Biorąc pod uwagę zestaw punktów testowych, znajdujemy
k
zestawy punktów w naszej próbce treningowej, które mają najmniejszą odległość Hausdorffa względem zestawu punktów testowych, i uzyskujemy ich etykiety. Teraz pojawia się drugi problem: w jaki sposób przekształcamy tek
etykiety w prognozy dla zestawu punktów testowych? Przyjąłem najprostsze podejście: uśrednij etykiety i przewiduj punkt w zestawie punktów testowych, który jest najbliższy średniej.4. Testowanie
Wszystko jest gotowe do przetestowania wydajności naszego algorytmu.
Dla danej funkcji decyzyjnej
num_neighbors = 70
uzyskujemy dokładność prognozy 84%. Nie jest to zbyt dobre i oczywiście jest specyficzne dla naszej funkcji decyzyjnej, która wydaje się dość łatwa do przewidzenia.Aby to zobaczyć, zdefiniuj inną funkcję decyzyjną:
Korzystanie z tej funkcji przez
dec_fun = decision_function_maxaverage
obniża dokładność prognoz do 45%. To pokazuje, jak ważne jest, aby myśleć o regułach decyzyjnych generujących etykiety. Jeśli masz pomysł, dlaczego ludzie wybierają określone punkty, pomoże to znaleźć najlepszy algorytm.Niektóre sposoby ulepszenia tego algorytmu: (1) Użyj innej funkcji odległości zamiast odległości Hausdorffa, (2) użyj czegoś bardziej wyrafinowanego niż k-najbliżsi sąsiedzi, (3) popraw sposób, w jaki wybrane etykiety treningowe zamieniają się w prognozy.
źródło
Oto kilka sposobów wykorzystania sieci neuronowych do rozwiązania tego problemu:
Za pomocą zwykłej sieci neuronowej Feedforward:
Tak więc każdy przykład wejściowy będzie wektorem o długości 30, gdzie ostatnie 3 * (10-k ) wartości są zerowe, jeśli istnieją k punkty obecne w zestawie, a wynikiem jest wektor o długości 10 sumujący się do 1, niezależnie od tego, czy największa wartość odpowiada przewidywanemu punktowi (którego pozycja odpowiada tej pozycji na wejściu).
Z konwergentną siecią neuronową:
Sieć CNN może działać lepiej, ponieważ dane są z natury przestrzenne. Musisz jednak zdecydować, co zrobić, jeśli dwa lub więcej punktów się na siebie nakłada. Najprostszym rozwiązaniem jest wybranie jednego losowo, co może być OK, w zależności od konkretnego zadania.
Z nawracającą siecią neuronową:
Tak, to takie proste z RNN! Dobrze radzą sobie z wejściami o zmiennej długości, ale wciąż nie mają zalet CNN do obsługi danych przestrzennych.
Ostrzeżenia:
Jeśli używasz FNN lub RNN, istnieje również kwestia sposobu zamawiania danych wejściowych. Jeśli w twoich prawdziwych danych nie ma właściwej kolejności, nie chcemy, aby nasza sieć dokonywała różnych prognoz dla tych samych danych kodowanych w różnych zamówieniach. Jednym ze sposobów na poradzenie sobie z tym jest powiększanie danych : powiel kilka razy każdy przykład szkolenia z różnymi kolejnością wprowadzania danych, więc mam nadzieję, że twoja sieć nauczy się odpowiednich symetrii.
Jeśli masz tylko czas, aby wypróbować jedno podejście, wybrałbym CNN. Sieci CNN zostały zaprojektowane tak, aby dobrze radziły sobie z danymi przestrzennymi i nie ma problemu z kolejnością danych wejściowych.
źródło
(0,0), (1,1), (2,2)
będzie miało inny efekt niż karmienie go zestawem punktów(1,1), (2,2), (0,0)
.