Implementácia KNN v Pythone pomocou sklearn

K-Nearest Neighbors (KNN) je populárny algoritmus strojového učenia používaný na klasifikáciu a regresiu. V Pythonu sa najčastejšie implementuje pomocou knižnice scikit-learn (sklearn). Tento článok sa zameriava na podrobný návod, ako implementovať KNN v Pythone, vrátane prípravy dát, tréningu modelu, hodnotenia jeho výkonu a ďalších pokročilých techník, ktoré môžu byť užitočné pri optimalizácii modelu.

Najskôr sa pozrime na to, čo je KNN a prečo je užitočný. KNN je algoritmus, ktorý triedi nové dáta na základe podobnosti s existujúcimi dátami. Je veľmi intuitívny a jeho implementácia v Pythone je relatívne jednoduchá. V skratke, algoritmus vyhľadáva najbližších "k" susedov k novému bodu a na základe ich kategórie rozhoduje o klasifikácii nového bodu.

1. Príprava prostredia

Predtým, ako začneme, musíme zabezpečiť, aby boli nainštalované všetky potrebné knižnice. Ak ešte nemáte nainštalovaný scikit-learn, môžete to urobiť pomocou pip:

bash
pip install scikit-learn

Okrem toho sa nám môže hodiť aj numpy a pandas na manipuláciu s dátami:

bash
pip install numpy pandas

2. Načítanie a príprava dát

Ako prvý krok musíme načítať naše dáta. Na tento účel môžeme použiť knižnicu pandas. Predpokladajme, že máme dataset vo formáte CSV:

python
import pandas as pd # Načítanie dát data = pd.read_csv('data.csv') # Zobrazenie prvých riadkov datasetu print(data.head())

Po načítaní dát je potrebné ich rozdeliť na vstupné a výstupné premenné. Vstupné premenné sú vlastnosti (features), ktoré použijeme na predikciu, a výstupné premenné sú cieľové hodnoty, ktoré sa snažíme predpovedať.

python
X = data.drop('target', axis=1) # Vstupné premenné y = data['target'] # Výstupné premenné

3. Rozdelenie dát na tréningovú a testovaciu množinu

Pred tréningom modelu je dôležité rozdeliť dáta na tréningovú a testovaciu množinu. Toto umožňuje modelu učiť sa na jednej časti dát a hodnotiť svoju presnosť na druhej časti:

python
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

4. Tréning modelu KNN

Teraz môžeme pristúpiť k tréningu modelu KNN. Pre tento účel použijeme KNeighborsClassifier zo scikit-learn:

python
from sklearn.neighbors import KNeighborsClassifier # Vytvorenie modelu KNN knn = KNeighborsClassifier(n_neighbors=5) # Nastavíme počet susedov na 5 # Tréning modelu knn.fit(X_train, y_train)

5. Hodnotenie výkonu modelu

Po tréningu modelu je dôležité zistiť, ako dobre funguje na testovacích dátach. Môžeme použiť rôzne metriky, ako je presnosť (accuracy), presnosť, odvolanie (recall) a F1 skóre:

python
from sklearn.metrics import accuracy_score, classification_report # Predikcia na testovacích dátach y_pred = knn.predict(X_test) # Vyhodnotenie presnosti accuracy = accuracy_score(y_test, y_pred) print(f'Presnosť modelu: {accuracy}') # Podrobné hodnotenie print(classification_report(y_test, y_pred))

6. Ladenie hyperparametrov

Pre optimalizáciu modelu môžeme upravovať rôzne hyperparametre. Najdôležitejší je počet susedov (k). Môžeme vykonať krížovú validáciu (cross-validation) na zistenie optimálneho počtu susedov:

python
from sklearn.model_selection import GridSearchCV # Definovanie rozsahu hyperparametrov param_grid = {'n_neighbors': [3, 5, 7, 9, 11]} # Vytvorenie GridSearchCV objektu grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5) # Tréning na dátach grid_search.fit(X_train, y_train) # Zobrazenie najlepších parametrov print(f'Najlepší počet susedov: {grid_search.best_params_["n_neighbors"]}')

7. Pokročilé techniky

Pre zlepšenie výkonu môžeme tiež zvážiť použitie váženého KNN (weighted KNN), kde sa váhy priraďujú k susedom na základe ich vzdialenosti:

python
knn_weighted = KNeighborsClassifier(n_neighbors=5, weights='distance') knn_weighted.fit(X_train, y_train) # Vyhodnotenie modelu y_pred_weighted = knn_weighted.predict(X_test) print(f'Presnosť váženého KNN modelu: {accuracy_score(y_test, y_pred_weighted)}')

8. Vizualizácia výsledkov

Ak pracujeme s dátami s dvoma alebo troma vlastnosťami, môžeme vizualizovať rozhodovacie hranice modelu:

python
import matplotlib.pyplot as plt import numpy as np # Funkcia na vizualizáciu rozhodovacích hraníc def plot_decision_boundary(clf, X, y): x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02)) Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k', marker='o') plt.show() # Predpokladajme, že X má dve vlastnosti plot_decision_boundary(knn, X_test.values, y_test)

9. Záver

Implementácia KNN v Pythone pomocou sklearn je veľmi priamočiara a flexibilná. Vďaka množstvu parametrov, ktoré môžeme upravovať a rôznym metrikám hodnotenia môžeme veľmi efektívne prispôsobiť model našim potrebám. Tento článok poskytuje základný prehľad a niekoľko techník na optimalizáciu a hodnotenie modelu KNN. Pokročilejšie techniky, ako je vážené KNN a krížová validácia, môžu významne zlepšiť výkon modelu v reálnych aplikáciách.

Populárne komentáre
    Momentálne žiadne komentáre
Komentár

0