7 najczęściej używanych algorytmów uczenia maszynowego w Pythonie, o których powinieneś wiedzieć
Opublikowany: 2021-03-04Uczenie maszynowe to gałąź sztucznej inteligencji (AI), która zajmuje się algorytmami komputerowymi używanymi na dowolnych danych. Koncentruje się na automatycznym uczeniu się na podstawie wprowadzanych do niego danych i daje nam wyniki, za każdym razem poprawiając poprzednie przewidywania.
Spis treści
Najlepsze algorytmy uczenia maszynowego używane w Pythonie
Poniżej znajdują się niektóre z najlepszych algorytmów uczenia maszynowego używanych w Pythonie, wraz z fragmentami kodu pokazuje ich implementację i wizualizacje granic klasyfikacji.
1. Regresja liniowa
Regresja liniowa jest jedną z najczęściej stosowanych technik nadzorowanego uczenia maszynowego. Jak sama nazwa wskazuje, ta regresja próbuje modelować związek między dwiema zmiennymi przy użyciu równania liniowego i dopasowywać tę linię do obserwowanych danych. Ta technika służy do szacowania rzeczywistych wartości ciągłych, takich jak całkowita sprzedaż lub koszt domów.
Linia najlepszego dopasowania jest również nazywana linią regresji. Daje to następujące równanie:
Y = a*X + b
gdzie Y to zmienna zależna, a to nachylenie, X to zmienna niezależna, a b to wartość przecięcia. Współczynniki a i b są wyprowadzane przez minimalizację kwadratu różnicy tej odległości między różnymi punktami danych i równania linii regresji.

