Articles

Commonly used Machine Learning Algorithms (with Python and R Codes)

Posted on

Note: This article was originally published on August 10, 2015 and updated on Sept 9, 2017

Overview

  • Główny nacisk na powszechnie stosowane algorytmy uczenia maszynowego
  • Algorytmy objęte – regresja liniowa, regresja logistyczna, Naive Bayes, kNN, Random forest, itp.
  • Naucz się zarówno teorii, jak i implementacji tych algorytmów w R i pythonie

Wprowadzenie

Samojeżdżące samochody i roboty Google’a dostają dużo prasy, ale prawdziwa przyszłość firmy leży w uczeniu maszynowym, technologii, która pozwala komputerom stać się mądrzejszymi i bardziej osobistymi.

– Eric Schmidt (Prezes Google)

Żyjemy prawdopodobnie w najbardziej definiującym okresie w historii ludzkości. Okres, w którym informatyka przeszła od wielkich mainframe’ów przez komputery PC do chmury. Ale to, co czyni go definiującym, to nie to, co się wydarzyło, ale to, co nadejdzie na naszej drodze w nadchodzących latach.

To, co czyni ten okres ekscytującym i zachwycającym dla kogoś takiego jak ja, to demokratyzacja różnych narzędzi i technik, która nastąpiła po wzroście mocy obliczeniowej. Witamy w świecie nauki o danych!

Dzisiaj, jako data scientist, mogę budować maszyny do chrupania danych ze złożonymi algorytmami za kilka dolarów na godzinę. Ale dojście do tego miejsca nie było łatwe! Miałem swoje ciemne dni i noce.

Jesteś początkującym, który szuka miejsca, aby rozpocząć swoją podróż w dziedzinie nauki o danych? Przedstawiamy dwa kompleksowe kursy, pełne wiedzy i nauki data science, stworzone właśnie dla Ciebie, abyś mógł nauczyć się data science (używając Pythona) od podstaw:

  • Introduction to Data Science
  • Certified AI & ML Blackbelt+ Program

Kto może najbardziej skorzystać z tego przewodnika?

To, co dziś rozdaję, jest prawdopodobnie najbardziej wartościowym przewodnikiem, jaki kiedykolwiek stworzyłem.

Pomysłem na stworzenie tego przewodnika jest uproszczenie podróży aspirujących naukowców danych i entuzjastów uczenia maszynowego na całym świecie. Poprzez ten przewodnik umożliwię Ci pracę nad problemami uczenia maszynowego i zdobywanie doświadczenia. Dostarczam wysokopoziomowe zrozumienie różnych algorytmów uczenia maszynowego wraz z kodami R & Python, aby je uruchomić. Powinny one wystarczyć, abyś mógł pobrudzić sobie ręce.

Esensy algorytmów uczenia maszynowego z implementacją w R i Pythonie

Celowo pominąłem statystyki stojące za tymi technikami, ponieważ nie musisz ich rozumieć na początku. Tak więc, jeśli szukasz statystycznego zrozumienia tych algorytmów, powinieneś szukać gdzie indziej. Ale, jeśli szukasz wyposażenia, aby rozpocząć budowę projektu uczenia maszynowego, czeka cię gratka.

Ogólnie, istnieją 3 rodzaje algorytmów uczenia maszynowego

Uczenie nadzorowane

Jak to działa: Algorytm ten składa się ze zmiennej docelowej / wynikowej (lub zmiennej zależnej), która ma być przewidywana na podstawie danego zestawu predyktorów (zmiennych niezależnych). Używając tego zestawu zmiennych, generujemy funkcję, która mapuje dane wejściowe do pożądanych danych wyjściowych. Proces szkolenia jest kontynuowany aż model osiągnie pożądany poziom dokładności na danych szkoleniowych. Przykłady uczenia nadzorowanego: Regresja, Drzewo decyzyjne, Las losowy, KNN, Regresja logistyczna itp.

Uczenie nienadzorowane

Jak to działa: W tym algorytmie nie mamy żadnej zmiennej docelowej lub wynikowej do przewidywania / szacowania. Jest on używany do grupowania populacji w różne grupy, co jest szeroko stosowane do segmentacji klientów w różnych grupach dla określonej interwencji. Przykłady uczenia nienadzorowanego: Algorytm Apriori, K-means.

Reinforcement Learning:

Jak to działa: Za pomocą tego algorytmu maszyna jest trenowana do podejmowania określonych decyzji. Działa to w ten sposób: maszyna jest wystawiona na działanie środowiska, w którym nieustannie trenuje się metodą prób i błędów. Maszyna ta uczy się na podstawie przeszłych doświadczeń i stara się uchwycić najlepszą możliwą wiedzę, aby podejmować trafne decyzje biznesowe. Przykład Reinforcement Learning: Markov Decision Process

