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.