# syntetyczny zbiór danych dla prostej regresji
ze sklearn.datasets importuj make_regression
pl.figura()
plt.title( 'Przykładowy problem z regresją z jedną zmienną wejściową' )
X_R1, y_R1 = make_regression( n_samples = 100, n_features = 1, n_informative = 1, bias = 150,0, noise = 30, random_state = 0 )
plt.scatter( X_R1, y_R1, znacznik = 'o', s = 50 )
plt.pokaż()
from sklearn.linear_model import LinearRegression
X_train, X_test, y_train, y_test = train_test_split( X_R1, y_R1,
stan_losowy = 0 )
linreg = LinearRegression().fit( X_train, y_train )
print( 'współczynnik modelu liniowego (w): {}'.format( linreg.coef_ ) )
print( 'przecięcie modelu liniowego (b): {:.3f}'z.format( linreg.intercept_ ) )
print( 'Wynik R-kwadrat (trening): {:.3f}'.format( linreg.score( X_train, y_train )) )
print( 'Wynik R-kwadrat (test): {:.3f}'.format( linreg.score( X_test, y_test ) ) )
Wyjście
współczynnik modelu liniowego (w): [ 45,71]
przecięcie modelu liniowego (b): 148.446
Wynik R-kwadrat (trening): 0,679
Wynik R-kwadrat (test): 0,492
Poniższy kod narysuje dopasowaną linię regresji na wykresie naszych punktów danych.
plt.figure( wielkość fig = ( 5, 4 ) )
plt.scatter( X_R1, y_R1, znacznik = 'o', s = 50, alfa = 0,8 )
plt.plot( X_R1, linreg.coef_ * X_R1 + linreg.intercept_, 'r-' )
plt.title( 'Regresja liniowa najmniejszych kwadratów' )
plt.xlabel( 'Wartość funkcji (x)' )
plt.ylabel( 'Wartość docelowa (y)' )
plt.pokaż()
Przygotowanie wspólnego zbioru danych do eksploracji technik klasyfikacji
Poniższe dane zostaną użyte do pokazania różnych algorytmów klasyfikacji, które są najczęściej używane w uczeniu maszynowym w Pythonie.
Zbiór danych grzybów UCI jest przechowywany w mushrooms.csv.
%notplotlib notatnik
importuj pandy jako PD
importuj numer jako np
importuj matplotlib.pyplot jako plt
ze sklearn.decomposition import PCA
ze sklearn.model_selection importuj train_test_split
df = pd.read_csv( 'tylko do odczytu/grzyby.csv' )
df2 = pd.get_dummies( df )
df3 = df2.próbka( frac = 0.08 )
X = df3.iloc[:, 2:]
y = df3.iloc[:, 1]
pca = PCA( n_komponentów = 2 ).fit_transform( X )
X_train, X_test, y_train, y_test = train_test_split( pca, y, random_state = 0 )
liczba.plt( dpi = 120 )
plt.scatter( pca[y.values == 0, 0], pca[y.values == 0, 1], alpha = 0.5, label = 'Jadalne', s = 2 )
plt.scatter( pca[y.values == 1, 0], pca[y.values == 1, 1], alpha = 0.5, label = 'Trujące', s = 2 )
plt.legenda()
plt.title( 'Zbiór danych grzybów\nPierwsze dwa główne składniki' )
plt.xlabel( 'PC1' )
plt.ylabel( 'PC2' )
plt.gca().set_aspect( 'równe' )
Użyjemy funkcji zdefiniowanej poniżej, aby uzyskać granice decyzji różnych klasyfikatorów, których użyjemy w zbiorze danych grzybów.
def plot_grzybowy_granica( X, y, dopasowany_model ):
plt.figure( rozmiar fig = (9,8, 5), dpi = 100 )
for i, plot_type in enumerate( ['Granica decyzji', 'Prawdopodobieństwo decyzji'] ):
plt.podwykres( 1, 2, i + 1 )
mesh_step_size = 0,01 # rozmiar kroku w siatce
x_min, x_max = X[:, 0].min() – 0,1, X[:, 0].max() + 0,1
y_min, y_max = X[:, 1].min() – .1, X[:, 1].max() + .1
xx, yy = np.meshgrid( np.arange( x_min, x_max, mesh_step_size ), np.arange(y_min, y_max, mesh_step_size ))
jeśli ja == 0:
Z = dopasowany_model.predict( np.c_[xx.ravel(), yy.ravel()] )
w przeciwnym razie:
próbować:
Z = dopasowany_model.predict_proba( np.c_[xx.ravel(), yy.ravel()] )[:, 1]
oprócz:
plt.text( 0.4, 0.5, 'Prawdopodobieństwo niedostępne', horizontalalignment = 'center', verticalalignment = 'center', transform = plt.gca().transAxes, fontsize = 12 )
oś.pl( 'wył' )
zepsuć
Z = Z.przekształć( xx.kształt )
plt.scatter( X[y.values == 0, 0], X[y.values == 0, 1], alfa = 0,4, label = 'Jadalne', s = 5 )
plt.scatter( X[y.values == 1, 0], X[y.values == 1, 1], alfa = 0,4, label = 'Trujące', s = 5 )
plt.imshow( Z, interpolation = 'nearest', cmap = 'RdYlBu_r', alpha = 0.15, extend = ( x_min, x_max, y_min, y_max ), origin = 'lower' )
plt.title( typ_druku + '\n' + str( dopasowany_model ).split( '(' )[0] + ' Dokładność testu: ' + str( np.round( dopasowany_model.score( X, y ), 5 ) ) )
plt.gca().set_aspect( 'równe' );
plt.tight_layout()
plt.subplots_adjust( góra = 0,9, dół = 0,08, wspace = 0,02 )
2. Regresja logistyczna
W przeciwieństwie do regresji liniowej, regresja logistyczna zajmuje się estymacją wartości dyskretnych (wartości binarne 0/1, prawda/fałsz, tak/nie). Ta technika jest również nazywana regresją logitową. Dzieje się tak, ponieważ przewiduje prawdopodobieństwo zdarzenia za pomocą funkcji logit do trenowania danych. Jego wartość zawsze mieści się w przedziale od 0 do 1 (ponieważ oblicza prawdopodobieństwo).
Logarytm szans wyników jest skonstruowany jako liniowa kombinacja zmiennej predykcyjnej w następujący sposób:
szanse = p / (1 – p) = prawdopodobieństwo wystąpienia zdarzenia lub prawdopodobieństwo, że zdarzenie nie wystąpi
ln( kursy ) = ln( p / (1 – p))
logit( p ) = ln( p / (1 – p) ) = b0 + b1X1 + b2X2 + b3X3 + … + bkXk
gdzie p jest prawdopodobieństwem obecności cechy.
ze sklearn.linear_model import LogisticRegression
model =Regresja Logistyczna()
model.fit( X_train, y_train )
działka_grzybowa_granica( X_test, y_test, model )
Uzyskaj certyfikat sztucznej inteligencji online z najlepszych światowych uniwersytetów — studiów magisterskich, programów podyplomowych dla kadry kierowniczej i zaawansowanego programu certyfikacji w zakresie uczenia się maszynowego i sztucznej inteligencji, aby przyspieszyć swoją karierę.
3. Drzewo decyzyjne
Jest to bardzo popularny algorytm, którego można użyć do klasyfikacji zarówno ciągłych, jak i dyskretnych zmiennych danych. Na każdym kroku dane są dzielone na więcej niż jeden jednorodny zestaw w oparciu o pewien atrybut/warunki podziału.