Lista powszechnie stosowanych algorytmów uczenia maszynowego

Tutaj znajduje się lista powszechnie stosowanych algorytmów uczenia maszynowego. Algorytmy te mogą być zastosowane do prawie każdego problemu z danymi:

  1. Regresja liniowa
  2. Regresja logistyczna
  3. Drzewo decyzyjne
  4. SVM
  5. Naive Bayes
  6. kNN
  7. K-.Means
  8. Random Forest
  9. Algorytmy redukcji wymiarowości
  10. Algorytmy Gradient Boosting
    1. GBM
    2. XGBoost
    3. .

    4. LightGBM
    5. CatBoost

Regresja liniowa

Służy do szacowania wartości rzeczywistych (koszt domów, liczba połączeń, całkowita sprzedaż itp.) w oparciu o zmienną ciągłą (zmienne ciągłe). Tutaj ustalamy związek między zmiennymi niezależnymi i zależnymi poprzez dopasowanie najlepszej linii. Ta najlepiej dopasowana linia jest znana jako linia regresji i reprezentowana przez równanie liniowe Y= a *X + b.

Najlepszym sposobem na zrozumienie regresji liniowej jest ponowne przeżycie tego doświadczenia z dzieciństwa. Powiedzmy, że prosisz dziecko w piątej klasie, aby ułożyło ludzi w swojej klasie według rosnącej kolejności wagi, nie pytając ich o wagę! Jak myślisz, co zrobi dziecko? On / ona będzie prawdopodobnie patrzeć (wizualnie analizować) na wysokości i budowy ludzi i ułożyć je za pomocą kombinacji tych widocznych parametrów. To jest regresja liniowa w prawdziwym życiu! Dziecko faktycznie zorientowało się, że wzrost i budowa ciała są skorelowane z wagą poprzez związek, który wygląda jak powyższe równanie.

W tym równaniu:

  • Y – Zmienna zależna
  • a – Nachylenie
  • X – Zmienna niezależna
  • b – Intercept

Współczynniki a i b są wyprowadzane na podstawie minimalizacji sumy kwadratów różnicy odległości między punktami danych a linią regresji.

Spójrz na poniższy przykład. Tutaj zidentyfikowaliśmy najlepiej dopasowaną linię o liniowym równaniu y=0.2811x+13.9. Teraz używając tego równania, możemy znaleźć wagę, znając wzrost osoby.

Regresja liniowa jest głównie dwóch typów: Simple Linear Regression oraz Multiple Linear Regression. Prosta regresja liniowa charakteryzuje się jedną zmienną niezależną. I, Wielokrotna Regresja Liniowa (jak sama nazwa wskazuje) charakteryzuje się wieloma (więcej niż 1) niezależnymi zmiennymi. Znajdując najlepiej dopasowaną linię, można dopasować regresję wielomianową lub krzywoliniową. A te są znane jako regresja wielomianowa lub krzywoliniowa.

Tutaj okno kodowania, aby wypróbować swoją rękę i zbudować własny model regresji liniowej w Pythonie:

Kod R

#Load Train and Test datasets#Identify feature and response variable(s) and values must be numeric and numpy arraysx_train <- input_variables_values_training_datasetsy_train <- target_variables_values_training_datasetsx_test <- input_variables_values_test_datasetsx <- cbind(x_train,y_train)# Train the model using the training sets and check scorelinear <- lm(y_train ~ ., data = x)summary(linear)#Predict Outputpredicted= predict(linear,x_test)

Regresja logistyczna

Nie daj się zmylić jego nazwą! Jest to algorytm klasyfikacji, a nie regresji. Służy do szacowania wartości dyskretnych (wartości binarne jak 0/1, tak/nie, prawda/fałsz) w oparciu o dany zestaw zmiennych niezależnych. W prostych słowach, przewiduje prawdopodobieństwo wystąpienia zdarzenia poprzez dopasowanie danych do funkcji logit. Z tego powodu jest ona również znana jako regresja logitowa. Ponieważ przewiduje prawdopodobieństwo, jego wartości wyjściowe leżą pomiędzy 0 a 1 (zgodnie z oczekiwaniami).

Powtarzam, spróbujmy to zrozumieć na prostym przykładzie.

