Skip to content

ml zapiski

ghdrako edited this page Jun 25, 2026 · 4 revisions
  • 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.

Test

Clone this wiki locally