Zmienna objaśniana/zależna/decyzyjna (ang. dependent variable, target, ground truth, y) np. czy klient spłaci kredyt, jaka jest cena mieszkania.
To wynik, który chcemy przewidzieć lub wyjaśnić.
Zależy od innych zmiennych.
Zmienne objaśniające/niezależne/warunkowe (ang. independent variables, features, X) np. wiek, dochód, liczba dzieci.
To czynniki, które wpływają na zmienną objaśnianą.
Cechy wejściowe modelu.
Zmienna objaśniana/zależna/decyzyjna (ang. dependent variable, target, ground truth, y) np. czy klient spłaci kredyt, jaka jest cena mieszkania.
To wynik, który chcemy przewidzieć lub wyjaśnić.
Zależy od innych zmiennych.
Zmienne objaśniające/niezależne/warunkowe (ang. independent variables, features, X) np. wiek, dochód, liczba dzieci.
To czynniki, które wpływają na zmienną objaśnianą.
Cechy wejściowe modelu.
y=f(X)
Dane surowe (raw data) bez odpowiedniego przygotowania nie będą się nadawać do zastosowania w uczeniu maszynowym.
czyszczenie nazw kolumn
usuwanie lub uzupełnianie braków danych
usuwanie wartości odstających
usuwanie duplikatów
ujednolicanie lub grupowanie kategorii
konwersja typów danych
kodowanie danych kategorycznych (one-hot-encoding)
normalizacja wartości numerycznych
tworzenie nowych cech (feature engineering)
podział zbioru
Natywny python
df.columns = ( df.columns .str.strip() # usuń spacje .str.lower() # małe litery .str.replace(' ', '_') # spacje na podkreślniki .str.replace(r'[^\w]', '', regex=True) # usuwanie znaków specjalnych)
Pakiet pyjanitor
from janitor import clean_namesdf = df.clean_names()
Możliwe rozwiązania
usunięcie obserwacji z brakami danych
imputacja statystyczna:
metody deterministyczne - zawsze te same wartości imputacyjne:
metody stochastyczne - można uzyskać różne wartości imputacyjne:
02:00
Jaka statystyka najlepiej uzupełni braki w przypadku cechy numerycznej?
Funkcja fillna()
zastępuje braki danych wskazaną wartością.
df['num_var'] = df['num_var'].fillna(df['num_var'].median()[0])df['cat_var'] = df['cat_var'].fillna(df['cat_var'].mode()[0])
scikit-learn
- biblioteka do MLJeden z najważniejszych pakietów w Pythonie dla analizy i modelowania danych
preprocessing danych (skalowanie, kodowanie, imputacja)
podział na zbiór treningowy/testowy
modele klasyfikacji, regresji, klasteryzacji
walidacja krzyżowa i metryki oceny modelu
Dokumentacja: https://scikit-learn.org/
sklearn.impute
SimpleImputer
: proste strategie: średnia, mediana, najczęstsza wartość
KNNImputer
: imputacja na podstawie najbliższych sąsiadów
IterativeImputer
: zaawansowana iteracyjna imputacja (np. z regresją)
MissingIndicator
: dodaje kolumny informujące o brakach
Wybrane algorytmy ML radzą się z obecnością braków danych.
Dokumentacja: https://scikit-learn.org/stable/modules/impute.html
Kluczowe metody w preprocessingu z wykorzystaniem pakietu scikit-learn
fit()
- analizuje dane wejściowe i zapamiętuje parametry przekształcenia
transform()
- wykorzystuje zapamiętane parametry z fit()
i przekształca dane
fit_transform()
- wygodne połączenie fit()
+ transform()
często stosowane na zbiorze treningowym
Nigdy nie używamy fit()
na danych testowych, wyłącznie transform()
.
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test) # tylko transform!
SimpleImputer
Prosta imputacja medianą
from sklearn.impute import SimpleImputerimputer = SimpleImputer(strategy='median')df[['num_var']] = imputer.fit_transform(df[['num_var']])
KNNImputer
Uzupełnia brakujące dane na podstawie podobieństwa do innych rekordów. Dla każdej brakującej obserwacji: znajduje K najbliższych sąsiadów i wstawia średnią (ważoną) z tych wartości.
from sklearn.impute import KNNImputerknn_imputer = KNNImputer(n_neighbors=5)df[['num_var']] = knn_imputer.fit_transform(df[['num_var']])
05:00
Porównaj rozkład cechy checking_account
z wykorzystaniem obu przedstawionych metod.
Wykres pudełkowy i metoda IQR (interquartile range)
Q1 = df['num_var'].quantile(0.25)Q3 = df['num_var'].quantile(0.75)IQR = Q3 - Q1# Granicedolna = Q1 - 1.5 * IQRgórna = Q3 + 1.5 * IQR# Usunięcie outlierówdf_clean = df[(df['num_var'] >= dolna) & (df['num_var'] <= górna)]
Usunięcie 1% lub 5% największych i najmniejszych wartości.
Funkcja drop_duplicates()
usuwa duplikaty ze zbioru danych.
W argumencie subset można podać kolumny, które mają być brane pod uwagę w analizie duplikatów. Domyślnie uwzględniane są wszystkie kolumny.
Proces modyfikowania, przekształcania lub tworzenia nowych zmiennych (cech), które lepiej opisują dane i ułatwiają modelowi naukę.
Przykłady:
Ekstrakcja informacji np. z dat: rok, miesiąc, dzień tygodnia
Grupowanie wartości np. przedziały wiekowe (18–25, 26–40, itd.)
Tworzenie nowych cech np. BMI = waga / wzrost$^2$
Agregacje np. średni dochód na klienta
Transformacje np. logarytmy, standaryzacja
05:00
Jakie nowe cechy można zaproponować dla zbioru credit?
One-Hot Encoding: zamiana wartości kategorycznych na kolumny binarne.
tworzy nową kolumnę dla każdej unikalnej wartości w zmiennej kategorycznej
wartość 1 oznacza obecność danej kategorii, 0 – jej brak
df = pd.DataFrame({'płeć': ['kobieta', 'mężczyzna', 'kobieta']})df_encoded = pd.get_dummies(df, columns=['płeć'])
płeć_kobieta płeć_mężczyzna0 1 01 0 12 1 0
W module sklearn.preprocessing jest OneHotEncoder
.
Modele oparte na odległościach (np. KNN, SVM) są wrażliwe na skalę cech. Zastosowanie normalizacji sprawia, że wszystkie cechy mają porównywalną skalę oraz przyspiesza i poprawia jakość uczenia modeli.
StandardScaler: przekształca cechy do rozkładu o średniej = 0 i odchyleniu standardowym = 1
MinMaxScaler: skaluje wartości do zakresu [0, 1]
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_scaled = scaler.fit_transform(X)
Interfejs modeli pakietu scikit-learn
wymaga zakodowania zmiennej decyzyjnej jako wartości liczbowych.
LabelEncoder
przekształca napisy/kategorie w liczby całkowite i każdej unikalnej wartości przypisuje unikalny numer.
from sklearn.preprocessing import LabelEncoderle = LabelEncoder()y = ['dobry', 'zły', 'dobry', 'dobry', 'zły']y_encoded = le.fit_transform(y)
dane uczące (treningowe) - zbiór przykładów używanych do dopasowania parametrów algorytmu
dane testowe - niezależny od danych uczących zbiór przykładów o takim samym rozkładzie jak dane uczące
dane walidacyjne - zbiór przykładów używanych do dopasowania hiperparametrów
Często nazewnictwo danych testowych i walidacyjnych jest mylone.
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y)
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |