Coraz więcej danych
Nie mam dzisiaj weny dlatego od razu przejdziemy do tematu. Poniżej slajd "pożyczony" z innej prezentacji. Widzimy na nim, że ilość przechowywanych danych rośnie i to rośnie bardzo a nawet niezwykle bardzo. Można zrobić na tym biznes a słowo klucz do tego biznesu to BIG DATA
Aby przetworzyć takie ilości danych potrzeba i infrastruktury i czegoś co będzie na tej infrastrukturze działać
Mahout ma wsparcie dla hadoopa toteż jest przygotowany na pracę z ogromnymi ilościami danych.
Mahout jest fajny bo na początku nie wymaga od nas znajomości skomplikowanej matematyki. To trochę tak jak metoda Collections.sort - Do codziennego użytkowania nawet nie musimy mieć świadomości jak ona jest zaimplementowana. Jednakże gdy sortowanie staje się krytycznym elementem naszej aplikacji, wtedy musimy zejść głębiej. Podobnie jest z Mahout i Machine Learning.
Jak prosto zacząć - rekomendacje
Poniżej przykładowy kod służący do rekomendacji.
private List calculateGenericReccomendations() throws TasteException {
//1
final JDBCDataModel booksReccomendationModel = new MySQLJDBCDataModel(dataSource, "UserBookPreferences", "userId", "bookId",
"preferences", null);
//2
final UserSimilarity similarity = new EuclideanDistanceSimilarity(booksReccomendationModel);
//3
final int howManyUsersInNeighbourhood = 2;
final UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(howManyUsersInNeighbourhood, similarity,
booksReccomendationModel);
//4
final Recommender recommender = new GenericUserBasedRecommender(booksReccomendationModel, userNeighborhood, similarity);
final int userIDForReccomendation = 5;
final int howManyThingsToReccomendation = 3;
final List recommendations = recommender.recommend(userIDForReccomendation, howManyThingsToReccomendation);
return recommendations;
}
-
Zaczynamy od specyfikacji modelu danych. W tym przypadku model znajduje się w bazie danych. Forma jest prosta :
id_uzytkownika id_ksiazki ocena - Określamy podobieństwo pomiędzy użytkownikami. Idea jest ponownie dosyć prosta. Najpierw preferencje musimy przepisać na dane w układzie współrzędnym a następnie obliczamy odległość pomiędzy konkretnymi punktami. Tak zachowuje się metryka Euklidesowa wybrana w tym przypadku - użycie innej implementacji to zmiana w dosłownie jednej linijce.
- Bardzo prosty krok. Ustalamy na jakiej zasadzie określimy czy użytkownicy są do siebie podobni. Tutaj bierzemy dwóch najbliższych.
- Wrzucamy do kotła i w zasadzie gotowe. Jeśli mamy odpowiednie dane w modelu to wtedy powinniśmy otrzymać listę trzech rekomendowanych pozycji dla danego użytkownika. Ponieważ widziałem już w swoim życiu upośledzone systemy rekomendacji oparte na Random.nextInt, więc sposób przedstawiony powyżej wydaje się dosyć sensowny. Inne ciekawe pola, na których może sprawdzic się mahout to klastrowanie i klasyfikacjia
Jest jeszcze moja prezentacja z JUGa ale tym razem nie mieliśmy porządnej kamerki dlatego niewiele widać( i słychać).
Brak komentarzy:
Prześlij komentarz