Support Vector Machines (SVM) - гэта магутны і універсальны клас алгарытмаў машыннага навучання з кантролем, асабліва эфектыўны для задач класіфікацыі. Такія бібліятэкі, як scikit-learn у Python, забяспечваюць надзейныя рэалізацыі SVM, што робіць яго даступным як для практыкаў, так і для даследчыкаў. Гэты адказ растлумачыць, як можна выкарыстоўваць scikit-learn для ўкаранення класіфікацыі SVM, падрабязна апісваючы ключавыя функцыі і даючы ілюстрацыйныя прыклады.
Уводзіны ў SVM
Машыны Support Vector працуюць, знаходзячы гіперплоскасць, якая найлепшым чынам падзяляе даныя на розныя класы. У двухмернай прасторы гэтая гіперплоскасць проста лінія, але ў больш высокіх вымярэннях яна становіцца плоскасцю або гіперплоскасцю. Аптымальная гіперплоскасць - гэта тая, якая максімальна павялічвае запас паміж двума класамі, дзе запас вызначаецца як адлегласць паміж гіперплоскасцю і бліжэйшымі кропкамі даных з любога класа, вядомыя як апорныя вектары.
Scikit-learn і SVM
Scikit-learn - гэта магутная бібліятэка Python для машыннага навучання, якая забяспечвае простыя і эфектыўныя інструменты для здабычы і аналізу даных. Ён пабудаваны на NumPy, SciPy і matplotlib. Модуль `svm` у scikit-learn забяспечвае рэалізацыю алгарытмаў SVM.
асноўныя функцыі
1. `svm.SVC`: Гэта асноўны клас для выканання класіфікацыі з дапамогай SVM. SVC расшыфроўваецца як класіфікацыя апорных вектараў.
2. `падыходзіць`: Гэты метад выкарыстоўваецца для навучання мадэлі на дадзеных дадзеных.
3. `прадказаць`: Пасля навучання мадэлі гэты метад выкарыстоўваецца для прагназавання метак класа для дадзеных тэставых даных.
4. `ацэнка`: Гэты метад выкарыстоўваецца для ацэнкі дакладнасці мадэлі на аснове тэставых дадзеных.
5. `GridSearchCV`: Гэта выкарыстоўваецца для налады гіперпараметраў, каб знайсці найлепшыя параметры для мадэлі SVM.
Укараненне класіфікацыі SVM з дапамогай scikit-learn
Давайце разгледзім этапы ўкаранення класіфікацыі SVM з дапамогай scikit-learn.
Крок 1: Імпарт бібліятэк
Спачатку імпартуйце неабходныя бібліятэкі:
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: Загрузка набору даных
У дэманстрацыйных мэтах мы будзем выкарыстоўваць набор даных Iris, добра вядомы ў супольнасці машыннага навучання:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
Крок 3: Раздзяленне набору даных
Падзяліце набор даных на наборы для навучання і тэставання:
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: Маштабаванне функцый
Маштабаванне функцый важна для SVM, паколькі яно адчувальна да маштабу ўваходных функцый:
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: Навучанне мадэлі SVM
Стварыце асобнік класіфікатара SVM і навучыце яго на навучальных дадзеных:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
Тут мы выкарысталі лінейнае ядро і ўсталявалі параметр рэгулярызацыі "C" на 1.0. Параметр ядра вызначае тып гіперплоскасці, які выкарыстоўваецца для падзелу даных. Распаўсюджаныя ядра ўключаюць «лінейнае», «полі» (мнагачлен), «rbf» (радыяльная базісная функцыя) і «сігмаід».
Крок 6: Стварэнне прагнозаў
Выкарыстоўвайце падрыхтаваную мадэль, каб рабіць прагнозы на аснове тэставых даных:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
Крок 7: Ацэнка мадэлі
Ацаніце прадукцыйнасць мадэлі з дапамогай такіх паказчыкаў, як матрыца блытаніны і справаздача аб класіфікацыі:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
Матрыца блытаніны змяшчае зводку вынікаў прагназавання, у той час як справаздача аб класіфікацыі ўключае дакладнасць, запамінанне, адзнаку F1 і падтрымку для кожнага класа.
Настройка гіперпараметраў з дапамогай GridSearchCV
Настройка гіперпараметраў важная для аптымізацыі прадукцыйнасці мадэлі SVM. `GridSearchCV` Scikit-learn можна выкарыстоўваць для выканання поўнага пошуку па вызначанай сетцы параметраў:
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))
У гэтым прыкладзе мы шукалі па сетцы значэнняў для "C" і "gamma" з дапамогай ядра RBF. Экземпляр `GridSearchCV` перабудоўвае мадэль з лепшымі параметрамі, знойдзенымі падчас пошуку.
Візуалізацыя мяжы рашэння
Для лепшага разумення таго, як працуе класіфікатар SVM, часта бывае карысна візуалізаваць мяжу рашэння. Гэта больш проста ў двухмернай прасторы функцый. Ніжэй прыведзены прыклад выкарыстання сінтэтычнага набору даных:
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()
Прыведзены вышэй код стварае сінтэтычны набор даных з двума класамі, адпавядае мадэлі SVM з лінейным ядром і візуалізуе мяжу рашэння. Функцыя `contourf` выкарыстоўваецца для пабудовы мяжы рашэння, а дыяграма рассейвання паказвае кропкі даных. Scikit-learn забяспечвае ўсёабдымны і зручны інтэрфейс для рэалізацыі класіфікацыі SVM на Python. Ключавыя функцыі, такія як `svm.SVC`, `fit`, `predict` і `score`, важныя для стварэння і ацэнкі мадэляў SVM. Настройка гіперпараметраў з дапамогай `GridSearchCV` яшчэ больш павышае прадукцыйнасць мадэлі, знаходзячы аптымальныя параметры. Візуалізацыя мяжы рашэння можа даць каштоўную інфармацыю пра паводзіны класіфікатара. Выконваючы гэтыя крокі, можна эфектыўна рэалізаваць і аптымізаваць класіфікацыю SVM з дапамогай scikit-learn.
Іншыя апошнія пытанні і адказы адносна EITC/AI/MLP Машыннае навучанне з Python:
- Як разлічваецца параметр b у лінейнай рэгрэсіі (перасячэнне y найлепшым чынам)?
- Якую ролю адыгрываюць вектары падтрымкі ў вызначэнні мяжы рашэння SVM і як яны вызначаюцца ў працэсе навучання?
- У кантэксце аптымізацыі SVM, якое значэнне вектара вагі "w" і зрушэння "b" і як яны вызначаюцца?
- Якая мэта метаду `visualize` у рэалізацыі SVM і як ён дапамагае зразумець прадукцыйнасць мадэлі?
- Як метад "predict" у рэалізацыі SVM вызначае класіфікацыю новай кропкі даных?
- Якая галоўная мэта машыны апорнага вектара (SVM) у кантэксце машыннага навучання?
- Растлумачце значэнне абмежавання (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) у аптымізацыі SVM.
- Якая мэта задачы аптымізацыі SVM і як яна фармулюецца матэматычна?
- Як класіфікацыя набору функцый у SVM залежыць ад знака вырашальнай функцыі (тэкст{знак}(mathbf{x}_i cdot mathbf{w} + b))?
- Якая роля ўраўнення гіперплоскасці (mathbf{x} cdot mathbf{w} + b = 0) у кантэксце апорных вектарных машын (SVM)?
Глядзіце больш пытанняў і адказаў у EITC/AI/MLP Machine Learning with Python