Gdy dane znajdą się w potoku TFX, możesz użyć komponentów TFX do ich analizy i transformacji. Możesz użyć tych narzędzi nawet przed trenowaniem modelu.
Istnieje wiele powodów, dla których warto analizować i przekształcać swoje dane:
- Aby znaleźć problemy w Twoich danych. Typowe problemy to:
- Brakujące dane, takie jak obiekty z pustymi wartościami.
- Etykiety traktowane jako cechy, dzięki czemu model podczas treningu może zerknąć na właściwą odpowiedź.
- Funkcje o wartościach spoza oczekiwanego zakresu.
- Anomalie danych.
- Przenieś wyuczony model ma wstępne przetwarzanie, które nie pasuje do danych uczących.
- Aby zaprojektować bardziej efektywne zestawy funkcji. Na przykład możesz zidentyfikować:
- Szczególnie funkcje informacyjne.
- Zbędne funkcje.
- Funkcje, których skala jest tak duża, że mogą spowolnić naukę.
- Funkcje z niewielką ilością unikalnych informacji predykcyjnych lub bez nich.
Narzędzia TFX mogą zarówno pomóc znaleźć błędy w danych, jak i pomóc w inżynierii funkcji.
Walidacja danych TensorFlow
- Przegląd
- Przykładowa walidacja na podstawie schematu
- Wykrywanie skosu podczas szkolenia
- Wykrywanie dryfu
Przegląd
TensorFlow Data Validation identyfikuje anomalie w trenowaniu i udostępnianiu danych oraz może automatycznie tworzyć schemat, badając dane. Komponent można skonfigurować tak, aby wykrywał różne klasy anomalii w danych. To może
- Przeprowadź kontrolę poprawności, porównując statystyki danych ze schematem, który kodyfikuje oczekiwania użytkownika.
- Wykrywaj skos obsługi szkolenia, porównując przykłady w danych dotyczących szkolenia i obsługi.
- Wykrywaj dryf danych, przeglądając serię danych.
Każdą z tych funkcjonalności dokumentujemy niezależnie:
Przykładowa walidacja na podstawie schematu
TensorFlow Data Validation identyfikuje wszelkie anomalie w danych wejściowych, porównując statystyki danych ze schematem. Schemat koduje właściwości, które mają spełniać dane wejściowe, takie jak typy danych lub wartości kategorialne, i mogą być modyfikowane lub zastępowane przez użytkownika.
Walidacja danych Tensorflow jest zwykle wywoływana wiele razy w kontekście potoku TFX: (i) dla każdego podziału uzyskanego z ExampleGen, (ii) dla wszystkich danych wstępnie przekształconych używanych przez Transform i (iii) dla wszystkich danych po transformacji wygenerowanych przez Przekształcać. Po wywołaniu w kontekście Transform (ii-iii) opcje statystyk i ograniczenia oparte na schemacie można ustawić, definiując stats_options_updater_fn
. Jest to szczególnie przydatne podczas sprawdzania poprawności danych nieustrukturyzowanych (np. funkcji tekstowych). Zobacz przykład kodu użytkownika .
Zaawansowane funkcje schematu
W tej sekcji omówiono bardziej zaawansowaną konfigurację schematu, która może pomóc w specjalnych konfiguracjach.
Rzadkie funkcje
Kodowanie rzadkich funkcji w Przykładach zwykle wprowadza wiele funkcji, które mają mieć tę samą wartościowość dla wszystkich przykładów. Na przykład rzadka funkcja:
WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
byłaby zakodowana przy użyciu oddzielnych funkcji dla indeksu i wartości:
WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
z ograniczeniem, że wartościowość funkcji indeksu i wartości powinna być taka sama dla wszystkich przykładów. To ograniczenie można wyraźnie określić w schemacie, definiując sparse_feature:
sparse_feature {
name: 'WeightedCategories'
index_feature { name: 'WeightedCategoriesIndex' }
value_feature { name: 'WeightedCategoriesValue' }
}
Definicja funkcji rzadkiej wymaga co najmniej jednego indeksu i jednej funkcji wartości, które odwołują się do funkcji istniejących w schemacie. Jawne zdefiniowanie rzadkich funkcji umożliwia TFDV sprawdzenie, czy wartościowości wszystkich odniesionych funkcji są zgodne.
Niektóre przypadki użycia wprowadzają podobne ograniczenia wartościowości między funkcjami, ale niekoniecznie kodują rzadkie funkcje. Korzystanie z rzadkiej funkcji powinno Cię odblokować, ale nie jest idealne.
Środowiska schematu
Domyślnie walidacje zakładają, że wszystkie przykłady w potoku są zgodne z jednym schematem. W niektórych przypadkach konieczne jest wprowadzenie niewielkich zmian w schemacie, na przykład funkcje używane jako etykiety są wymagane podczas uczenia (i powinny zostać zweryfikowane), ale brakuje ich podczas udostępniania. Do wyrażenia takich wymagań można użyć środowisk, w szczególności default_environment()
, in_environment()
, not_in_environment()
.
Załóżmy na przykład, że funkcja o nazwie „LABEL” jest wymagana do trenowania, ale prawdopodobnie jej nie będzie wyświetlać. Można to wyrazić za pomocą:
- Zdefiniuj dwa różne środowiska w schemacie: ["SERVING", "TRAINING"] i skojarz 'LABEL' tylko ze środowiskiem "TRAINING".
- Powiąż dane treningowe ze środowiskiem „TRAINING”, a dane obsługujące ze środowiskiem „SERVING”.
Generowanie schematu
Schemat danych wejściowych jest określony jako wystąpienie TensorFlow Schema .
Zamiast ręcznie konstruować schemat od podstaw, programista może polegać na automatycznej konstrukcji schematu TensorFlow Data Validation. W szczególności TensorFlow Data Validation automatycznie konstruuje początkowy schemat na podstawie statystyk obliczonych na podstawie danych treningowych dostępnych w potoku. Użytkownicy mogą po prostu przejrzeć ten automatycznie wygenerowany schemat, zmodyfikować go w razie potrzeby, zaewidencjonować go w systemie kontroli wersji i wepchnąć go jawnie do potoku w celu dalszej weryfikacji.
TFDV zawiera infer_schema()
do automatycznego generowania schematu. Na przykład:
schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)
Powoduje to automatyczne generowanie schematu na podstawie następujących reguł:
Jeśli schemat został już wygenerowany automatycznie, jest używany bez zmian.
W przeciwnym razie TensorFlow Data Validation sprawdza dostępne statystyki danych i oblicza odpowiedni schemat danych.
Uwaga: schemat generowany automatycznie jest najlepszym rozwiązaniem i próbuje jedynie wywnioskować podstawowe właściwości danych. Oczekuje się, że użytkownicy przejrzą go i zmodyfikują w razie potrzeby.
Wykrywanie skosu podczas szkolenia
Przegląd
TensorFlow Data Validation może wykrywać przekrzywienie rozkładu między danymi uczącymi i obsługującymi. Pochylenie rozkładu występuje, gdy rozkład wartości cech dla danych uczących znacznie różni się od danych służących do obsługi. Jedną z głównych przyczyn skosu dystrybucji jest użycie zupełnie innego korpusu do generowania danych treningowych, aby przezwyciężyć brak danych początkowych w pożądanym korpusie. Innym powodem jest wadliwy mechanizm próbkowania, który wybiera do trenowania tylko podpróbkę danych obsługujących.
Przykładowy scenariusz
Więcej informacji na temat konfigurowania wykrywania skosu podczas szkolenia można znaleźć w Przewodniku wstępnym dotyczącym sprawdzania poprawności danych TensorFlow .
Wykrywanie dryfu
Wykrywanie dryfu jest obsługiwane między kolejnymi zakresami danych (tj. między zakresem N a zakresem N+1), na przykład między różnymi dniami danych treningowych. Wyrażamy dryf w postaci odległości L-nieskończoności dla cech kategorialnych i przybliżoną rozbieżność Jensena-Shannona dla cech numerycznych. Możesz ustawić odległość progową, aby otrzymywać ostrzeżenia, gdy dryf jest wyższy niż dopuszczalny. Ustawienie prawidłowej odległości jest zazwyczaj procesem iteracyjnym, wymagającym znajomości domeny i eksperymentowania.
Aby uzyskać informacje na temat konfigurowania wykrywania dryfu, zapoznaj się z Przewodnikiem wstępnym dotyczącym weryfikacji danych TensorFlow .
Używanie wizualizacji do sprawdzania danych
TensorFlow Data Validation zapewnia narzędzia do wizualizacji rozkładu wartości cech. Analizując te rozkłady w notatniku Jupyter za pomocą Facets , możesz wykryć typowe problemy z danymi.
Identyfikowanie podejrzanych dystrybucji
Możesz zidentyfikować typowe błędy w swoich danych, korzystając z ekranu Przegląd aspektów, aby wyszukać podejrzane rozkłady wartości funkcji.
Niezrównoważone dane
Niezrównoważona cecha to cecha, w której dominuje jedna wartość. Niezrównoważone funkcje mogą występować naturalnie, ale jeśli funkcja zawsze ma tę samą wartość, możesz mieć błąd danych. Aby wykryć niezrównoważone funkcje w Przeglądzie aspektów, wybierz „Niejednorodność” z menu rozwijanego „Sortuj według”.
Najbardziej niezrównoważone funkcje zostaną wymienione na górze każdej listy typów funkcji. Na przykład poniższy zrzut ekranu pokazuje jedną funkcję, która zawiera same zera, a drugą, która jest wysoce niezrównoważona, na górze listy „Funkcje numeryczne”:
Dane równomiernie rozproszone
Cecha równomiernie rozłożona to taka, dla której wszystkie możliwe wartości pojawiają się z bliską tej samej częstotliwości. Podobnie jak w przypadku niezrównoważonych danych, dystrybucja ta może wystąpić naturalnie, ale może być również spowodowana błędami danych.
Aby wykryć równomiernie rozłożone cechy w Przeglądzie aspektów, wybierz „Niejednorodność” z listy rozwijanej „Sortuj według” i zaznacz pole wyboru „Odwrócona kolejność”:
Dane łańcuchowe są przedstawiane za pomocą wykresów słupkowych, jeśli istnieje 20 lub mniej unikalnych wartości, oraz jako wykres skumulowanego rozkładu, jeśli jest więcej niż 20 unikalnych wartości. Tak więc w przypadku danych łańcuchowych rozkłady równomierne mogą być wyświetlane jako płaskie wykresy słupkowe, takie jak ten powyżej, lub linie proste, takie jak ta poniżej:
Błędy, które mogą generować jednolicie rozproszone dane
Oto kilka typowych błędów, które mogą generować równomiernie rozłożone dane:
Używanie ciągów do reprezentowania nieciągowych typów danych, takich jak daty. Na przykład będziesz mieć wiele unikalnych wartości dla funkcji daty i godziny z reprezentacjami takimi jak „2017-03-01-11-45-03”. Unikalne wartości będą rozłożone równomiernie.
W tym indeksy, takie jak „numer wiersza”, jako funkcje. Tutaj znowu masz wiele unikalnych wartości.
Brakujące dane
Aby sprawdzić, czy w funkcji nie ma całkowicie wartości:
- Wybierz „Brak kwoty/zero” z listy rozwijanej „Sortuj według”.
- Zaznacz pole wyboru „Odwróć kolejność”.
- Spójrz na kolumnę „brakujące”, aby zobaczyć procent wystąpień z brakującymi wartościami dla funkcji.
Błąd danych może również powodować niekompletne wartości funkcji. Na przykład możesz oczekiwać, że lista wartości funkcji zawsze będzie zawierała trzy elementy i odkryjesz, że czasami ma tylko jeden. Aby sprawdzić niekompletne wartości lub inne przypadki, w których listy wartości cech nie zawierają oczekiwanej liczby elementów:
Wybierz „Długość listy wartości” z menu rozwijanego „Wykres do wyświetlenia” po prawej stronie.
Spójrz na wykres po prawej stronie każdego wiersza funkcji. Wykres przedstawia zakres długości list wartości dla funkcji. Na przykład podświetlony wiersz na poniższym zrzucie ekranu pokazuje funkcję, która ma kilka list wartości o zerowej długości:
Duże różnice w skali między funkcjami
Jeśli twoje funkcje różnią się znacznie pod względem skali, model może mieć trudności z uczeniem się. Na przykład, jeśli niektóre funkcje różnią się od 0 do 1, a inne od 0 do 1 000 000 000, występuje duża różnica w skali. Porównaj kolumny „max” i „min” w różnych obiektach, aby znaleźć bardzo różne skale.
Rozważ normalizację wartości funkcji, aby zmniejszyć te duże różnice.
Etykiety z nieprawidłowymi etykietami
Estymatory TensorFlow mają ograniczenia dotyczące typu danych, które akceptują jako etykiety. Na przykład klasyfikatory binarne zazwyczaj działają tylko z etykietami {0, 1}.
Przejrzyj wartości etykiet w Przeglądzie aspektów i upewnij się, że są one zgodne z wymaganiami estymatorów .