Powiedzmy, że twój przyjaciel daje ci zagadkę do rozwiązania. Istnieją tylko 2 scenariusze wyników – albo ją rozwiążesz, albo nie. Teraz wyobraź sobie, że dostajesz szeroki zakres zagadek / quizów w próbie zrozumienia, w których tematach jesteś dobry. Wynik tego badania byłoby coś takiego – jeśli otrzymasz trignometrii opartej dziesiąty problem klasy, jesteś 70% prawdopodobne, aby go rozwiązać. Z drugiej strony, jeśli jest to pytanie z historii klasy piątej, prawdopodobieństwo uzyskania odpowiedzi wynosi tylko 30%. To jest to, co zapewnia regresja logistyczna.

Dochodząc do matematyki, log prawdopodobieństwa wyniku jest modelowany jako liniowa kombinacja zmiennych przewidujących.

odds= p/ (1-p) = prawdopodobieństwo wystąpienia zdarzenia / prawdopodobieństwo niewystąpienia zdarzeniarenceln(odds) = ln(p/(1-p))logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk

Powyżej, p jest prawdopodobieństwem obecności interesującej nas cechy. Wybiera parametry, które maksymalizują prawdopodobieństwo zaobserwowania wartości próbki, a nie te, które minimalizują sumę kwadratów błędów (jak w zwykłej regresji).

Teraz możesz zapytać, dlaczego wziąć log? Dla uproszczenia powiedzmy tylko, że jest to jeden z najlepszych matematycznych sposobów replikowania funkcji krokowej. Mogę wejść w więcej szczegółów, ale to pokona cel tego artykułu.

Zbuduj swój własny model regresji logistycznej w Pythonie tutaj i sprawdź dokładność:

Kod R

x <- cbind(x_train,y_train)# Train the model using the training sets and check scorelogistic <- glm(y_train ~ ., data = x,family='binomial')summary(logistic)#Predict Outputpredicted= predict(logistic,x_test)

Ponadto….

Istnieje wiele różnych kroków, które można wypróbować, aby poprawić model:

  • włączenie terminów interakcyjnych
  • usuwanie cech
  • techniki randomizacji
  • wykorzystanie modelu nieliniowego

Drzewo decyzyjne

Jest to jeden z moich ulubionych algorytmów i używam go dość często. Jest to rodzaj algorytmu uczenia nadzorowanego, który jest najczęściej używany do problemów z klasyfikacją. Co zaskakujące, działa on zarówno dla kategorycznych, jak i ciągłych zmiennych zależnych. W tym algorytmie, dzielimy populację na dwa lub więcej jednorodnych zestawów. Odbywa się to w oparciu o najbardziej znaczące atrybuty / zmienne niezależne, aby stworzyć tak odrębne grupy, jak to możliwe. Aby uzyskać więcej szczegółów, możesz przeczytać: Decision Tree Simplified.

source: statsexchange

Na powyższym obrazku widać, że populacja jest klasyfikowana do czterech różnych grup na podstawie wielu atrybutów w celu określenia „czy będą grać, czy nie”. Aby podzielić populację na różne heterogeniczne grupy, używa się różnych technik, takich jak Gini, Information Gain, Chi-square, entropia.

Najlepszym sposobem na zrozumienie, jak działa drzewo decyzyjne, jest zagranie w Jezzball – klasyczną grę od Microsoftu (obrazek poniżej). Zasadniczo, masz pokój z ruchomymi ścianami i musisz tworzyć takie ściany, aby maksymalny obszar został oczyszczony z kulek.

Więc, za każdym razem, gdy dzielisz pokój ścianą, próbujesz stworzyć 2 różne populacje w tym samym pokoju. Drzewa decyzyjne działają w bardzo podobny sposób, dzieląc populację na tak różne grupy, jak to tylko możliwe.

Więcej: Uproszczona wersja algorytmów drzew decyzyjnych

Zabrudnijmy sobie ręce i zakodujmy własne drzewo decyzyjne w Pythonie!

Kod R

library(rpart)x <- cbind(x_train,y_train)# grow tree fit <- rpart(y_train ~ ., data = x,method="class")summary(fit)#Predict Output predicted= predict(fit,x_test)

SVM (Support Vector Machine)

Jest to metoda klasyfikacji. W tym algorytmie, każdy element danych jest wykreślany jako punkt w n-wymiarowej przestrzeni (gdzie n to liczba cech, które posiadamy), a wartość każdej cechy jest wartością danej współrzędnej.

Na przykład, gdybyśmy mieli tylko dwie cechy, takie jak wysokość i długość włosów osobnika, najpierw wykreślilibyśmy te dwie zmienne w przestrzeni dwuwymiarowej, gdzie każdy punkt ma dwie współrzędne (te współrzędne są znane jako wektory wsparcia)

