Kodowanie zmiennych kategorialnych
Kodowanie etykiet, one-hot encoding, kodowanie porządkowe, pd.get_dummies() a sklearn OrdinalEncoder.
Kodowanie zmiennych kategorialnych to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Dlaczego kodować kategorie?
Większość modeli uczenia maszynowego potrzebuje LICZB, a nie etykiet tekstowych, takich jak "red" czy "small". Kodowanie przekształca zmienne kategoryczne w postać liczbową, zachowując ich znaczenie.
Porządkowe a nominalne
Kategorie porządkowe mają naturalną kolejność (small < medium < large). Kategorie nominalne jej nie mają (red, green, blue). Właściwy sposób kodowania zależy od rodzaju posiadanych kategorii.
Kodowanie etykiet dla kategorii porządkowych
LabelEncoder odwzorowuje każdą kategorię na liczbę całkowitą. Jest odpowiedni dla danych PORZĄDKOWYCH, w przypadku których kolejność liczb ma znaczenie.
from sklearn.preprocessing import LabelEncoder
sizes = ["small", "large", "medium", "small"]
le = LabelEncoder()
print(le.fit_transform(sizes)) # integers (alphabetical by default)Zagrożenie w przypadku kategorii nominalnych
Stosowanie kodowania etykiet dla danych NOMINALNYCH jest ryzykowne: model może odczytać red=0, green=1, blue=2 jako informację, że green znajduje się "pomiędzy" red i blue, tworząc fałszywą kolejność. Zamiast tego należy użyć kodowania one-hot.
Kodowanie one-hot za pomocą get_dummies
pd.get_dummies tworzy jedną kolumnę binarną dla każdej kategorii. W każdym wierszu dokładnie jedna kolumna ma wartość 1, bez sugerowania kolejności, co idealnie sprawdza się w przypadku zmiennych nominalnych.
import pandas as pd
df = pd.DataFrame({"color": ["red", "green", "blue", "red"]})
print(pd.get_dummies(df, columns=["color"]))Pułapka zmiennych fikcyjnych
Gdy k kategorii tworzy k kolumn, są one doskonale współliniowe (ich suma zawsze wynosi 1). Ta pułapka zmiennych fikcyjnych powoduje problemy w modelach liniowych. Aby ją usunąć, należy usunąć jedną kolumnę.
drop_first
drop_first=True usuwa jedną kategorię, pozostawiając k-1 kolumn. Usunięta kategoria staje się niejawną kategorią bazową (same zera), co eliminuje współliniowość.
print(pd.get_dummies(df, columns=["color"], drop_first=True))
# one fewer column; the dropped color is the baselinesklearn OrdinalEncoder
W potokach OrdinalEncoder jest odpowiednikiem kodowania etykiet dla CECH w bibliotece sklearn i pozwala jawnie określić kolejność kategorii.
from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(categories=[["small", "medium", "large"]])
print(enc.fit_transform([["medium"], ["large"], ["small"]]))sklearn OneHotEncoder
OneHotEncoder to narzędzie do kodowania one-hot, które dobrze współpracuje z potokami. Uczy się kategorii na podstawie danych treningowych i stosuje to samo odwzorowanie do nowych danych, co ma kluczowe znaczenie w środowisku produkcyjnym.
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(sparse_output=False)
print(ohe.fit_transform([["red"], ["green"], ["blue"]]))Obsługa nieznanych kategorii
Dane testowe mogą zawierać kategorie, których nie było w danych treningowych. Należy ustawić handle_unknown="ignore", aby OneHotEncoder zwracał same zera zamiast kończyć działanie błędem.
ohe = OneHotEncoder(handle_unknown="ignore", sparse_output=False)
ohe.fit([["red"], ["green"]])
print(ohe.transform([["blue"]])) # all zeros, no errorKolumny o dużej kardynalności
Zakodowanie one-hot kolumny zawierającej tysiące unikatowych wartości gwałtownie zwiększa liczbę cech. W przypadku dużej kardynalności należy rozważyć kodowanie targetowe, haszowanie lub grupowanie rzadkich kategorii w kategorię "inne".
Szybki test
Sprawdź swoją wiedzę na temat kodowania.
Podsumowanie
Narzędzia do kodowania:
- Dane porządkowe -> kodowanie liczb całkowitych (
LabelEncoder/OrdinalEncoder) - Dane nominalne -> kodowanie one-hot (
pd.get_dummies/OneHotEncoder) drop_first=Truezapobiega pułapce zmiennych fikcyjnychhandle_unknown="ignore"obsługuje nieznane kategorie w danych testowych- Należy uważać na gwałtowny wzrost liczby cech w kolumnach o dużej kardynalności
Często zadawane pytania
Czy lekcja „Kodowanie zmiennych kategorialnych” jest bezpłatna?
Tak — pełny tekst „Kodowanie zmiennych kategorialnych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Kodowanie zmiennych kategorialnych”?
Kodowanie etykiet, one-hot encoding, kodowanie porządkowe, pd.get_dummies() a sklearn OrdinalEncoder. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Kodowanie zmiennych kategorialnych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wykrywanie i usuwanie wartości odstających
- Kodowanie zmiennych kategorialnych
- Skalowanie cech: normalizacja i standaryzacja
- Budowanie potoków przetwarzania wstępnego