ze sklearn.tree importuj DecisionTreeClassifier
model = DecisionTreeClassifier( max_depth = 3 )
model.fit( X_train, y_train )
działka_grzybowa_granica( X_test, y_test, model )
4. SVM
SVM to skrót od Support Vector Machines. Tutaj podstawową ideą jest klasyfikacja punktów danych za pomocą hiperpłaszczyzn do separacji. Celem jest znalezienie takiej hiperpłaszczyzny, która ma maksymalną odległość (lub margines) między punktami danych obu klas lub kategorii.
Samolot dobieramy w taki sposób, aby w przyszłości z największą pewnością zadbać o klasyfikację nieznanych punktów. SVM są powszechnie używane, ponieważ zapewniają wysoką dokładność, a jednocześnie zajmują mniej mocy obliczeniowej. Maszyny SVM mogą być również używane do problemów z regresją.
z sklearn.svm import SVC
model = SVC( jądro = 'liniowy' )
model.fit( X_train, y_train )
działka_grzybowa_granica( X_test, y_test, model )
Zamówienie: Projekty Pythona na GitHub
5. Naiwny Bayes
Jak sama nazwa wskazuje, algorytm Naive Bayes jest nadzorowanym algorytmem uczenia opartym na twierdzeniu Bayesa . Twierdzenie Bayesa wykorzystuje prawdopodobieństwa warunkowe, aby podać prawdopodobieństwo zdarzenia w oparciu o określoną wiedzę.
Gdzie,
P (A | B): Warunkowe prawdopodobieństwo wystąpienia zdarzenia A, biorąc pod uwagę, że zdarzenie B już zaszło. (Zwane także prawdopodobieństwem a posteriori)
P(A): Prawdopodobieństwo zdarzenia A.
P(B): Prawdopodobieństwo zdarzenia B.
P (B | A): Warunkowe prawdopodobieństwo wystąpienia zdarzenia B, biorąc pod uwagę, że zdarzenie A już zaszło.
Pytasz, dlaczego ten algorytm nazywa się Naive? Dzieje się tak, ponieważ zakłada, że wszystkie wystąpienia zdarzeń są od siebie niezależne. Tak więc każda funkcja osobno definiuje klasę, do której należy punkt danych, bez żadnych zależności między sobą. Naive Bayes to najlepszy wybór do kategoryzacji tekstu. Sprawdzi się wystarczająco dobrze nawet z niewielką ilością danych treningowych.
z sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit( X_train, y_train )
działka_grzybowa_granica( X_test, y_test, model )
5. KNN
KNN oznacza K-Nearest Neighbours. Jest to bardzo szeroko stosowany algorytm uczenia nadzorowanego, który klasyfikuje dane testowe zgodnie z ich podobieństwami do wcześniej sklasyfikowanych danych treningowych. KNN nie klasyfikuje wszystkich punktów danych podczas treningu. Zamiast tego po prostu przechowuje zestaw danych, a gdy otrzymuje nowe dane, klasyfikuje te punkty danych na podstawie ich podobieństw. Robi to, obliczając odległość euklidesową liczby K najbliższych sąsiadów (tutaj, n_neighbors ) tego punktu danych.
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier( n_sąsiedzi = 20 )
model.fit( X_train, y_train )
działka_grzybowa_granica( X_test, y_test, model )
6. Losowy las
Las losowy to bardzo prosty i zróżnicowany algorytm uczenia maszynowego, który wykorzystuje technikę uczenia nadzorowanego. Jak można się domyślić po nazwie, losowy las składa się z dużej liczby drzew decyzyjnych, działających jak zespół. Każde drzewo decyzyjne określi klasę wyjściową punktów danych, a klasa większości zostanie wybrana jako końcowy wynik modelu. Pomysł polega na tym, że więcej drzew pracujących na tych samych danych będzie mieć dokładniejsze wyniki niż pojedyncze drzewa.
z sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit( X_train, y_train )
działka_grzybowa_granica( X_test, y_test, model )
7. Perceptron wielowarstwowy
Perceptron wielowarstwowy (lub MLP) to bardzo fascynujący algorytm należący do gałęzi głębokiego uczenia. Dokładniej, należy do klasy sztucznych sieci neuronowych ze sprzężeniem do przodu (ANN). MLP tworzy sieć wielu perceptronów z co najmniej trzema warstwami: warstwą wejściową, warstwą wyjściową i warstwą ukrytą. MLP są w stanie rozróżnić dane, które można nieliniowo oddzielić.
Każdy neuron w warstwach ukrytych wykorzystuje funkcję aktywacji, aby przejść do następnej warstwy. Tutaj algorytm propagacji wstecznej jest używany do faktycznego dostrojenia parametrów, a tym samym do trenowania sieci neuronowej. Może być używany głównie do prostych problemów regresji.
ze sklearn.neural_network import MLPClassifier
model = MLPClassifier()
model.fit( X_train, y_train )