Teraz znajdziemy pewną linię, która dzieli dane między dwie różnie sklasyfikowane grupy danych. Będzie to linia taka, że odległości od najbliższego punktu w każdej z dwóch grup będą najdalej od siebie.

W przykładzie pokazanym powyżej, linią, która dzieli dane na dwie różnie sklasyfikowane grupy jest czarna linia, ponieważ dwa najbliższe punkty są najdalej od niej oddalone. Ta linia jest naszym klasyfikatorem. Następnie, w zależności od tego, gdzie dane testowe wylądują po obu stronach linii, do jakiej klasy możemy zaklasyfikować nowe dane.

Więcej: Simplified Version of Support Vector Machine

Pomyśl o tym algorytmie jak o grze w JezzBall w n-wymiarowej przestrzeni. Zmiany w grze są następujące:

  • Możesz rysować linie/płaszczyzny pod dowolnym kątem (a nie tylko poziomo lub pionowo jak w klasycznej grze)
  • Celem gry jest posegregowanie kulek o różnych kolorach w różnych pomieszczeniach.
  • A kulki nie są ruchome.

Spróbuj swoich sił i zaprojektuj model SVM w Pythonie poprzez to okno kodowania:

Kod R

library(e1071)x <- cbind(x_train,y_train)# Fitting modelfit <-svm(y_train ~ ., data = x)summary(fit)#Predict Output predicted= predict(fit,x_test)

Naive Bayes

Jest to technika klasyfikacji oparta na twierdzeniu Bayesa z założeniem niezależności między predyktorami. W prostych słowach, klasyfikator Naive Bayes zakłada, że obecność danej cechy w klasie jest niezwiązana z obecnością jakiejkolwiek innej cechy. Na przykład, owoc może być uznany za jabłko, jeśli jest czerwony, okrągły i ma około 3 cale średnicy. Nawet jeśli te cechy zależą od siebie nawzajem lub od istnienia innych cech, naiwny klasyfikator Bayesa uznałby wszystkie te właściwości za niezależnie przyczyniające się do prawdopodobieństwa, że ten owoc jest jabłkiem.

Naiwny model Bayesa jest łatwy w budowie i szczególnie przydatny dla bardzo dużych zbiorów danych. Wraz z prostotą, Naive Bayes jest znany z tego, że przewyższa nawet bardzo wyrafinowane metody klasyfikacji.

Twierdzenie Bayesa dostarcza sposobu na obliczenie prawdopodobieństwa potomnego P(c|x) z P(c), P(x) i P(x|c). Spójrz na poniższe równanie:

Tutaj,

  • P(c|x) jest prawdopodobieństwem potomnym klasy (celu) biorąc pod uwagę predyktor (atrybut).
  • P(c) jest wcześniejszym prawdopodobieństwem klasy.
  • P(x|c) jest prawdopodobieństwem, które jest prawdopodobieństwem predyktora danego przez klasę.
  • P(x) jest wcześniejszym prawdopodobieństwem predyktora.

Przykład: Zrozumiejmy to na przykładzie. Poniżej mam zestaw danych treningowych pogody i odpowiadającą im zmienną docelową „Play”. Teraz musimy sklasyfikować, czy gracze będą grać, czy nie, w oparciu o warunki pogodowe. Wykonajmy poniższe kroki, aby to zrobić.

Krok 1: Przekonwertuj zestaw danych do tabeli częstotliwości

Krok 2: Stwórz tabelę prawdopodobieństwa poprzez znalezienie prawdopodobieństw takich jak prawdopodobieństwo zachmurzenia = 0.29 i prawdopodobieństwo gry wynosi 0.64.

Krok 3: Teraz, użyj równania Naive Bayesian, aby obliczyć prawdopodobieństwo następcze dla każdej klasy. Klasa z najwyższym prawdopodobieństwem jest wynikiem predykcji.

Problem: Gracze zapłacą jeśli pogoda jest słoneczna, czy to stwierdzenie jest poprawne?

Możemy to rozwiązać używając wyżej omówionej metody, więc P(Tak | Słoneczny) = P( Słoneczny | Tak) * P(Tak) / P (Słoneczny)

Mamy P (Słoneczny | Tak) = 3/9 = 0.33, P(Sunny) = 5/14 = 0.36, P( Yes)= 9/14 = 0.64

Teraz, P (Yes | Sunny) = 0.33 * 0.64 / 0.36 = 0.60, co ma wyższe prawdopodobieństwo.

Naive Bayes używa podobnej metody do przewidywania prawdopodobieństwa różnych klas na podstawie różnych atrybutów. Algorytm ten jest najczęściej używany w klasyfikacji tekstu i przy problemach z wieloma klasami.

