Jak zwiększyć rozwój algorytmu?

18

Pracując nad eksploracyjną analizą danych i opracowując algorytmy, stwierdzam, że większość mojego czasu spędzam na cyklu wizualizacji, pisania kodu, uruchamiania na małym zbiorze danych, powtarzania. Dane, które posiadam, są zwykle typu wizji komputerowej / fuzji czujników, a algorytmy są ciężkie dla wzroku (na przykład wykrywanie i śledzenie obiektów itp.), A algorytmy gotowe nie działają w tym kontekście. Uważam, że wymaga to wielu iteracji (na przykład, aby wybrać typ algorytmu lub dostroić parametry w algorytmie lub uzyskać właściwą wizualizację), a także czasy uruchamiania nawet na małym zestawie danych są dość długie, więc wszystko razem zajmuje trochę czasu.

Jak można przyspieszyć rozwój samego algorytmu i uczynić go bardziej skalowalnym?

Niektóre szczególne wyzwania:

Jak można zmniejszyć liczbę iteracji? (Zwłaszcza gdy jakiego rodzaju algorytm, nie mówiąc już o jego specyfice, nie wydaje się być łatwym do przewidzenia bez wypróbowania różnych wersji i zbadania ich zachowania)

Jak korzystać z większych zestawów danych podczas programowania? (Często przejście z małego na duży zestaw danych ma miejsce, gdy widać wiele nowych zachowań i nowych problemów)

Jak można szybciej dostroić parametry algorytmu?

Jak zastosować narzędzia typu uczenie maszynowe do samego rozwoju algorytmu? (Na przykład zamiast ręcznie pisać algorytm, napisz kilka prostych elementów konstrukcyjnych i połącz je w sposób wyuczony z problemu itp.)

Alex I.
źródło

Odpowiedzi:

7

Po pierwsze, jeśli twoje dane mają tyle odmian (w zależności od czasu, kontekstu i innych), że utrudniają zastosowanie jednej strategii, aby sobie z tym poradzić, możesz być zainteresowany zrobieniem wcześniejszej analizy czasowej / kontekstowej / .. Charakterystyka zestawu danych. Charakteryzowanie danych, tj. Wyodrębnianie informacji o tym, jak objętość lub specyfika treści zmienia się zgodnie z niektórymi kryteriami, zwykle zapewnia lepsze zrozumienie (bardziej sumienne i precyzyjne) niż zwykłe wnioskowanie algorytmów na zasadzie brutalnej siły.

Odpowiadając na każde pytanie:

  1. charakterystyka jest zdecydowanie sposobem na zmniejszenie liczby iteracji przy próbie wybrania odpowiednich algorytmów dla określonych danych;
  2. jeśli masz dyskretny zestaw kryteriów, na podstawie których zmieniają się twoje dane, znacznie łatwiej jest skalować rozwiązania, ponieważ będzie wiedział, jakie informacje uzyskasz / stracisz, jeśli zastosujesz prostsze / konkretne rozwiązania;
  3. po scharakteryzowaniu łatwiej będzie również wybrać parametry, ponieważ będziesz wiedział, z jakim konkretnym danymi będziesz mieć do czynienia;
  4. wreszcie możesz użyć algorytmów eksploracji danych / uczenia maszynowego do obsługi tej charakterystyki. Obejmuje to użycie:
    • algorytmy grupowania w celu zmniejszenia wymiarów danych;
    • algorytmy klasyfikacji, aby pomóc w podjęciu decyzji o konkretnych właściwościach, dane w funkcji czasu / kontekstu / ... mogą być prezentowane;
    • reguły asocjacji w celu przewidywania konkretnej wiedzy z zestawu danych, przy jednoczesnym ulepszeniu / uszczegółowieniu danych wykorzystywanych do późniejszej analizy;
    • oraz inne możliwe strategie i analizy.

A oto lista niektórych kryteriów analizy danych, które mogą okazać się pomocne.

Rubens
źródło
5

Przydają się dwie rzeczy:

  1. meta-nauka, aby przyspieszyć wyszukiwanie odpowiedniego modelu i optymalnych parametrów. Metauczenie polega na zastosowaniu narzędzi uczenia maszynowego do problemu znalezienia odpowiedniego narzędzia / parametrów uczenia maszynowego dla danego problemu. To na przykład ten dokument jako praktyczny przykład;

  2. gpucomputing w celu przyspieszenia algorytmu w większych zestawach danych. Na przykład OpenCV może wykorzystywać procesory graficzne , które są bardzo skuteczne w przetwarzaniu obrazów / filmów i mogą przynieść od 10 do 100 przyspieszeń w stosunku do procesorów. Ponieważ twój komputer najprawdopodobniej ma procesor graficzny GPU, możesz zyskać dużo czasu.

damienfrancois
źródło
4

Zgaduję, że prawdopodobnie widziałeś to demo YouTube i związany z nim Google Tech Talk , który jest powiązany z tymi artykułami:

I ten zestaw kodu w GitHub dla OpenTLD . Jeśli zaznaczysz tutaj opcję „czytaj mnie” na GitHub, zauważysz, że na liście znajduje się e-mail autora (Zdenek Kalal) , więc może warto wysłać mu wiadomość e-mail na temat twoich pytań lub nawet zaprosić go do odpowiedzi na to pytanie.

błędy
źródło