Daj się poznać 2016 – podsumowanie
|Konkurs „Daj się poznać” z dniem dzisiejszym dobiega końca. Oto krótkie podsumowanie co udało się mi się w tym czasie zrobić.
Biblioteka PHP-ML
https://github.com/php-ai/php-ml
Machine Learning w PHP. Przykładowe użycie algorytmu k najbliższych sąsiadów (k nearest neighbours):
use Phpml\Classification\KNearestNeighbors;
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];
$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);
$classifier->predict([3, 2]);
// return 'b'
To tylko prosty przykład wykorzystania. Najlepszym sposobem na pokazanie ilości prac będzie spis treści dokumentacji. W środku są liczne przykłady kodu i wyjaśnienia:
- Classification
- Regression
- Clustering
- Metric
- Cross Validation
- Preprocessing
- Feature Extraction
- Datasets
- Math
Wpisy na blogu
W czasie trwania konkursu udało mi się wyprodukować 20 wpisów (podsumowanie będzie 21):
![](http://itcraftsman.pl/wp-content/uploads/2016/03/DSP2016-04-va-wyjdz-220x162.png)
Daj Się Poznać 2016 – zaczynamy
Krótko o tym czym jest konkurs „Daj Się Poznać”. Dlaczego biorę w nim udział, z czym to się wiąże i jak wpłynie na mojego bloga.
![](http://itcraftsman.pl/wp-content/uploads/2016/03/6118141658_3def50a4f2_b-220x162.jpg)
Wstęp do Machine Learning
Krótki wstęp do tematu uczenia się maszyn zwanego popularnie Machine Learning. Jakie problemy stara się rozwiązać oraz przykładowe zastosowania które zostały już wdrożone w codziennym życiu.
![](http://itcraftsman.pl/wp-content/uploads/2016/03/kmeans2-220x162.png)
Algorytm k-średnich – uczenie nienadzorowane
Algorytm k-średnich (z ang. k-means) inaczej zwany również algorytmem centroidów, służy do podziału danych wejściowych na z góry założoną liczbę klas. Jest to jeden z algorytmów stosowany w klasteryzacji (grupowaniu) i jest częścią uczenia nienadzorowanego w Machine Learning.
![](http://itcraftsman.pl/wp-content/uploads/2016/03/mnist-220x162.png)
Ogólnodostępne zbiory danych do Machine Learningu
Tak się składa, że dane i odpowiedzi jakie chcemy z nich wyciągnąć, to dwie najważniejsze rzeczy, które każdy specjalista od ML (zwany data scientist) musi posiadać, aby móc wykonywać swoją pracę. W tym wpisie przygotowałem krótki przewodnik po najpopularniejszych otwartych i ciekawych zbiorach danych.
![](http://itcraftsman.pl/wp-content/uploads/2016/03/iris_scatter-1-220x162.png)
Wydajność PHP i Machine Learning
W tym krótkim wpisie sprawdzimy, czy pod kątem wydajności, PHP nadaje się do Machine Learningu.
![](http://itcraftsman.pl/wp-content/uploads/2016/04/24530377415_1c81d35e2a_z-220x162.jpg)
Postępy w pracy nad PHP-ML
Krótkie podsumowanie pierwszych dwóch tygodni prac nad biblioteką do Machine Learningu.
![](http://itcraftsman.pl/wp-content/uploads/2016/04/composer-packagist-github-220x162.jpg)
Publikacja własnej biblioteki PHP z użyciem GitHub i Composer
Jak w szybki i prosty sposób udostępnić światu własny kawałek kodu i stać się kontrybutorem w świecie Open Source.
![](http://itcraftsman.pl/wp-content/uploads/2016/04/red_green_refactor-220x162.png)
Red Green Refactor – testy jednostkowe
Praktyczny przykład pisania testów jednostkowych z wykorzystaniem metody „Red Green Refactor”.
![](http://itcraftsman.pl/wp-content/uploads/2016/04/travis-220x162.png)
Ciągła integracja i Travis CI
W tym wpisie odpowiemy na pytania: co to jest ciągła integracja oraz jak wykonywać ją sprawnie z pomocą usługi Travis CI.
![](http://itcraftsman.pl/wp-content/uploads/2016/04/11953774924_1d3f2e50be_b-220x162.jpg)
PHP-ML – prac ciąg dalszy
Kolejne dwa tygodnie konkursu „Daj się poznać” za nami. Sprawdźmy co udało się dokonać w kwestii rozwoju biblioteki PHP-ML.
![](http://itcraftsman.pl/wp-content/uploads/2016/04/markdown-220x162.png)
Markdown – tworzenie dokumentacji projektu
Pierwszy post z serii wpisów na temat tworzenia i prowadzenia dokumentacji projektów. Skupimy się w nim na popularnym języku znaczników Markdown.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/2414864070_b9fec20328_o-220x162.jpg)
Dokumentacja projektu – pragmatyczne README.md
Zaczynasz tworzyć lub rozwijać własną bibliotekę ? Uczestniczysz w projekcie open source ? Przeczytaj jak sprawnie i dobrze stworzyć pierwszy opisowy plik README.md, który będzie zalążkiem Twojej przyszłej dokumentacji.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/storage-1209059_1280-220x162.jpg)
Dokumentacja projektu – podejście kompleksowe
Wpis zamykający krótką serię dotyczącą dokumentacji projektu. W poście tym omówię co powinna zawierać dobra dokumentacja. Dodatkowo przedstawię generowanie i hostowanie dokumentacji z wykorzystaniem bezpłatnej usługi Read the Docs. Zapraszam.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/test-986935_1280-220x162.jpg)
Code Coverage w testach jednostkowych
Parę informacji na temat Code Coverage w testach jednostkowych. Co oznaczają poszczególne metryki i jak je interpretować. Całość głównie pod kątem PHPUnit.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/code-coverage-220x162.png)
Generowanie raportu Code Coverage z PHPUnit
Krótki manual jak wygenerować raport Code Coverage używając PHPUnita. W tekście znajduje się również link do przykładowego raportu wygenerowanego dla biblioteki PHP-ML.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/business-925900_1920-220x162.jpg)
Uzupełnianie brakujących wartości – PHP-ML
Z różnych powodów, wiele zestawów danych ze świata rzeczywistego, zawiera brakujących wartości, często oznaczone jako puste pola, nulle lub inne symbole.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/balance-865089_1920-220x162.jpg)
Normalizacja danych – PHP-ML
Normalizacja to proces skalowania pojedynczych próbek w celu otrzymania małego, specyficznego przedziału. Przykładowo przekształcamy dane wejściowe w taki sposób, aby mieściły się w przedziale [-1, 1] lub [0, 1].
![](http://itcraftsman.pl/wp-content/uploads/2016/05/laboratory-1009178_1920-220x162.jpg)
Walidacja krzyżowa – RandomSplit – PHP-ML
Sprawdzian krzyżowy (z ang. cross-validation) to technika polegająca na podziale kolekcji danych wejściowych na co najmniej dwa zbiory: uczący i testowy. W ten sposób można zweryfikować czy wyuczony model będzie dobrze działał na wcześniej nie widzianych danych. Walidacja krzyżowa zapobiega również przetrenowaniu (overfitting) modelu.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/pay-1036470_1920-220x162.jpg)
Ekstrakcja danych – tokenizacja tekstu – PHP-ML
Analiza tekstu jest jednym z głównych poligonów dla zastosowań algorytmów uczenia maszynowego. Jednak surowe dane tekstowe (czyli sekwencja symboli) nie mogą być poddawane bezpośrednio pod działanie algorytmów jak większość liczbowych wektorów o stałej wielkości.
![](http://itcraftsman.pl/wp-content/uploads/2016/05/microscope-275984_1920-220x162.jpg)
Humbug – testy mutacyjne w PHP
Testy mutacyjne to narzędzie służące do analizy jakości testów jednostkowych i kodu źródłowego. Polegają one na wprowadzaniu małych zmian (mutacji) w kodzie źródłowym, a następnie sprawdzaniu, czy wpłynęły one na wyników testów (czy przestały przechodzić). Mutacje, które przetrwały (nie zostały wykryte) są potencjalnymi błędami, które nie zostałyby wykryte przez testy.
Postscriptum
Jestem mega zadowolony z tego co udało mi się zrobić i choć na końcu nie obyło się bez trudności to dotarłem szczęśliwie do końca.
Na przyszłość polecam Wam wszystkim takie inicjatywy i udział w nich bo dają dużą porcję wiedzy, motywacji i inspiracji.
Mogę śmiało powiedzieć, że najprzyjemniejszym momentem było wykorzystanie przez Mariusz Gila (@mariuszgil) fragmentu biblioteki PHP-ML w czasie jego prezentacji pt. „Holistic approach to machine learning”, która odbyła się w Bielsku-Białej na WeBB MeetUp. Dzięki Mariusz !
P.S. 2
Podsumowanie miało być dłuższe, pełne ochów i achów, dogłębnych przemyśleń i innych podobnych rzeczy, ale brakło mi czasu. Musi Wam wystarczyć to co jest 🙂 Jak tylko uda mi się poukładać parę spraw, to postaram się zrekompensować te krótkie wpisy i stworzyć kilka „grubszych” postów.