Kodowanie modelu klasyfikacji Naive Bayes w Pythonie:

Kod R

library(e1071)x <- cbind(x_train,y_train)# Fitting modelfit <-naiveBayes(y_train ~ ., data = x)summary(fit)#Predict Output predicted= predict(fit,x_test)

kNN (k- Nearest Neighbors)

Może być używany zarówno do problemów z klasyfikacją jak i regresją. Jest jednak szerzej stosowany w problemach klasyfikacyjnych w przemyśle. K najbliższych sąsiadów jest prostym algorytmem, który przechowuje wszystkie dostępne przypadki i klasyfikuje nowe przypadki przez większość głosów jego k sąsiadów. Przypadek przypisywany do klasy jest najbardziej powszechny wśród jego K najbliższych sąsiadów mierzonych przez funkcję odległości.

Te funkcje odległości mogą być Euklidesowe, Manhattan, Minkowski i Hamming odległość. Pierwsze trzy funkcje są używane dla funkcji ciągłych, a czwarta (Hamminga) dla zmiennych kategorycznych. Jeśli K = 1, to przypadek jest po prostu przypisywany do klasy najbliższego sąsiada. Czasami wybór K okazuje się być wyzwaniem podczas wykonywania modelowania kNN.

Więcej: Wprowadzenie do k-nearest neighbors : Simplified.

KNN można łatwo odwzorować na nasze prawdziwe życie. Jeśli chcesz dowiedzieć się czegoś o osobie, o której nie masz żadnych informacji, możesz dowiedzieć się o jej bliskich znajomych i kręgach, w których się porusza i uzyskać dostęp do jej informacji!

Rzeczy do rozważenia przed wyborem kNN:

  • KNN jest kosztowny obliczeniowo
  • Zmienne powinny być znormalizowane, w przeciwnym razie zmienne o wyższym zakresie mogą go uprzedzić
  • Pracuje nad etapem przetwarzania wstępnego więcej przed pójściem do kNN, jak w przypadku wartości odstających, usuwanie szumu

Kod Pythona

Kod R

library(knn)x <- cbind(x_train,y_train)# Fitting modelfit <-knn(y_train ~ ., data = x,k=5)summary(fit)#Predict Output predicted= predict(fit,x_test)

K-Means

Jest to rodzaj algorytmu bez nadzoru, który rozwiązuje problem grupowania. Jego procedura polega na prostym i łatwym sposobie klasyfikacji danego zbioru danych poprzez określoną liczbę klastrów (załóżmy k klastrów). Punkty danych wewnątrz klastra są homogeniczne i heterogeniczne w stosunku do grup rówieśniczych.

Pamiętasz odczytywanie kształtów z plam atramentu? k oznacza, że ta aktywność jest nieco podobna. Patrzysz na kształt i rozprzestrzenianie się, aby rozszyfrować, ile różnych klastrów / populacji jest obecnych!

Jak K-średnich tworzy klastry:

  1. K-średnich wybiera k liczbę punktów dla każdego klastra, znanych jako centroidy.
  2. Każdy punkt danych tworzy klaster z najbliższymi centroidami, tj. k klastrów.
  3. Znajduje centroid każdego klastra w oparciu o istniejących członków klastra. Tutaj mamy nowe centroidy.
  4. Jako że mamy nowe centroidy, powtórz kroki 2 i 3. Znajdź najbliższą odległość dla każdego punktu danych od nowych centroidów i uzyskaj powiązanie z nowymi k-klastrami. Powtarzaj ten proces aż do osiągnięcia zbieżności, tj. centroidy nie ulegną zmianie.

Jak określić wartość K:

W K-średnich mamy klastry i każdy klaster ma swój centroid. Suma kwadratów różnicy między centroidem a punktami danych w klastrze stanowi wartość sumy kwadratów dla tego klastra. Również, gdy suma kwadratów wartości dla wszystkich klastrów jest dodana, staje się całkowitą sumą kwadratów wartości dla rozwiązania klastra.

Wiemy, że wraz ze wzrostem liczby klastrów, wartość ta maleje, ale jeśli wykreślisz wynik, możesz zobaczyć, że suma kwadratów odległości spada gwałtownie do pewnej wartości k, a następnie znacznie wolniej. Tutaj możemy znaleźć optymalną liczbę klastrów.

Kod Pythona

Kod języka R

library(cluster)fit <- kmeans(X, 3) # 5 cluster solution

Las losowy

