Middle — Senior
Hogyan kezeljük a hiányzó értékeket és a kategóriás jellemzőket a modell tanítása előtt?
sobes.tech MI
Válasz az MI-től
A hiányzó értékek és a kategóriás jellemzők kezelése fontos lépés az adatok előkészítésében a gépi tanulási modellek tanításához.
Hiányzó értékek az adatokban:
- Sorok vagy oszlopok törlése: ha kevés hiányzó érték van, azokat a megfelelő sorokat vagy oszlopokat törölhetjük.
- Értékek kitöltése: gyakran használják az átlagot, mediánt, módot vagy egy speciális értéket (pl. "Ismeretlen"). Idősorok esetén lineáris vagy fordított interpoláció alkalmazható.
- Modellek használata: néha a hiányzó értékeket más modellek előrejelzéseivel töltik ki.
Kategóriás jellemzők:
- Címke kódolás: minden kategóriának numerikus kódot rendel. Rendezett kategóriákhoz alkalmas.
- One-Hot kódolás: bináris jellemzőket hoz létre minden kategóriához. Nem rendezett kategóriákhoz jó.
- Cél szerinti kódolás: a kategóriákat a célváltozó átlagával helyettesíti, de óvatosnak kell lenni az adat szivárgásának elkerülése érdekében.
Python példával pandas és scikit-learn használatával:
import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
# Példa adatok
data = pd.DataFrame({
'age': [25, 30, None, 22],
'city': ['Moscow', 'SPB', 'Moscow', None]
})
# Hiányzó értékek kitöltése mediánnal
imputer = SimpleImputer(strategy='median')
data['age'] = imputer.fit_transform(data[['age']])
# Hiányzó értékek kitöltése móddal
imputer_cat = SimpleImputer(strategy='most_frequent')
data['city'] = imputer_cat.fit_transform(data[['city']])
# One-Hot kódolás
encoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
encoded_cities = encoder.fit_transform(data[['city']])
encoded_df = pd.DataFrame(encoded_cities, columns=encoder.get_feature_names_out(['city']))
# Végső adatkeret
result = pd.concat([data.drop('city', axis=1), encoded_df], axis=1)
print(result)
A helyes hiányzó értékek és kategóriás jellemzők kezelése javítja a modell minőségét és elkerüli a tanulási hibákat.