杰瑞科技汇

Python sklearn如何入门使用?

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. X jsou vstupní znaky (features) a y jsou cílové hodnoty (labels/targets).
  • model.predict(X): Použije naučený model k předpovědi cílových hodnot pro nová data X.
  • model.score(X, y): Vypočítá metriku úspěšnosti modelu (např. přesnost u klasifikace) na datech X a y.

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 (jako StandardScaler).
    • Metoda fit() je společná pro všechny estimatory.
  • Transformer: Objekt, který transformuje data. Má metodu transform(), která aplikuje naučenou transformaci na data.
    • Příklady: StandardScaler, OneHotEncoder.
  • 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 je accuracy_score, mean_squared_error (pro regresi), roc_auc_score atd.
  • 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 jsou RandomForestClassifier, GradientBoostingClassifier nebo AdaBoostClassifier, 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:

  1. Jednotném rozhraní: Metody fit, predict, score jsou všude stejné.
  2. Široké škále algoritmů: Od jednoduchých lineárních modelů po složité ensembly.
  3. 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ě.
  4. Skvělé dokumentaci: Oficiální dokumentace sklearn je považována za jednu z nejlepších v oblasti softwaru.
分享:
扫描分享到社交APP
上一篇
下一篇