Las losowy to termin określający zespół drzew decyzyjnych. W Random Forest, mamy zbiór drzew decyzyjnych (tzw. „Las”). Aby sklasyfikować nowy obiekt na podstawie atrybutów, każde drzewo podaje klasyfikację i mówimy, że drzewo „głosuje” za tą klasą. Las wybiera klasyfikację, która ma najwięcej głosów (wśród wszystkich drzew w lesie).

Każde drzewo jest sadzone & uprawiane w następujący sposób:

  1. Jeśli liczba przypadków w zbiorze treningowym wynosi N, to próbka N przypadków jest pobierana losowo, ale z zastąpieniem. Ta próbka będzie zbiorem treningowym do wzrostu drzewa.
  2. Jeśli jest M zmiennych wejściowych, to określana jest liczba m<<M taka, że w każdym węźle, m zmiennych jest wybieranych losowo z M i najlepszy podział na tych m jest używany do podziału węzła. Wartość m jest utrzymywana na stałym poziomie podczas wzrostu lasu.
  3. Każde drzewo jest uprawiane w największym możliwym zakresie. Nie ma przycinania.

Aby uzyskać więcej szczegółów na temat tego algorytmu, porównania z drzewem decyzyjnym i dostrajania parametrów modelu, proponuję przeczytać te artykuły:

  1. Wprowadzenie do Random Forest – Uproszczone

  2. Porównanie modelu CART z Random Forest (cz. 1)

  3. Porównanie m.in. modelu Random Forest do modelu CART (Część 2)

  4. Dostrajanie parametrów modelu Random Forest

Kod Pythona:

R Code

library(randomForest)x <- cbind(x_train,y_train)# Fitting modelfit <- randomForest(Species ~ ., x,ntree=500)summary(fit)#Predict Output predicted= predict(fit,x_test)

Algorytmy redukcji wymiarowości

W ciągu ostatnich 4-5 lat nastąpił wykładniczy wzrost przechwytywania danych na każdym możliwym etapie. Korporacje / Agencje rządowe / Organizacje badawcze nie tylko przychodzą z nowymi źródłami, ale także przechwytują dane w bardzo szczegółowy sposób.

Na przykład: Firmy e-commerce przechwytują więcej szczegółów na temat klientów, takich jak ich dane demograficzne, historia indeksowania stron internetowych, co lubią lub nie lubią, historia zakupów, opinie i wiele innych, aby dać im spersonalizowaną uwagę bardziej niż najbliższy sklep spożywczy.

Jako naukowiec danych, dane, które są nam oferowane, również składają się z wielu funkcji, to brzmi dobrze do budowania dobrego solidnego modelu, ale jest wyzwanie. Jak zidentyfikować wysoce znaczącą zmienną (zmienne) z 1000 lub 2000? W takich przypadkach, algorytm redukcji wymiarowości pomaga nam wraz z różnymi innymi algorytmami jak Drzewo decyzyjne, Las losowy, PCA, Analiza czynnikowa, Identyfikacja na podstawie macierzy korelacji, współczynnik brakujących wartości i inne.

Aby dowiedzieć się więcej o tych algorytmach, możesz przeczytać „Beginners Guide To Learn Dimension Reduction Techniques”.

Kod Pythona

Kod R

library(stats)pca <- princomp(train, cor = TRUE)train_reduced <- predict(pca,train)test_reduced <- predict(pca,test)

Algorytmy Gradient Boosting

10.1. GBM

GBM jest algorytmem boostingu stosowanym, gdy mamy do czynienia z dużą ilością danych, aby dokonać predykcji o dużej mocy predykcyjnej. Boosting jest w rzeczywistości zespołem algorytmów uczenia się, który łączy predykcję kilku estymatorów bazowych w celu poprawy odporności w stosunku do pojedynczego estymatora. Łączy on wiele słabych lub przeciętnych predyktorów, aby zbudować silny predyktor. Te algorytmy boostingowe zawsze dobrze sprawdzają się w konkursach data science, takich jak Kaggle, AV Hackathon, CrowdAnalytix.

Więcej: Poznaj algorytmy Boosting w szczegółach

Kod Pythona

Kod R

library(caret)x <- cbind(x_train,y_train)# Fitting modelfitControl <- trainControl( method = "repeatedcv", number = 4, repeats = 4)fit <- train(y ~ ., data = x, method = "gbm", trControl = fitControl,verbose = FALSE)predicted= predict(fit,x_test,type= "prob") 

GradientBoostingClassifier i Random Forest to dwa różne klasyfikatory drzew boostingowych i często ludzie pytają o różnicę między tymi dwoma algorytmami.

10.2. XGBoost

Kolejny klasyczny algorytm gradientowy, który jest znany jako decydujący wybór między wygraną a przegraną w niektórych konkursach Kaggle.

