ml zapiski - ghdrako/doc_snipets GitHub Wiki

  • Basic machine learning models available in Scikit-learn (https://scikit-learn.org/) and in GPU-specialized libraries [such as NVIDIA Rapids (https:// developer.nvidia.com/rapids)]:
    • Linear regression
    • Logistic regression
    • Generalized linear models
  • Some tree-based methods available in Scikit-learn are
    • Bagging ensembles of weak predictors\
    • Random forest
    • Extremely randomized trees
  • Histogram-based gradient-boosted approaches, including
import pandas as pd
data = {'gender': ['male', 'female', 'male', 'female'],
        'age': [25, 30, 27, 29],
        'education_level': ['Bachelor', 'Master', 'Bachelor', 'PhD'],
        'income': [50000, 60000, 55000, 70000]}                         # Creates a dictionary of data
index = [ 'Bob ', 'Alice', 'Charlie', 'Emily']                          # Creates a row index
df = pd.DataFrame(data, index=index)                                    # Creates a pandas DataFrame from the dictionary
print(df)
print(df.iloc[1])                                                       # Prints row 1
print(df.loc['Alice'])                                                  # Prints the row whose label is Alice

The output for the print(df) command should look like the following:

         gender  age education_level  income
Bob        male   25        Bachelor   50000
Alice    female   30          Master   60000
Charlie    male   27        Bachelor   55000
Emily    female   29             PhD   70000

W pandas DataFrame, oprócz samej tabeli z danymi, masz też indeks dla kolumn, dzięki któremu możesz je nazwać, oraz dla wierszy, co pomaga w operacjach identyfikacji i filtrowania. Dodatkowo możesz efektywnie wykonywać selekcje i różne operacje, takie jak łączenie kolumn czy zastępowanie brakujących wartości. Ostatnio nawet popularny pakiet do uczenia maszynowego Scikit-learn, który od dawna akceptuje pandas DataFrame jako dane wejściowe do swoich algorytmów, podjął kroki, żeby utrzymać taką strukturę danych w całych swoich pipeline’ach. Teraz wszystkie wyniki, zamiast być przekształcanymi danymi w tablice Numpy, które są macierzami o jednolitym typie, mogą być zachowywane jako pandas DataFrame. Więcej szczegółów na temat tego, jak to działa i jak może to wpłynąć na korzystanie z pakietu, znajdziesz na https://mng.bz/nR54. Jako de facto standard dla danych tabelarycznych, pandas DataFrame będą szeroko używane w całej książce, w której pokażemy, jak zastosować bardziej przydatne transformacje dla typowych cech i problemów danych tabelarycznych. Po omówieniu idealnych cech wierszy i kolumn w zbiorze danych tabelarycznych, w następnej sekcji przyjrzymy się, co może pójść nie tak oraz jakie są tego konsekwencje i możliwe rozwiązania.

Notice that the rows are labeled with the example names and the columns are labeled with the feature names. You can access both rows and columns by their labels or index

Warunki, o które musisz najbardziej dbać w danych tabelarycznych, to:

  • unikanie kolumn stałych lub prawie stałych,
  • unikanie zduplikowanych lub silnie skorelowanych kolumn,
  • unikanie nieistotnych cech i priorytetowanie tych, które mają dużą moc predykcyjną,
  • radzenie sobie z rzadkimi kategoriami lub zbyt wieloma etykietami w danych kategorycznych,
  • dostrzeganie niezgodności oraz źle umieszczonych, odwróconych lub zniekształconych wartości,
  • unikanie zbyt wielu braków w kolumnie i radzenie sobie z istniejącymi brakami,
  • wykluczanie cech powodujących przecieki.

Brakujace wartosci

Brakujące dane to istotny czynnik, który trzeba wziąć pod uwagę, ponieważ mogą wpływać na dowolne źródło danych i powodować problemy w wielu algorytmach uczenia maszynowego. Modele głębokiego uczenia i liczne algorytmy uczenia maszynowego nie radzą sobie bezpośrednio z brakującymi danymi. Jednak niektóre specjalistyczne algorytmy, takie jak XGBoost i LightGBM, mogą całkiem dobrze zarządzać brakującymi informacjami bez żadnej interwencji. Te algorytmy zakładają wartość, która wcześniej była uważana za bardziej przydatną w podobnych sytuacjach, gdy napotykają brakującą wartość. Więcej informacji znajdziesz pod adresem https://mng.bz/EaxO.

Poza tymi specjalistycznymi algorytmami, brakujące wartości zazwyczaj obsługuje się w procesie zwanym imputacją. Obejmuje to użycie informacji dostępnych w tej samej kolumnie (prosta imputacja jednowymiarowa) lub we wszystkich innych dostępnych kolumnach (imputacja wielowymiarowa) w celu określenia rozsądnej wartości lub klasy zastępczej. Imputacja wielowymiarowa czasami okazuje się skuteczniejsza, nawet w przypadku algorytmów XGBoost i LightGBM. Omówimy imputację wielowymiarową bardziej szczegółowo w rozdziale 6 książki.

Zwróć uwagę, że jeśli masz do czynienia z brakującymi danymi na wczesnym etapie przygotowywania danych, brak danych sam w sobie może być informacją. Na przykład, jeśli pracujesz z zapytaniem do bazy danych relacyjnej i wykonujesz lewy lub prawy join (lub pełny join zewnętrzny) tabel, pojawią się brakujące przypadki, gdy dane nie pasują. W takiej sytuacji brakujący przypadek oznacza brak zgodności z warunkami wyrażonymi w określonej tabeli bazy danych, co może być cenną informacją. W innych przypadkach brakujący przypadek będzie oznaczał coś konkretnego w zależności od tego, jak dane zostały wygenerowane, jak np. w danych spisowych, gdzie nie otrzymujesz odpowiedzi dotyczących dochodu, jeśli respondent jest zbyt bogaty lub zbyt biedny, ponieważ konieczność bycia społecznie akceptowalnym wpływa na odpowiedzi.

Utworzenie cechy binarnej wskazującej, czy wartość jest brakująca, może pomóc śledzić takie wzorce. Zobacz MissingIndicator w pakiecie Scikit-learn, aby uzyskać więcej informacji na temat tego rodzaju przetwarzania: https://mng.bz/EaxO

Rzadkie kategorie

Jeżeli chodzi o cechy kategoryczne, radzenie sobie z zbyt wieloma etykietami lub rzadkimi kategoriami to dwa problemy, które trzeba jak najszybciej rozwiązać, najlepiej już na etapie ekstrakcji. Wspomnieliśmy już o cechach kategorycznych o wysokiej liczbie unikalnych wartości w tym rozdziale. Zamiast tego, mamy do czynienia z rzadkimi kategoriami w kontekście zmiennych kategorycznych, gdy konkretne kategorie występują rzadko lub mają bardzo mało przypadków w zbiorze danych. Rzadkie kategorie zwiększają ryzyko przeuczenia podczas trenowania i zazwyczaj można sobie z nimi poradzić poprzez ich agregowanie, tworząc w ten sposób większą klasę. Wiedza domenowa może pomóc w takich agregacjach, sugerując podobne rzadkie kategorie, które można połączyć w większe. Gdy problemem jest natomiast zbyt wiele kategorii, najodpowiedniejszym rozwiązaniem jest kodowanie docelowe (target encoding), które działa najlepiej przy gradient boosting, albo użycie osadzeń (embeddings), które najlepiej sprawdzają się w podejściu deep learning. Omówimy, jak te metody działają i jak skutecznie je wdrożyć w rozdziałach 6 i 7.

Błedy w danych

Błędy w danych Wykrywanie niespójności, źle umieszczonych, odwróconych lub zniekształconych wartości to temat sam w sobie, ponieważ naprawa takiego problemu w dużej mierze zależy od twojej wiedzy na temat dziedziny zastosowania i procedur rejestrowania danych, którymi się zajmujesz. Wiele błędów może powstać, gdy zjawisko jest obserwowane w rzeczywistości i rejestrowane w danych. Błędy mogą obejmować nieuniknione błędy pomiarowe spowodowane przez instrumenty i czujniki, których używamy, aż po rozbudowany katalog możliwych niezgodności, niedoszacowań i przeszacowań, które sprawią, że zapis będzie całkowicie niewiarygodny. Więcej niż pojedynczy błąd tu i tam, powinieneś szukać błędów systematycznych. Te błędy niemal zawsze pojawiają się w określonych sytuacjach i wprowadzają stronniczość w części informacji. Znajomość schematu danych i znaczenia danych, którymi się zajmujesz, jest jedynym rozsądnym sposobem na rozwiązanie takich problemów. Może to brzmieć jak bardzo ogólna i niejasna rada, bo tak naprawdę taka jest, ale możesz jedynie starać się zrozumieć swoje dane najlepiej jak potrafisz i nie zakładać niczego z góry. Nie wierz, że algorytmy uczenia maszynowego są odporne i mogą naprawić wszystkie błędy w danych: błędy systematyczne mogą ograniczać zdolność twoich modeli do uogólniania i dostarczania wiarygodnych przewidywań.

Na koniec, ostatnim punktem, którym powinieneś się zająć, jest występowanie wycieków cech. Masz do czynienia z wyciekiem, gdy pewne informacje predykcyjne, które nie powinny być uwzględnione w treningu modelu, tymczasowo zawyżają wyniki, co skutkuje słabymi rezultatami przy późniejszych przewidywaniach. Wyciek może mieć miejsce na poziomie wierszy i cech. Już omawialiśmy wyciek wierszy przy analizie wierszy nie-IID, który pojawia się, gdy niektóre próbki są powiązane z innymi z powodu czynników czasowych lub mediacji przez inne cechy. Teraz czas omówić wyciek na poziomie cech, co jest bardziej powszechnym problemem niż się spodziewano przy wyciąganiu danych z baz biznesowych. Kluczową zasadą jest zapewnienie spójności czasowej cech używanych do modelowania. Idealnie cechy powinny być zgodne z celem lub występować przed nim w czasie. W najlepszym scenariuszu żadna cecha nie powinna być tworzona ani generowana po punkcie czasowym samej zmiennej docelowej.

To czasowe dopasowanie pomaga uniknąć potencjalnego wycieku danych i zapewnia, że model dokonuje prognoz w oparciu o informacje, które byłyby dostępne w momencie predykcji. Potrzebujesz modelu zdolnego przewidywać teraźniejszość lub przyszłość, ale nie możesz tego zrobić, jeśli niezbędne cechy, na których wytrenowano model, będą dostępne dopiero po momencie predykcji. Podczas trenowania łatwo złamać to ograniczenie, ponieważ korzystasz z wszystkiego, co pochodzi z przeszłości, a wiele źródeł informacji używanych do budowy danych treningowych może nie być odpowiednio udokumentowane pod względem czasu tworzenia lub modyfikacji. Weź na przykład biznes udzielający pożyczek przy użyciu algorytmu uczenia maszynowego. Wiedza o tym, jak opóźnione były płatności, może stanowić świetną cechę predykcyjną w czasie treningu, ale rozważając, czy taka cecha byłaby dostępna podczas udzielania pożyczki czy nie — ponieważ jest to przyszłe zachowanie bliskie momentowi, w którym zostanie określony cel — czyni ją bezużyteczną, mylącą cechą z powodu wycieku przyszłych danych. Jako proponowane rozwiązanie tego problemu sugerujemy dokładne sprawdzanie czasów generowania cech i celów, jeśli to możliwe, oraz weryfikację, czy cel występuje po cechach, czy odwrotnie. Często takie informacje są łatwo dostępne, w zależności od tego, jak w Twojej firmie zorganizowane jest przechowywanie danych. Na przykład Twoje dane mogą mieć określone meta dane pokazujące datę i czas dodania lub aktualizacji, albo Twój administrator bazy danych ustawił może konkretny pole znacznika czasu, aby uchwycić moment, w którym zachodzą zmiany.