Support Vector Machines (SVM) yra galinga ir universali prižiūrimų mašininio mokymosi algoritmų klasė, ypač efektyvi atliekant klasifikavimo užduotis. Bibliotekos, tokios kaip scikit-learn programoje Python, užtikrina patikimą SVM diegimą, todėl jį gali pasiekti ir praktikai, ir tyrėjai. Šis atsakymas paaiškins, kaip scikit-learn gali būti naudojamas SVM klasifikacijai įgyvendinti, išsamiai aprašant pagrindines susijusias funkcijas ir pateikiant iliustruojančius pavyzdžius.
Įvadas į SVM
Pagalbinės vektoriaus mašinos veikia ieškodamos hiperplokštumos, kuri geriausiai atskiria duomenis į skirtingas klases. Dvimatėje erdvėje ši hiperplokštuma yra tiesiog linija, bet aukštesniuose matmenyse ji tampa plokštuma arba hiperplokštuma. Optimali hiperplokštuma yra ta, kuri maksimaliai padidina skirtumą tarp dviejų klasių, kur paraštė apibrėžiama kaip atstumas tarp hiperplokštumos ir artimiausių bet kurios klasės duomenų taškų, vadinamų paramos vektoriais.
Scikit-learn ir SVM
Scikit-learn yra galinga Python biblioteka, skirta mašininiam mokymuisi, teikianti paprastus ir veiksmingus duomenų gavybos ir duomenų analizės įrankius. Jis sukurtas naudojant „NumPy“, „SciPy“ ir „matplotlib“. Scikit-learn modulis „svm“ suteikia SVM algoritmų įgyvendinimą.
Pagrindinės funkcijos
1. „svm.SVC“.: Tai yra pagrindinė klasė, skirta atlikti klasifikavimą naudojant SVM. SVC reiškia paramos vektorių klasifikaciją.
2. "tinka".: Šis metodas naudojamas modeliui mokyti pagal duotus duomenis.
3. "numatyti".: Kai modelis yra išmokytas, šis metodas naudojamas nuspėti nurodytų bandymo duomenų klasių etiketes.
4. "balas".: Šis metodas naudojamas modelio tikslumui įvertinti pagal bandymo duomenis.
5. „GridSearchCV“.: naudojama hiperparametrų derinimui, siekiant rasti geriausius SVM modelio parametrus.
SVM klasifikacijos įdiegimas naudojant scikit-learn
Panagrinėkime veiksmus, susijusius su SVM klasifikavimo įgyvendinimu naudojant scikit-learn.
1 veiksmas: bibliotekų importavimas
Pirmiausia importuokite reikiamas bibliotekas:
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
2 veiksmas: įkelkite duomenų rinkinį
Demonstravimo tikslais naudosime „Iris“ duomenų rinkinį, gerai žinomą mašininio mokymosi bendruomenėje:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
3 veiksmas: duomenų rinkinio padalijimas
Padalinkite duomenų rinkinį į mokymo ir testavimo rinkinius:
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)
4 veiksmas: funkcijų mastelio keitimas
Funkcijų mastelio keitimas yra svarbus SVM, nes jis yra jautrus įvesties funkcijų mastui:
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)
5 veiksmas: SVM modelio mokymas
Sukurkite SVM klasifikatorių ir išmokykite jį pagal mokymo duomenis:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
Čia mes panaudojome linijinį branduolį ir nustatėme reguliavimo parametrą „C“ į 1.0. Branduolio parametras nurodo hiperplokštumos tipą, naudojamą duomenims atskirti. Įprasti branduoliai yra „tiesinis“, „polinomas“ (polinomas), „rbf“ (radialinė bazinė funkcija) ir „sigmoidinė“.
6 veiksmas: numatykite
Naudokite parengtą modelį, kad galėtumėte prognozuoti bandymo duomenis:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
7 veiksmas: modelio įvertinimas
Įvertinkite modelio našumą naudodami metriką, pvz., painiavos matricą ir klasifikavimo ataskaitą:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
Sumaišties matrica pateikia numatymo rezultatų santrauką, o klasifikavimo ataskaitoje yra kiekvienos klasės tikslumas, atšaukimas, F1 balas ir palaikymas.
Hiperparametrų derinimas naudojant GridSearchCV
Hiperparametrų derinimas yra būtinas norint optimizuoti SVM modelio veikimą. Scikit-learn „GridSearchCV“ gali būti naudojamas norint atlikti išsamią paiešką per nurodytą parametrų tinklelį:
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))
Šiame pavyzdyje mes ieškojome „C“ ir „gama“ reikšmių tinklelyje naudodami RBF branduolį. „GridSearchCV“ pavyzdys modeliui pritaiko geriausius paieškos metu rastus parametrus.
Sprendimo ribos vizualizavimas
Norint geriau suprasti, kaip veikia SVM klasifikatorius, dažnai naudinga vizualizuoti sprendimo ribą. Tai paprasčiau dvimatėje funkcijų erdvėje. Toliau pateikiamas sintetinių duomenų rinkinio pavyzdys:
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()
Aukščiau pateiktas kodas generuoja sintetinį duomenų rinkinį su dviem klasėmis, tinka SVM modeliui su linijiniu branduoliu ir vizualizuoja sprendimo ribą. Funkcija „Contourf“ naudojama nubrėžti sprendimo ribą, o sklaidos diagrama rodo duomenų taškus. „Scikit-learn“ suteikia išsamią ir patogią sąsają, skirtą SVM klasifikacijai įdiegti „Python“. Pagrindinės funkcijos, pvz., „svm.SVC“, „talpinti“, „numatyti“ ir „balas“, yra būtinos kuriant ir vertinant SVM modelius. Hiperparametrų derinimas naudojant „GridSearchCV“ dar labiau pagerina modelio našumą ieškant optimalių parametrų. Sprendimo ribos vizualizavimas gali suteikti vertingų įžvalgų apie klasifikatoriaus elgesį. Atlikus šiuos veiksmus, galima efektyviai įdiegti ir optimizuoti SVM klasifikaciją naudojant scikit-learn.
Kiti naujausi klausimai ir atsakymai apie EITC/AI/MLP mašininis mokymasis su „Python“:
- Kaip apskaičiuojamas b parametras taikant tiesinę regresiją (geriausiai atitinkančios linijos y kirtis)?
- Kokį vaidmenį vaidina paramos vektoriai apibrėžiant SVM sprendimo ribą ir kaip jie atpažįstami mokymo proceso metu?
- Kokia yra svorio vektoriaus „w“ ir poslinkio „b“ reikšmė SVM optimizavimo kontekste ir kaip jie nustatomi?
- Koks yra „vizualizavimo“ metodo tikslas diegiant SVM ir kaip jis padeda suprasti modelio veikimą?
- Kaip „numatymo“ metodas SVM diegime nustato naujo duomenų taško klasifikaciją?
- Koks yra pagrindinis „Support Vector Machine“ (SVM) tikslas mašininio mokymosi kontekste?
- Paaiškinkite apribojimo (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) reikšmę SVM optimizavime.
- Koks yra SVM optimizavimo uždavinio tikslas ir kaip jis matematiškai suformuluotas?
- Kaip funkcijų rinkinio klasifikacija SVM priklauso nuo sprendimo funkcijos ženklo (text{sign}(mathbf{x}_i cdot mathbf{w} + b))?
- Koks yra hiperplokštumos lygties (mathbf{x} cdot mathbf{w} + b = 0) vaidmuo palaikymo vektorių mašinų (SVM) kontekste?
Peržiūrėkite daugiau klausimų ir atsakymų EITC/AI/MLP mašininio mokymosi naudojant Python