Support Vector Machines (SVM) on tehokas ja monipuolinen valvottujen koneoppimisalgoritmien luokka, joka on erityisen tehokas luokitustehtävissä. Pythonin scikit-learnin kaltaiset kirjastot tarjoavat vankkoja SVM-toteutuksia, mikä tekee siitä sekä ammattilaisten että tutkijoiden käytettävissä. Tämä vastaus selventää, kuinka scikit-learnia voidaan käyttää SVM-luokituksen toteuttamiseen, ja siinä selvitetään tärkeimmät toiminnot ja annetaan havainnollisia esimerkkejä.
SVM:n esittely
Tukivektorikoneet toimivat etsimällä hypertason, joka parhaiten erottaa tiedot eri luokkiin. Kaksiulotteisessa avaruudessa tämä hypertaso on yksinkertaisesti viiva, mutta korkeammissa ulottuvuuksissa siitä tulee taso tai hypertaso. Optimaalinen hypertaso on se, joka maksimoi marginaalin kahden luokan välillä, jossa marginaali määritellään hypertason ja lähimpien datapisteiden väliseksi etäisyydeksi jommastakummasta luokasta, eli tukivektoreista.
Scikit-learn ja SVM
Scikit-learn on tehokas Python-kirjasto koneoppimiseen, joka tarjoaa yksinkertaisia ja tehokkaita työkaluja tiedon louhintaan ja tietojen analysointiin. Se on rakennettu NumPylle, SciPylle ja matplotlibille. Scikit-learnin `svm`-moduuli tarjoaa SVM-algoritmien toteutuksen.
Avaintoiminnot
1. `svm.SVC`: Tämä on pääluokka SVM-luokituksen suorittamiseen. SVC tulee sanoista Support Vector Classification.
2. "sopii".: Tätä menetelmää käytetään mallin kouluttamiseen annetuilla tiedoilla.
3. `ennustaa`: Kun malli on koulutettu, tätä menetelmää käytetään ennustamaan annettujen testitietojen luokkatunnisteet.
4. `pisteet`: Tätä menetelmää käytetään mallin tarkkuuden arvioimiseen testitiedoissa.
5. "GridSearchCV".: Tätä käytetään hyperparametrien virittämiseen parhaiden parametrien löytämiseksi SVM-mallille.
SVM-luokituksen käyttöönotto scikit-learnillä
Tarkastellaan vaiheita, jotka liittyvät SVM-luokituksen toteuttamiseen scikit-learnillä.
Vaihe 1: Kirjastojen tuonti
Tuo ensin tarvittavat kirjastot:
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
Vaihe 2: Tietojoukon lataaminen
Esittelytarkoituksiin käytämme Iris-tietojoukkoa, joka on koneoppimisyhteisössä hyvin tunnettu tietojoukko:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
Vaihe 3: Tietojoukon jakaminen
Jaa tietojoukko harjoitus- ja testausjoukkoon:
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Vaihe 4: Ominaisuuden skaalaus
Ominaisuuden skaalaus on tärkeää SVM:lle, koska se on herkkä syöttöominaisuuksien mittakaavalle:
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
Vaihe 5: SVM-mallin koulutus
Instantoi SVM-luokitin ja harjoittele se harjoitustietojen perusteella:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
Tässä käytimme lineaarista ydintä ja asetimme regularisointiparametrin C arvoon 1.0. Ydinparametri määrittää datan erottamiseen käytetyn hypertason tyypin. Yleisiä ytimiä ovat 'lineaarinen', 'poly' (polynomi), 'rbf' (radiaalinen kantafunktio) ja 'sigmoidi'.
Vaihe 6: Ennusteiden tekeminen
Käytä koulutettua mallia tehdäksesi ennusteita testitiedoista:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
Vaihe 7: Mallin arviointi
Arvioi mallin suorituskykyä käyttämällä mittareita, kuten sekaannusmatriisia ja luokitusraporttia:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
Sekaannusmatriisi tarjoaa yhteenvedon ennustetuloksista, kun taas luokitusraportti sisältää tarkkuuden, palautuksen, F1-pisteet ja tuen jokaiselle luokalle.
Hyperparametrien viritys GridSearchCV:llä
Hyperparametrien viritys on välttämätöntä SVM-mallin suorituskyvyn optimoimiseksi. Scikit-learnin GridSearchCV:tä voidaan käyttää kattavan haun suorittamiseen määritetyn parametriruudukon yli:
python from sklearn.model_selection import GridSearchCV # Define the parameter grid param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf'] } # Create a GridSearchCV instance grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) grid.fit(X_train, y_train) # Print the best parameters and the corresponding score print("Best parameters found: ", grid.best_params_) print("Best score: ", grid.best_score_) # Use the best estimator to make predictions grid_predictions = grid.predict(X_test) # Evaluate the model with the best parameters print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))
Tässä esimerkissä etsimme C- ja gamma-arvojen ruudukosta RBF-ytimen avulla. GridSearchCV-instanssi täydentää mallin parhailla haun aikana löydetyillä parametreilla.
Päätösrajan visualisointi
SVM-luokittimen toiminnan ymmärtämiseksi on usein hyödyllistä visualisoida päätösraja. Tämä on yksinkertaisempaa kaksiulotteisessa ominaisuustilassa. Alla on esimerkki synteettisen tietojoukon käyttämisestä:
python from sklearn.datasets import make_blobs # Generate a synthetic dataset X, y = make_blobs(n_samples=100, centers=2, random_state=6) # Fit the SVM model svc = SVC(kernel='linear', C=1.0) svc.fit(X, y) # Create a mesh to plot the decision boundary h = .02 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, h), np.arange(y_min, y_max, h)) # Predict the class for each point in the mesh Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # Plot the decision boundary plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show()
Yllä oleva koodi luo synteettisen tietojoukon, jossa on kaksi luokkaa, sopii SVM-malliin, jossa on lineaarinen ydin, ja visualisoi päätösrajan. Contourf-funktiota käytetään päätöksen rajan piirtämiseen, ja sirontakaavio näyttää datapisteet. Scikit-learn tarjoaa kattavan ja käyttäjäystävällisen käyttöliittymän SVM-luokituksen toteuttamiseen Pythonissa. Tärkeimmät toiminnot, kuten "svm.SVC", "fit", "predict" ja "score" ovat välttämättömiä SVM-mallien rakentamisessa ja arvioinnissa. Hyperparametrien viritys GridSearchCV:llä parantaa mallin suorituskykyä entisestään etsimällä optimaaliset parametrit. Päätösrajan visualisointi voi antaa arvokkaita näkemyksiä luokittelijan käyttäytymisestä. Seuraamalla näitä vaiheita voidaan tehokkaasti toteuttaa ja optimoida SVM-luokittelu käyttämällä scikit-learnia.
Muita viimeaikaisia kysymyksiä ja vastauksia liittyen EITC/AI/MLP-koneoppiminen Pythonilla:
- Miten b-parametri lineaarisessa regressiossa (parhaiten sopivan suoran y-leikkaus) lasketaan?
- Mikä rooli tukivektoreilla on SVM:n päätösrajan määrittelyssä ja miten ne tunnistetaan koulutusprosessin aikana?
- Mikä on painovektorin "w" ja biasin "b" merkitys SVM-optimoinnin yhteydessä ja miten ne määritetään?
- Mikä on visualisointimenetelmän tarkoitus SVM-toteutuksessa ja miten se auttaa ymmärtämään mallin suorituskykyä?
- Miten ennustusmenetelmä SVM-toteutuksessa määrittää uuden datapisteen luokituksen?
- Mikä on tukivektorikoneen (SVM) ensisijainen tavoite koneoppimisen yhteydessä?
- Selitä rajoitteen (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) merkitys SVM-optimoinnissa.
- Mikä on SVM-optimointiongelman tavoite ja miten se muotoillaan matemaattisesti?
- Miten ominaisuusjoukon luokitus SVM:ssä riippuu päätösfunktion etumerkistä (text{sign}(mathbf{x}_i cdot mathbf{w} + b))?
- Mikä on hypertasoyhtälön (mathbf{x} cdot mathbf{w} + b = 0) rooli tukivektorikoneissa (SVM)?
Katso lisää kysymyksiä ja vastauksia EITC/AI/MLP-koneoppimisesta Pythonilla