XGBoost ma niezwykle wysoką moc predykcyjną, co czyni go najlepszym wyborem dla dokładności w wydarzeniach, ponieważ posiada zarówno model liniowy, jak i algorytm uczenia się drzewa, dzięki czemu algorytm jest prawie 10x szybszy niż istniejące techniki gradientowe.

Wsparcie obejmuje różne funkcje celu, w tym regresję, klasyfikację i ranking.

Jedną z najciekawszych rzeczy na temat XGBoost jest to, że jest również nazywany regularną techniką boostingu. Pomaga to zmniejszyć modelowanie overfit i ma ogromne wsparcie dla wielu języków, takich jak Scala, Java, R, Python, Julia i C++.

Obsługuje rozproszone i powszechne szkolenie na wielu maszynach, które obejmują klastry GCE, AWS, Azure i Yarn. XGBoost może być również zintegrowany ze Spark, Flink i innymi systemami przepływu danych w chmurze z wbudowaną walidacją krzyżową w każdej iteracji procesu boostingu.

Aby dowiedzieć się więcej o XGBoost i dostrajaniu parametrów, odwiedź https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/.

Kod Pythona:


Kod R:

require(caret)x <- cbind(x_train,y_train)# Fitting modelTrainControl <- trainControl( method = "repeatedcv", number = 10, repeats = 4)model<- train(y ~ ., data = x, method = "xgbLinear", trControl = TrainControl,verbose = FALSE)OR model<- train(y ~ ., data = x, method = "xgbTree", trControl = TrainControl,verbose = FALSE)predicted <- predict(model, x_test)

10.3. LightGBM

LightGBM to framework gradient boosting, który wykorzystuje algorytmy uczenia oparte na drzewie. Został zaprojektowany tak, aby był rozproszony i wydajny z następującymi zaletami:

  • Szybsze tempo szkolenia i wyższa wydajność
  • Mniejsze zużycie pamięci
  • Większa dokładność
  • Wspierane uczenie równoległe i na GPU
  • Możliwość obsługi danych o dużej skali

Ramework jest szybkim i wysokowydajnym gradient boostingiem opartym na algorytmach drzew decyzyjnych, używanym do rankingów, klasyfikacji i wielu innych zadań uczenia maszynowego. Został on opracowany w ramach projektu Distributed Machine Learning Toolkit Project firmy Microsoft.

Ponieważ LightGBM jest oparty na algorytmach drzew decyzyjnych, rozdziela on drzewo na liście z najlepszym dopasowaniem, podczas gdy inne algorytmy boostingu rozdzielają drzewo na głębokość lub poziom, a nie na liście. Tak więc, gdy rośnie na tym samym liściu w Light GBM, algorytm leaf-wise może zredukować więcej strat niż algorytm level-wise i stąd wynika znacznie lepsza dokładność, która rzadko może być osiągnięta przez którykolwiek z istniejących algorytmów boostingowych.

Jest również zaskakująco bardzo szybki, stąd słowo „Light”.

Zapoznaj się z artykułem, aby dowiedzieć się więcej o LightGBM: https://www.analyticsvidhya.com/blog/2017/06/which-algorithm-takes-the-crown-light-gbm-vs-xgboost/

Kod Pythona:

data = np.random.rand(500, 10) # 500 entities, each contains 10 featureslabel = np.random.randint(2, size=500) # binary targettrain_data = lgb.Dataset(data, label=label)test_data = train_data.create_valid('test.svm')param = {'num_leaves':31, 'num_trees':100, 'objective':'binary'}param = 'auc'num_round = 10bst = lgb.train(param, train_data, num_round, valid_sets=)bst.save_model('model.txt')# 7 entities, each contains 10 featuresdata = np.random.rand(7, 10)ypred = bst.predict(data)

Kod R:

library(RLightGBM)data(example.binary)#Parametersnum_iterations <- 100config <- list(objective = "binary", metric="binary_logloss,auc", learning_rate = 0.1, num_leaves = 63, tree_learner = "serial", feature_fraction = 0.8, bagging_freq = 5, bagging_fraction = 0.8, min_data_in_leaf = 50, min_sum_hessian_in_leaf = 5.0)#Create data handle and boosterhandle.data <- lgbm.data.create(x)lgbm.data.setField(handle.data, "label", y)handle.booster <- lgbm.booster.create(handle.data, lapply(config, as.character))#Train for num_iterations iterations and eval every 5 stepslgbm.booster.train(handle.booster, num_iterations, 5)#Predictpred <- lgbm.booster.predict(handle.booster, x.test)#Test accuracysum(y.test == (y.pred > 0.5)) / length(y.test)#Save model (can be loaded again via lgbm.booster.load(filename))lgbm.booster.save(handle.booster, filename = "/tmp/model.txt")

