Uczenie maszynowe - automatyczne przepływy pracy

Wprowadzenie

Aby pomyślnie wykonać i wygenerować wyniki, model uczenia maszynowego musi zautomatyzować niektóre standardowe przepływy pracy. Proces automatyzacji tych standardowych przepływów pracy można wykonać za pomocą potoków Scikit-learn. Z punktu widzenia analityka danych potok jest uogólnioną, ale bardzo ważną koncepcją. Zasadniczo umożliwia przepływ danych z surowego formatu do przydatnych informacji. Działanie rurociągów można zrozumieć za pomocą następującego schematu -

Bloki rurociągów ML są następujące -

Data ingestion- Jak sama nazwa wskazuje, jest to proces importowania danych do wykorzystania w projekcie ML. Dane można wyodrębniać w czasie rzeczywistym lub partiami z jednego lub wielu systemów. Jest to jeden z najtrudniejszych etapów, ponieważ jakość danych może wpływać na cały model ML.

Data Preparation- Po zaimportowaniu danych musimy przygotować dane do wykorzystania w naszym modelu ML. Wstępne przetwarzanie danych jest jedną z najważniejszych technik przygotowania danych.

ML Model Training- Następnym krokiem jest wyszkolenie naszego modelu ML. Mamy różne algorytmy ML, takie jak nadzorowane, nienadzorowane, wzmacniające, aby wyodrębniać cechy z danych i prognozować.

Model Evaluation- Następnie musimy ocenić model ML. W przypadku potoku AutoML model ML można ocenić za pomocą różnych metod statystycznych i reguł biznesowych.

ML Model retraining- W przypadku potoku AutoML nie jest konieczne, aby pierwszy model był najlepszy. Pierwszy model jest traktowany jako model bazowy i możemy go trenować wielokrotnie, aby zwiększyć dokładność modelu.

Deployment- Wreszcie musimy wdrożyć model. Ten krok obejmuje zastosowanie i migrację modelu do operacji biznesowych w celu ich wykorzystania.

Wyzwania towarzyszące rurociągom ML

Aby stworzyć potoki ML, naukowcy zajmujący się danymi stają przed wieloma wyzwaniami. Wyzwania te można podzielić na trzy kategorie -

Jakość danych

Sukces każdego modelu ML zależy w dużej mierze od jakości danych. Jeśli dane, które dostarczamy do modelu ML nie są dokładne, wiarygodne i solidne, skończymy na błędnych lub wprowadzających w błąd wynikach.

Niezawodność danych

Kolejnym wyzwaniem związanym z potokami ML jest wiarygodność danych, które dostarczamy do modelu ML. Jak wiemy, mogą istnieć różne źródła, z których analityk danych może pozyskiwać dane, ale aby uzyskać najlepsze wyniki, należy mieć pewność, że źródła danych są wiarygodne i zaufane.

Dostępność danych

Aby uzyskać najlepsze wyniki z potoków ML, same dane muszą być dostępne, co wymaga konsolidacji, czyszczenia i przechowywania danych. W wyniku właściwości dostępności danych metadane zostaną zaktualizowane o nowe tagi.

Modelowanie potoku ML i przygotowanie danych

Wyciek danych, który ma miejsce od zbioru danych treningowych do zbioru testowego, jest ważnym problemem, z którym musi się zmierzyć naukowiec zajmujący się danymi podczas przygotowywania danych do modelu ML. Ogólnie rzecz biorąc, w czasie przygotowywania danych analityk danych stosuje techniki takie jak standaryzacja lub normalizacja całego zbioru danych przed nauką. Ale te techniki nie mogą pomóc nam w wycieku danych, ponieważ na zbiór danych uczących miałaby wpływ skala danych w zbiorze danych testowych.

Korzystając z potoków ML, możemy zapobiec wyciekowi danych, ponieważ potoki zapewniają, że przygotowanie danych, takie jak standaryzacja, jest ograniczone do każdego etapu naszej procedury weryfikacji krzyżowej.

Przykład

Poniżej znajduje się przykład w Pythonie, który demonstruje przygotowanie danych i przepływ pracy oceny modelu. W tym celu wykorzystujemy zbiór danych Pima Indian Diabetes firmy Sklearn. Najpierw stworzymy potok, który ustandaryzuje dane. Następnie zostanie utworzony model liniowej analizy dyskryminacyjnej i na koniec potok zostanie oceniony za pomocą 10-krotnej weryfikacji krzyżowej.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values

Następnie utworzymy potok za pomocą następującego kodu -

estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)

W końcu zamierzamy ocenić ten potok i wyprowadzić jego dokładność w następujący sposób -

kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7790148448043184

Powyższe dane wyjściowe to podsumowanie dokładności konfiguracji w zbiorze danych.

Modelowanie rurociągów ML i wydobywanie cech

Wyciek danych może również wystąpić na etapie wyodrębniania cech modelu ML. Dlatego też procedury wyodrębniania cech powinny być również ograniczone, aby zatrzymać wyciek danych w naszym zestawie danych szkoleniowych. Podobnie jak w przypadku przygotowania danych, korzystając z potoków ML możemy również zapobiec wyciekowi danych. Do tego celu można użyć FeatureUnion, narzędzia udostępnianego przez potoki ML.

Przykład

Poniżej znajduje się przykład w Pythonie, który demonstruje wyodrębnianie funkcji i przepływ pracy oceny modelu. W tym celu wykorzystujemy zbiór danych Pima Indian Diabetes firmy Sklearn.

Po pierwsze, za pomocą PCA (analiza głównych komponentów) zostaną wyodrębnione 3 funkcje. Następnie 6 funkcji zostanie wyodrębnionych za pomocą analizy statystycznej. Po wyodrębnieniu funkcji wynik wyboru wielu funkcji i procedury ekstrakcji zostaną połączone za pomocą funkcji

Narzędzie FeatureUnion. W końcu zostanie utworzony model regresji logistycznej, a potok zostanie oceniony za pomocą 10-krotnej weryfikacji krzyżowej.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values

Następnie połączenie funkcji zostanie utworzone w następujący sposób -

features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)

Następnie potok zostanie utworzony za pomocą następujących linii skryptu -

estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)

W końcu zamierzamy ocenić ten potok i wyprowadzić jego dokładność w następujący sposób -

kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7789811066126855

Powyższe dane wyjściowe to podsumowanie dokładności konfiguracji w zbiorze danych.