•  

    Od kilku dni próbuję znaleźć prosty i praktyczny problem który mógłbym rozwiązać za pomocą logicznej regresji.

    Jest kilka oklepanych przykładów jak OCR, SPAM, FRAUD, rozpoznawanie twarzy itd. ale jak wspomniałem, są mało oryginalne i dość czasochłonne w implementacji (od początku). A mi chodzi o mało złożony problem i łatwo dostępne dane treningowe.

    Myślałem o wykrywaniu oszustw przy logowaniu na podstawie czasu wpisywania hasła, tylko nie mam danych treningowych - musiałbym stworzyć jakąś formatkę i wysłać do kilku osób celem kolekcji tych danych.

    Innym pomysłem jest przewidywanie czy dana drużyna piłkarska wygra mecz, na podstawie tego czy gra u siebie oraz czy drużyna przeciwna jest wyżej w tabeli.

    Wiem, że przykłady mało wyszukane (możliwe nawet, że niepoprawne z punktu widzenia ML) ale nic więcej mi nie przychodzi do głowy. Inspiracji szukałem też na stronach GUSu i google trends.

    Może ktoś z Szanownych Mirków i Węgierek mógłby czymś zainspirować?

    #machinelearning

    +: Cronox
    •  

      @tomek4
      Miałeś chyba na myśli regresję logistyczną. Standardowy przykład użycia regresji logistycznej to przeżywalnośc na Tytaniku
      Możesz również spreparować samemu dataset, np dla danych z cenami mieszkań możesz założyć jakąś progową cenę np. 100 000$, i jeśli dom jest droższy to znaczy że jest drogi (1), a poniżej jest tani (0).

    •  

      P.S. Odradzam implementacji czegokolwiek od podstaw, jeśli są już gotowe rzeczy, nawet w celach naukowych.

    •  

      @Diego19: Może troche przesadzam, bo rzeczywiście jeśli ktoś chce poznać dogłębnie jakąś metodę to warto sobie może zaimplementować na bardzo prostym przykładzie. Implementacje algorytmów machine-learningowych są trudne, i przede wszystkim czasochłonne. Do tego dochodzą problemy typowe dla metod numerycznych, alokacja pamięci, overflow liczb itd. Lepiej zacząć się uczyć wykorzystywać gotowe narzędzia.

    •  

      @dziobaki_sa_jadowite: Moim zdaniem jeśli odradzasz, to warto od razu wspomnieć dlaczego. Osobiście implementowałem samemu wszystko, czego w ML używałem i uważam, że to najlepszy sposób zrozumieć jak to wszystko działa. Oczywiście jeżeli ktoś nie jest zapalonym programistą, to może pójść na skróty i skorzystać z gotowych rozwiązań, bo po to one są, ale jeżeli ktoś ma taką możliwość, tzn. umie programować, to powinien spróbować samemu wszystko napisać.

    •  

      @Diego19: A można zobaczyć te implementacje? Albo jakie algorytmy to były?

    •  

      @dziobaki_sa_jadowite: Regresja liniowa, regresja logistyczna, k-NN, Naive Bayes, sieci neuronowe, a do tego kilka ekstraktorów cech. Miałem do tego fajne materiały ze studiów, które wyjaśniały część teoretyczną, na tyle prosto, że bez problemu je zaimplementowałem i uważam, że to była najlepsza forma nauki.

    •  

      @Diego19: Tak jak napisałem, uważam że jeśli ktoś chce poznać dogłębnie metodę, to warto ją zaimplementować na prostym przykładzie, i nie zrozum mnie źle, ale zakładam że takie Twoje były. Jeśli ktoś chce sprawdzać i dowiedzieć się jak różne konfiguracje hiper-parametrów oddziałują na wyniki to najlepiej jest użyć gotowych rozwiązań, bo są niemal na pewno zaimplementowane poprawnie. Przykładowo: we własnoręcznej sieci neuronowej ciężko będzie zmienić tak architekturę żeby można było zobaczyć co się stanie, jeśli dodamy kolejną warstwę konwolucyjną, w przedostatniej warstwie zamrozimy parametry i dodamy gdzieś 2 warstwy w pełni połączone. I jeszcze w dodatku zaczynając zupełnie od zera, powiedzmy w C.

    •  

      @dziobaki_sa_jadowite: W C rzeczywiście byłoby to dość skomplikowane i zajęło by sporo czasu (aczkolwiek jak najbardziej wykonalne), ale w takim Matlabie robi się to już całkiem sprawnie i prosto. A jeżeli chodzi o Twój drugi argument, to powiedziałbym, że jest wprost przeciwnie. Wiele gotowych rozwiązań jest bardzo ograniczona jeżeli chodzi o wgląd do środka algorytmu, zmianę architektury sieci itp. natomiast implementując swoje własne rozwiązanie mam pełną kontrolę nad każdym aspektem. Z racji tego, że wszystkie te algorytmy implementowałem w ramach nauki, to skupiałem się na tym jak różne konfiguracje hiperparametrów, architektury czy np. dodanie regularyzacji wpływają na dany model. Jak różne metody optymalizacyjne wpływają na szybkość uczenia. Matlab ma tutaj jeszcze jedną zaletę, pozwala w prosty sposób wizualizować dane, dzięki czemu na własne oczy możemy zobaczyć i porównać, wpływ różnych czynników.

      PS No i Matlab wykorzystuje potencjał karty graficznej, co też ma ogromne znaczenie w tej dziedzinie.

    •  

      Matlab

      Programowanie

      GIF

      źródło: m.popkey.co (2.01MB)

    •  

      @Diego19 Nie rozumiemy się na podstawowym poziomie. Ja przez implementacje od podstaw, rozumiem implementacje bez posiadania jakiegokolwiek wsparcia od strony obliczeń numerycznych, ty przez implementacje od podstaw rozumiesz napisanie skryptu w matlabie. To nie jest implementacja od podstaw. Tak to jest implementacja, ale nie od podstaw bo wiele rzeczy jest już gotowych.

      P.S. To moja prywatna opinia, której nie podeprę niczym: matlab w machine-learningu to jakaś porażka. Słyszałem wiele opinii o tym że wiesza się non-stop, że jest super niewydajny jeśli chodzi o karty graficzne, a instalacja go tak aby obliczenia na GPU działały jest istnym koszmarem.

    •  

      @dziobaki_sa_jadowite: Co do samego użycia Matlaba, to ja z niego korzystałem i poza ustawieniem ścieżki instalacji, nie musiałem nic więcej robić, żeby działał poprawnie i wykorzystywał GPU, nie zawiesił mi się ani razu i działał całkiem wydajnie, ale konkretnych wartości Ci nie podam, bo nie pisałem identycznych programów w C dla porównania.

      A co do mojego rozumienia "implementacji". Pisząc w Matlabie nie wykorzystywałem żadnych gotowych funkcji z ML, wszystko implementowałem samemu i jedynym uproszczeniem względem C było to, że nie musiałem martwić się pamięcią i miałem gotowe operatory +,-,*,'(transpozycja) co w C ograniczyło by się do napisania tych funkcji, bo reszta kodu wyglądałaby podobnie. Ale już odpowiednia wizualizacja danych w C, jak i wykorzystanie wsparcia GPU (chyba że ktoś ma już np. openGL opanowane) było by bardziej problematyczne i czasochłonne, a zarazem zbędne w nauce ML.

    •  

      Panowie @dziobaki_sa_jadowite @Diego19 na wstępie dziękuję za rzeczową dyskusję.
      Swoją drogą kolejny już raz przekonuję się, że na portalu ze śmiesznymi obrazkami dużo szybciej uzyskasz wartościowe odpowiedzi niż na niejednym branżowym forum.

      Wracając do tematu @dziobaki_sa_jadowite to masz rację, chodzi oczywiście o zagadnienie regresji logistycznej.

      Dziękuję za podane przykłady.
      O ile ten z Titaniciem za praktyczny nie jest ( ͡° ͜ʖ ͡°), to już ceny domów - tak. Tylko dosyć żmudną pracą będzie pozyskanie danych treningowych (oprócz ceny do 'cech' będzie trzeba pewnie dodać lokalizację, powierzchnię, a na końcu to manualnie sklasyfikować).

      Tu znalazłem bardzo fajny pomysł: https://github.com/kootenpv/whereami

      Uses WiFi signals

    •  

      Brawo wykop, ucięło 3/4 tekstu bo tak... Ech...

    •  

      jedynym uproszczeniem względem C było to, że nie musiałem martwić się pamięcią

      Prawdopodobnie nie zdajesz sobie sprawy z tego co do końca napisałeś. Pod względem programistycznym to jest prawdopodobnie największe wyzwanie reszta to tak na prawdę bardziej matematyka niż programowanie i inne umiejętności są potrzebne.
      Moje zdanie jest takie że w dzisiejszych czasach pisać od podstaw te algorytmy po by lepiej je rozumieć to prawie jak samemu budować proste modele komputerów żeby móc je programować. Zdecydowanie lepiej jest prowadzić badania na zaimplementowanych już algorytmach które jak kolega @dziobaki_sa_jadowite napisał są niemalże na 100% poprawne i ewentualnie włączać w to reverse engineering.
      @Diego19

    •  

      @poje_bant: Zdaję sobie sprawę z tego co napisałem, a cały nasz spór rozwodził się nad tym, że ja miałem inną definicję "programowania od podstaw". Dla mnie oznaczało to skupienie się, nie nad zarządzaniem pamięcią i implementacją wymienionych wyżej operatorów, bo nie to jest istotą ML. Dla mnie oznaczało to np. napisanie własnego klasyfikatora, a nie użycie gotowego, któremu wystarczy podać dane treningowe i reszta dzieje się sama. Równie dobrze dla kogoś innego programowaniem od podstaw mogło by być pisanie w assemblerze, bo C nie jest akurat żadną sztywną granicą.

      Jak sam zauważyłeś:

      reszta to tak na prawdę bardziej matematyka niż programowanie i inne umiejętności są potrzebne

      I właśnie tę resztę miałem na myśli mówiąc o implementacji tego samemu. Sam tak robiłem, dlatego użyłem do tego Matlaba, bo na "tej reszcie" pozwolił mi się skupić, a nie na tym, co w nauce ML i tak nie jest istotne, a jest czasochłonne.