Jasné, Python a scikit-learn (sklearn) jsou jednou z nejpopulárnějších a nejmocnějších kombinací pro strojové učení v Pythonu. sklearn je knihovna, která poskytuje jednoduché a efektivní nástroje pro datovou analýzu a strojové učení.
Pojďme se na to podívat krok za krokem, od instalace až po kompletní příklad.
Instalace
Než začnete, ujistěte se, že máte nainstalovaný Python. Poté si můžete nainstalovat scikit-learn pomocí pip:
pip install scikit-learn
Doporučuje se také nainstalovat další knihovny, které se často používají společně s sklearn:
pip install numpy pandas matplotlib seaborn
- NumPy: Pro numerické operace.
- Pandas: Pro manipulaci a analýzu dat (např. načítání dat z CSV souborů do tabulek zvaných DataFrames).
- Matplotlib & Seaborn: pro vizualizaci dat.
Klíčové koncepty v sklearn
sklearn je postaven na několika základních principech, které z něj činí velmi uživatelsky přívětivou knihovnu.
a) Rozhraní API (Application Programming Interface)
Většina modelů v sklearn následuje jednotné rozhraní s klíčovými metodami:
model.fit(X, y): "Naučí" model na datech.Xjsou vstupní znaky (features) ayjsou cílové hodnoty (labels/targets).model.predict(X): Použije naučený model k předpovědi cílových hodnot pro nová dataX.model.score(X, y): Vypočítá metriku úspěšnosti modelu (např. přesnost u klasifikace) na datechXay.
b) Objekty vs. Třídy
V sklearn se setkáte s pojmy estimator, transformer a predictor.
- Estimator: Jakýkoliv objekt, který se může naučit z dat. To zahrnuje jak modely (jako
LogisticRegression), tak i nástroje pro předzpracování dat (jakoStandardScaler).- Metoda
fit()je společná pro všechny estimatory.
- Metoda
- Transformer: Objekt, který transformuje data. Má metodu
transform(), která aplikuje naučenou transformaci na data.- Příklady:
StandardScaler,OneHotEncoder.
- Příklady:
- Predictor: Objekt, který umí dělat předpovědi. Má metodu
predict().Příklady: všechny klasifikační a regresní modely.
Kompletní příklad: Klasifikace pomocí Stromového rozhodování
Nejlepší způsob, jak pochopit sklearn, je vidět ho v akci. Následující příklad provede klasický úkol strojového učení: klasifikaci. Budeme se snažit předpovědět, jestli si zákazník koupí produkt na základě jeho věku a platu.
Krok 1: Import potřebných knihoven
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Import z sklearn from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
Krok 2: Vytvoření a příprava dat
V reálném světě byste načítali data z CSV souboru pomocí pandas.read_csv(). Pro jednoduchost si je zde vytvoříme.
# Vytvoření fiktivních dat
data = {
'Vek': [22, 25, 47, 52, 46, 56, 23, 40, 54, 48, 50, 35, 38, 42, 28],
'Plat': [25000, 32000, 58000, 61000, 55000, 81000, 28000, 45000, 75000, 67000, 72000, 49000, 52000, 58000, 38000],
'Koupil': [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0] # 0 = Ne, 1 = Ano
}
df = pd.DataFrame(data)
# Zobrazení prvních 5 řádků
print("Původní data:")
print(df.head())
# Oddělení vstupních znaků (X) a cílové proměnné (y)
X = df[['Vek', 'Plat']] # Vstupní znaky
y = df['Koupil'] # Cílová proměnná
Krok 3: Rozdělení dat na trénovací a testovací sadu
Nikdy nevyhodnocujte svůj model na stejných datech, na kterých byl trénován. Rozdělíme data na dvě části:
- Trénovací sada (Training set): Model se na nich "naučí".
- Testovací sada (Test set): Model na nich otestujeme, abychom zjistili, jak dobře si vede na neznámých datech.
# Rozdělení dat na 80% trénovacích a 20% testovacích
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"\nVelikost trénovacích dat: {X_train.shape}")
print(f"Velikost testovacích dat: {X_test.shape}")
Krok 4: Předzpracování dat
Mnoho modelů funguje lépe, když jsou data na stejné škále. StandardScaler převede data tak, aby měly nulový průměr a jednotkovou odchylku.
# Vytvoření scaleru
scaler = StandardScaler()
# "Naučení" scaleru na trénovacích datech
scaler.fit(X_train)
# Transformace trénovacích a testovacích dat
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
print("\nData po škálování (první 3 řádky trénovacích dat):")
print(X_train_scaled[:3])
Krok 5: Vytvoření a trénování modelu
Zvolíme si jednoduchý, ale mocný model – Strom rozhodování (DecisionTreeClassifier).
# Vytvoření instance modelu
# random_state zajistí, že výsledky budou vždy stejné při každém spuštění
model = DecisionTreeClassifier(random_state=42)
# Trénování modelu na škálovaných trénovacích datech
model.fit(X_train_scaled, y_train)
print("\nModel byl úspěšně natrénován!")
Krok 6: Vyhodnocení modelu
Nyní použijeme naučený model k předpovědím na testovacích datech a zjistíme, jak je přesný.
# Predikce na testovacích datech
y_pred = model.predict(X_test_scaled)
# Výpočet přesnosti
accuracy = accuracy_score(y_test, y_pred)
print(f"\nPřesnost modelu: {accuracy:.2f}")
# Vytvoření a zobrazení matice záměnu (confusion matrix)
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 4))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Ne', 'Ano'], yticklabels=['Ne', 'Ano'])
plt.xlabel('Předpovězená hodnota')
plt.ylabel('Skutečná hodnota')'Matice záměnu')
plt.show()
# Zobrazení podrobné klasifikační zprávy
print("\nKlasifikační zpráva:")
print(classification_report(y_test, y_pred, target_names=['Ne', 'Ano']))
Krok 7: Predikce na nových datech
Nakonec si ukážeme, jak použít náš natrénovaný model k předpovědi pro zcela nového zákazníka.
# Předpokládejme, že máme nového zákazníka s věkem 30 a platem 40 000
novy_zakaznik = np.array([[30, 40000]])
# Důležité: Musíme data nového zákaznika také škálovat pomocí stejného scaleru!
novy_zakaznik_scaled = scaler.transform(novy_zakaznik)
# Predikce
predikce = model.predict(novy_zakaznik_scaled)
print(f"\nPredikce pro nového zákazníka (Vek: 30, Plat: 40000): {'Ano' if predikce[0] == 1 else 'Ne'}")
Další klíčové moduly v sklearn
sklearn.model_selection: Obsahuje nástroje pro rozdělení dat (train_test_split) a pro křížovou validaci (cross_val_score), která je robustnější způsob hodnocení modelu.sklearn.preprocessing: Nástroje pro přípravu dat, jako je škálování (StandardScaler,MinMaxScaler), kódování kategorických proměnných (OneHotEncoder,LabelEncoder).sklearn.metrics: Metriky pro hodnocení výkonu modelu, jako jeaccuracy_score,mean_squared_error(pro regresi),roc_auc_scoreatd.sklearn.pipeline: Umožňuje "slepit" různé kroky (např. škálování a model) do jednoho objektu. To je velmi užitečné, protože zabrání úniku informací z testovací sady do trénovací a zjednodušuje kód.sklearn.ensemble: Pokročilejší modely, jako jsouRandomForestClassifier,GradientBoostingClassifierneboAdaBoostClassifier, které často dosahují lepších výsledků.
Shrnutí
Python s sklearn tvoří základní pilíř pro každého, kdo se zabývá strojovým učením. Jeho síla spočívá v:
- Jednotném rozhraní: Metody
fit,predict,scorejsou všude stejné. - Široké škále algoritmů: Od jednoduchých lineárních modelů po složité ensembly.
- Komplexním nástroji: Vše, co potřebujete – od načtení dat přes předzpracování, trénování až po vyhodnocení – je na jednom místě.
- Skvělé dokumentaci: Oficiální dokumentace
sklearnje považována za jednu z nejlepších v oblasti softwaru.