działka_grzybowa_granica( X_test, y_test, model )
Przeczytaj także: Pomysły i tematy projektów Pythona
Wniosek
Możemy stwierdzić, że różne algorytmy uczenia maszynowego dają różne granice decyzyjne, a zatem różne wyniki dokładności w klasyfikacji tego samego zbioru danych.
Nie ma możliwości zadeklarowania dowolnego algorytmu jako najlepszego algorytmu dla wszystkich rodzajów danych w ogóle. Uczenie maszynowe wymaga rygorystycznych prób i błędów dla różnych algorytmów, aby określić, co działa najlepiej dla każdego zestawu danych z osobna. Lista algorytmów ML oczywiście nie kończy się tutaj. Istnieje ogromna liczba innych technik, które czekają na odkrycie w bibliotece Pythona Scikit-Learn. Śmiało i trenuj swoje zbiory danych przy użyciu wszystkich tych elementów i baw się dobrze!
Jeśli chcesz dowiedzieć się więcej o drzewach decyzyjnych, uczeniu maszynowym, zapoznaj się z programem Executive PG w zakresie uczenia maszynowego i sztucznej inteligencji IIIT-B i upGrad, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 450 godzin rygorystycznego szkolenia, ponad 30 studiów przypadków i zadania, status absolwentów IIIT-B, ponad 5 praktycznych praktycznych projektów zwieńczenia i pomoc w pracy z najlepszymi firmami.
Jakie są główne założenia regresji liniowej?
Istnieją 4 podstawowe założenia regresji liniowej: liniowość, homoskedastyczność, niezależność i normalność. Liniowość oznacza, że związek między zmienną niezależną (X) a średnią zmiennej zależnej (Y) jest uważany za liniowy, gdy stosujemy regresję liniową. Homoskedastyczność oznacza, że wariancja błędów punktów resztowych wykresu jest zakładana jako stała. Niezależność odnosi się do wszystkich obserwacji z danych wejściowych, które należy uznać za niezależne od siebie. Normalność oznacza, że rozkład danych wejściowych może być jednorodny lub niejednorodny, ale zakłada się, że jest on równomiernie rozłożony w przypadku regresji liniowej.
Jakie są różnice między drzewem decyzyjnym a losowym lasem?
Drzewo decyzyjne wdraża swój proces decyzyjny, wykorzystując strukturę podobną do drzewa, która reprezentuje możliwe wyniki dla określonych działań. Las losowy wykorzystuje pakiet takich drzew decyzyjnych do analizy danych. Dzięki temu procesowi więcej danych zostanie wykorzystanych przez losowy las, ale pomaga to zapobiegać nadmiernemu dopasowaniu i zapewnia dokładne wyniki. W algorytmie drzewa decyzyjnego istnieje pewien zakres nadmiernego dopasowania, które może dawać mniej dokładne wyniki. Drzewo decyzyjne jest łatwe do interpretacji, ponieważ wymaga mniej obliczeń, podczas gdy losowy las jest trudny do interpretacji ze względu na złożone analizy.
Jakie są standardowe biblioteki używane do algorytmów uczenia maszynowego w Pythonie?
Python zastąpił prawie wszystkie inne języki w uczeniu maszynowym dzięki dostępności ogromnej liczby bibliotek i prostych reguł składniowych. Istnieje wiele bibliotek Pythona do uczenia maszynowego, takich jak Numpy, Scipy, Scikit-learn, Theono, TensorFlow, PyTorch, Matplotlib, Keras, Pandas itp. Korzystanie z funkcji z tych bibliotek pozwala zaoszczędzić mnóstwo czasu na pisanie algorytmów dla każdego zadania; procesy są mniej czasochłonne i zapewniają efektywne wyniki. Biblioteki te mają zastosowania, takie jak przetwarzanie macierzy, problemy z optymalizacją, eksploracja danych, analiza statystyczna, obliczenia z wykorzystaniem tensorów, wykrywanie obiektów, sieci neuronowe i wiele innych.