Zdjęcie: https://unsplash.com/photos/w7ZyuGYNpRQ
W tym artykule zajmiemy się podstawami uczenia maszynowego, oraz omówimy jego różne gałęzie. Zastanowimy się kiedy należy skorzystać z algorytmu uczenia nadzorowanego i nienadzorowanego, oraz przeanalizujemy ich mocne i słabe strony.
Uczenie maszynowe – kilka słów wprowadzenia
Istnieje wiele różnych definicji uczenia maszynowego:
“Machine learning is the study of computer algorithms that allow computer programs to automatically improve through experience. (Tom Mitchell, 1997)”
“The field of study that gives computers the ability to learn without being explicitly programmed. (Arthur Samuel, 1959)”
W skrócie uczenie maszynowe jest to gałąź sztucznej inteligencji, gdzie systemy komputerowe są w stanie uczyć się oraz dostosowywać wykorzystując algorytmy i modele statystyczne do analizowania i wyciągania wniosków danych. Wyróżniamy cztery główne rodzaje algorytmów uczenia maszynowego:
- Nienadzorowane (ang. Supervised Learning)
- Nadzorowane (ang. Unsupervised Learning)
- Częściowo Nadzorowane (ang. Semi-supervised Learning)
- Ze wzmocnieniem (ang. Reinforcement Learning)
W tym poście przyjrzymy się dwóm pierwszym i wspomnimy o mniej popularnym uczeniu częściowo nadzorowanym.
Uczenie nadzorowane
Uczenie nadzorowane opiera się o zbiory danych, gdzie mam zarówno próbki (ang. Samples) oraz odpowiadające im etykiety (ang. Labels). Z takiego zbioru tworzymy matematyczny model, który podczas trenowania na wejściu otrzymuje daną wejściową, czyli próbkę, a na wyjściu odpowiadającą jej etykietę. Uczenie Nadzorowane można podzielić na dwa główne typy:
- Klasyfikacja – algorytm przypisuje dane wejściowe do jednej (lub wielu) z góry określonych kategorii – etykiet, na podstawie wzorców, których uczy się ze zbioru uczącego. Najlepiej to zrozumieć na prostym przykładzie. Powiedzmy, że chcemy zbudować klasyfikator, który na wejście będzie rozpoznawał zdjęcia kotów. Nasz zbiór danych wejściowych składa się wtedy ze zdjęć, natomiast etykiety reprezentują fakt, czy na zdjęciu jest kot, czy też nie. Powiedzmy 1 – zdjęcie kota i 0 – to nie jest zdjęcie kota. Nasz model następnie na podstawie zaprezentowanych mu zdjęć kota wyciągnie wnioski jakie własności musi mieć zdjęcie, aby je zaklasyfikować jako kot (np. na zdjęciu musi być zarys twarzy kota składający się z par oczu i szpiczastych uszu, lub wyraźny, puszysty ogon futrzaka). Poprawnie wytrenowany model jest w stanie generalizować, czyli rozpoznawać zdjęcia kotów, których wcześniej nie widział.
- Regresja – kolejny algorytm uczenia nadzorowanego. Metoda wykorzystuje algorytm do zrozumienia relacji między próbkami, a etykietami. Modele regresji liniowych są przydatne do wyznaczania wartości liczbowych na podstawie danych. Przykładem może być próba predykcji cen akcji na podstawie danych z przeszłości. W takim przypadku nasz zbiór danych uczących składa się na przykład z ceny akcji z ostatnich siedmiu dni – próbki, oraz ceny akcji z dnia dzisiejszego – etykiety. Podobnie jak w poprzednim przykładzie, poprawnie skonstruowany model będzie w stanie w pewnym stopniu poprawnie odwzorowywać ceny akcji w rzeczywistości.
Poniżej znajduje się lista popularnych algorytmów uczenia nadzorowanego. Nie będziemy ich omawiać, ponieważ to wykracza poza założenia tego artykułu. Dla zainteresowanych zamieszczamy jednak linki do objaśnień zasady działania każdego z nich.
- K Najbliższych Sąsiadów (ang. K-Nearest Neighbor – KNN)
- Wektory Nośne (ang. Support Vector Machine – SVM)
- Regresja Liniowa (ang. Linear Regression)
- Regresja Logistyczna (ang. Logistic Regression)
- Liniowa Analiza Dyskryminacyjna (ang. Linear Discriminant Analysis – LDA)
- Drzewa Decyzyjne (ang. Decidion Trees)
- Naiwny Klasyfikator Bayesowski (ang. Naive Bayes)
- Sieci Neuronowe (ang. Neural Networks – NN) Tu akurat jest bardzo przyjemna seria na YouTubie
Uczenie nadzorowane ma również swoje wady. Po pierwsze, tak jak wcześniej wspomnieliśmy, wymagany jest zbiór danych z przygotowanymi etykietami. W dużej ilości przypadków proces etykietowania jest mozolny i kosztowny na tyle, że istnieją specjalne firmy, które zajmują się dostarczaniem etykiet do danych. Sam proces obróbki danych (ang. pre-processing) też może sprawić wiele kłopotów. Biorąc pod uwagę ogromną ilość nienadzorowanych danych (danych bez etykiet), które nieustannie wszyscy generują swoja aktywnością online, uczenie nadzorowane może się wydawać marnotrawieniem danych.
Kolejne ograniczenie wynika z samego założenia uczenia nadzorowanego. Jego celem jest wydobywanie i replikowanie relacji w istniejących danych. Wynika to z twierdzenia o uniwersalnej aproksymacji, które mówi, że nawet jednowarstwowa sieć neuronowa jest w stanie aproksymować dowolną funkcję ciągłą (jednak w praktyce nie działa to aż tak dobrze). Oznacza to, że modele uczenia nadzorowanego są na tyle “mądre”, na ile “mądry” jest zbiór na którym model się uczy. Tworzy to pewne ograniczenie. Załóżmy, że chcemy stworzyć model, którego zadaniem będzie gra w szachy, czyli po prostu budujemy silnik szachowy. Do tego zadania chcemy skorzystać z uczenia nadzorowanego, czyli tworzymy zbiór uczący składający się z zapisanych rozgrywek arcymistrzów szachowych. Daną wejściową do naszego modelu będzie stan planszy, a etykietą następny optymalny ruch zawodnika. Po sesji treningowej nasz model w najlepszym przypadku będzie grał z dokładnością najlepszego człowieka. Jest to bariera, której nie możemy pokonać korzystając z uczenia nadzorowanego.
Podsumowując, uczenie nadzorowane polega na uogólnianiu związków w danych. Iluzja “inteligencji” jest tak na prawdę bardzo dobrą wyszukiwarką relacji w danych zarówno liniowych jak i nieliniowych. Istnieje ograniczenie co do tego, jak dobrze algorytmy nadzorowane mogą wykonywać swoje zadanie (100%). Modele uczenia nadzorowanego są przeznaczone do jednego konkretnego zadania. Model służący do rozpoznawania na zdjęciach kotów nie poradzi sobie z rozpoznawaniem innych obiektów na przykład psów.
Uczenie nienadzorowane
Uczenie nienadzorowane, w przeciwieństwie do nadzorowanego, nie korzysta ze zbioru etykiet. Algorytmy i modele wykrywają ukryte wzorce w danych bez potrzeby interwencji człowieka (stąd nazwa „nienadzorowane”). Algorytmy uczenia nienadzorowanego wykorzystuje się do trzech głównych zadań:
- Klastrowanie – to technika do grupowania nieoznaczonych danych na podstawie ich podobieństw i różnic. Algorytm dzieli dane na ustaloną wcześniej liczbę klastrów w taki sposób, że próbki w danej grupie są do siebie podobne bardziej niż próbki w innych grupach. Klastrowanie znajduje zastosowanie w wielu dziedzinach, na przykład w wyszukiwarkach internetowych, gdzie grupuje się wyniki wyszukiwania na podstawie podobieństw, a tym samym znacznie poprawa wydajność wyszukiwania.
- Metoda Asocjacyjna – wykorzystuje różne reguły do znajdowania relacji między zmiennymi w danym zbiorze danych. Swoje zastosowanie znajduje w systemach rekomendacyjnych, gdzie łączy się w grupy rzeczy, które często użytkownicy kupują razem.
- Redukcja Wymiarowości – stosowana w przypadku, gdy dane wejściowe posiadają zbyt dużą liczbę cech. Polega na zmniejszeniu liczby cech w danych, przy akceptowalnym uszczerbku na informacji przenoszonej w danych. Mniejsza ilość danych wejściowych przyspiesza działanie algorytmu. Zjawisko zbyt dużej ilości cech w danych określa się mianem “Klątwy Wymiarowości”. Jest to problem ponieważ w przypadku, gdy dane mają więcej cech niż obserwacji, ryzykujemy silnym przeuczeniem modelu, co prowadzi do jego fatalnych wyników na danych, których jeszcze nie widział. Innymi słowy, zamiast generalizować, model zapamiętuje odpowiedzi do danych.
Podobnie jak w przypadku uczenia nadzorowanego poniżej zamieszczamy listę algorytmów, która opiera się na uczeniu nienadzorowanym.
Jedną z wad uczenia się bez nadzoru jest to, że jest ono bardziej kosztowne niż w przypadku nauki z nadzorem, ponieważ interpretacja wyników może wymagać interwencji człowieka, aby zrozumieć wzorce i skorelować je z wiedzą domenową (może zdarzyć się tak, że klastry uzyskane przez algorytm nie zawsze muszą mieć pokrycie z klasami rzeczywistymi). Uzyskane w ten sposób wyniki mogą mieć mniejszą dokładność niż w przypadku uczenia nadzorowanego. Wynika to z tego, że dane wejściowe nie są znane i nie są z góry oznaczone przez ludzi. Oznacza to, że maszyna musi to zrobić sama. Nie możemy być pewni poprawności uzyskanych wyników, ponieważ nie ma etykiety ani miernika wyjściowego potwierdzającego ich przydatność.
Uczenie częściowo nadzorowane
Na koniec chcielibyśmy pokrótce wspomnieć o uczeniu częściowo nadzorowanym. Stosuje się je w momencie, kiedy mamy do dyspozycji zbiór danych, który tylko w pewnej części posiada etykiety. Tego typu problem jest wymagający, ponieważ ani algorytmy nadzorowane, ani nienadzorowane nie są w stanie efektywnie wykorzystać takiej kombinacji danych. Uczenie częściowo nadzorowane polega na wykorzystaniu tej małej ilości danych z etykietą do wytworzenia etykiet dla reszty zbiory danych. Proces ten jest iteracyjny, gdzie model, który generuje etykiety staje się coraz lepszy z każdą kolejną iteracją.
Uczenie nienadzorowane – demo
W celu utrwalenia zdobytej wiedzy, zaprezentujemy również krótkie demo wykorzystania klasteryzacji w celu grupowania danych. Wygenerujemy grupę punktów w dwuwymiarowej przestrzeni, a następnie wykorzystamy podstawowy algorytm k-średnich (k-means), w celu pogrupowania ich w klastry. Algorytm ten próbuje podzielić zbiór danych na k rozłącznych grup (klastrów), tak aby punkty leżące w jednym klastrze znajdowały się jak najbliżej siebie. Całość została napisana w języku Python i wykorzystuje m.in. bibliotekę scikit-learn. Zacznijmy od zaimplementowania podstawowych modułów i funkcji pomocniczych:
from time import sleep
from IPython.display import display, clear_output
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import lines
import numpy as np
import pandas as pd
import plotly.express as px
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs # Datasets
# Colormap for moons
RdYlBu = plt.get_cmap('RdYlBu')
def show_scatter(data, prediction=None, centers=[]):
if prediction is not None:
plt.scatter(data[:, 0], data[:, 1], c=prediction, cmap=RdYlBu, alpha=0.5);
else:
plt.scatter(data[:,0], data[:,1])
for center in centers:
plt.scatter(center[0], center[1], marker="X", s=300, color='red')
W pierwszej kolejności, przy użyciu funkcji make_blobs (https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html), wygenerujmy i wyświetlmy dwuwymiarowy zbiór danych zawierający trzy klastry (centers = 3).
X,y = make_blobs(centers=3, n_features = 2, n_samples=300, random_state=0, cluster_std=0.7)
print('Samples" \n', X[:10])
print('\nLabels: \n', y[:10])
show_scatter(X)
Dzięki odpowiednio dobranej wartości odchylenia standardowego (cluster_std=0.7
), możemy bez trudu dostrzec obecność trzech klastrów. Zobaczmy teraz działanie algorytmu k-means z biblioteki scikit-learnv:
k = 3
kmeans = KMeans(n_clusters=k)
y_pred = kmeans.fit_predict(X)
centers = kmeans.cluster_centers_
print(kmeans.inertia_)
show_scatter(X, y_pred, centers)
Nad wykresem wypisaliśmy również wartość kmeans.inertia_. Inertia mierzy, jak dobrze zestaw danych został pogrupowany przez K-Means. Wartość ta jest sumą kwadratów odległości próbek do najbliższego środka skupień. Na koniec zaprezentujemy, jak zmienia się wspomniana wartość w zależności od liczby klastrów k, dla wcześniej wygenerowanego zbioru danych.
km_list = list()
for k in range(1,10):
km = KMeans(n_clusters=k)
y_pred = km.fit(X)
km_list.append(pd.Series({'clusters': k,
'inertia': km.inertia_}))
plot_data = (pd.concat(km_list, axis=1)
.T
[['clusters','inertia']]
.set_index('clusters'))
ax = plot_data.plot(marker='o',ls='-')
ax.set_xticks(range(0,10,1))
ax.set_xlim(0,10)
ax.set(xlabel='Cluster', ylabel='Inertia');
Źródła
medium.com/@raosrinivas2580/supervised-versus-unsupervised-learning-8ef2b9411b81
www.ibm.com/cloud/blog/supervised-vs-unsupervised-learning
towardsdatascience.com/supervised-vs-unsupervised-machine-learning-ae895afc57f
gowthamy.medium.com/machine-learning-supervised-learning-vs-unsupervised-learning-f1658e12a780
towardsdatascience.com/what-is-machine-learning-and-types-of-machine-learning-andrews-machine-learning-part-1-9cd9755bc647
medium.com/analytics-vidhya/the-severe-limitations-of-supervised-learning-are-piling-up-eca1ecf3e113
https://towardsdatascience.com/k-means-clustering-algorithm-applications-evaluation-methods-and-drawbacks-aa03e644b48a
https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html
Świetny artykuł! Bardzo dokładnie opisuje zarówno szanse, jak i wyzwania związane z wprowadzeniem kryptowalut, NFT i technologii blockchain do współczesnej…