Jeśli jesteś zaznajomiony z pakietem Caret w R, jest to inny sposób implementacji LightGBM.

require(caret)require(RLightGBM)data(iris)model <-caretModel.LGBM()fit <- train(Species ~ ., data = iris, method=model, verbosity = 0)print(fit)y.pred <- predict(fit, iris)library(Matrix)model.sparse <- caretModel.LGBM.sparse()#Generate a sparse matrixmat <- Matrix(as.matrix(iris), sparse = T)fit <- train(data.frame(idx = 1:nrow(iris)), iris$Species, method = model.sparse, matrix = mat, verbosity = 0)print(fit)

10.4. Catboost

CatBoost to niedawno udostępniony algorytm uczenia maszynowego firmy Yandex. Może on łatwo integrować się z frameworkami głębokiego uczenia, takimi jak Google’s TensorFlow i Apple’s Core ML.

Najlepszą częścią CatBoost jest to, że nie wymaga on obszernego szkolenia danych, jak inne modele ML, i może pracować na różnych formatach danych; nie podważając tego, jak solidny może być.

Upewnij się, że dobrze radzisz sobie z brakującymi danymi, zanim przystąpisz do implementacji.

Catboost może automatycznie radzić sobie ze zmiennymi kategorycznymi bez pokazywania błędu konwersji typu, co pomaga skupić się na lepszym dostrajaniu modelu, a nie sortowaniu trywialnych błędów.

Dowiedz się więcej o Catboost z tego artykułu: https://www.analyticsvidhya.com/blog/2017/08/catboost-automated-categorical-data/

Kod Pythona:

import pandas as pdimport numpy as npfrom catboost import CatBoostRegressor#Read training and testing filestrain = pd.read_csv("train.csv")test = pd.read_csv("test.csv")#Imputing missing values for both train and testtrain.fillna(-999, inplace=True)test.fillna(-999,inplace=True)#Creating a training set for modeling and validation set to check model performanceX = train.drop(, axis=1)y = train.Item_Outlet_Salesfrom sklearn.model_selection import train_test_splitX_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.7, random_state=1234)categorical_features_indices = np.where(X.dtypes != np.float)#importing library and building modelfrom catboost import CatBoostRegressormodel=CatBoostRegressor(iterations=50, depth=3, learning_rate=0.1, loss_function='RMSE')model.fit(X_train, y_train,cat_features=categorical_features_indices,eval_set=(X_validation, y_validation),plot=True)submission = pd.DataFrame()submission = testsubmission = testsubmission = model.predict(test)

Kod R:

set.seed(1)require(titanic)require(caret)require(catboost)tt <- titanic::titanic_traindata <- as.data.frame(as.matrix(tt), stringsAsFactors = TRUE)drop_columns = c("PassengerId", "Survived", "Name", "Ticket", "Cabin")x <- datay <- datafit_control <- trainControl(method = "cv", number = 4,classProbs = TRUE)grid <- expand.grid(depth = c(4, 6, 8),learning_rate = 0.1,iterations = 100, l2_leaf_reg = 1e-3, rsm = 0.95, border_count = 64)report <- train(x, as.factor(make.names(y)),method = catboost.caret,verbose = TRUE, preProc = NULL,tuneGrid = grid, trControl = fit_control)print(report)importance <- varImp(report, scale = FALSE)print(importance)

Projekty

Teraz nadszedł czas, aby zanurzyć się i faktycznie grać z innymi prawdziwymi zestawami danych. Więc czy jesteś gotowy podjąć wyzwanie? Przyspiesz swoją podróż w dziedzinie nauki o danych dzięki następującym problemom praktycznym:

Problem praktyczny: Food Demand Forecasting Challenge Przewidywanie popytu na posiłki dla firmy dostarczającej posiłki
Problem praktyczny: HR Analytics Challenge Identyfikacja pracowników, którzy mają największe szanse na awans
Problem praktyczny: Predict Number of Upvotes Predict number of upvotes on a query asked at an online question & answer platform

End Notes

Do tej pory, Jestem pewien, że masz już pojęcie o powszechnie stosowanych algorytmach uczenia maszynowego. Moją jedyną intencją przy pisaniu tego artykułu i dostarczaniu kodów w R i Pythonie jest to, abyś mógł zacząć od razu. Jeśli jesteś chętny do opanowania uczenia maszynowego, zacznij od razu. Podejmuj problemy, rozwijaj fizyczne zrozumienie procesu, zastosuj te kody i zobacz, jaka to frajda!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *