支援向量機 (SVM) 簡介
支援向量機 (SVM) 簡介
支援向量機 (SVM) 是機器學習領域中一種強大的技術,可用於分類和迴歸分析。它廣泛應用於許多領域,包括生物資訊學、文字分類和影像分類。SVM 的主要優勢在於它能夠處理高維資料集和非線性分類問題。本文將介紹 SVM 的概念,並說明如何在 Python 中使用它。
支援向量機 (SVM)
定義
支援向量機 (SVM) 是一種機器學習演算法,用於找到最佳超平面來對資料進行分類。它透過測量超平面與每個類別中最近的資料點之間的距離來最大化兩個類別之間的間隔。最接近超平面的資料點稱為支援向量。SVM 可以處理線性分類和非線性分類問題,方法是應用核函式將輸入資料轉換到更高維的特徵空間,在此空間中可以使用線性超平面來分離類別。
語法
from sklearn import svm clf = svm.SVC(kernel='linear') clf.fit(X_train, y_train)
語法解釋
‘from sklearn import svm’ − 此行從 Scikit-Learn 庫匯入 SVM 模組。
‘clf = svm.SVC(kernel=’linear’) − 此行初始化一個具有線性核的 SVM 分類器。還可以使用其他核函式,例如多項式核、徑向基函式 (RBF) 核和 sigmoid 核。
‘clf.fit(X_train, y_train)’ − 此行根據訓練資料 (X_train) 和相應的類別標籤 (y_train) 訓練 SVM 分類器。
演算法
步驟 1:資料預處理 − 預處理步驟從給定資料中去除任何缺失或冗餘特徵。
步驟 2:特徵提取 − 特徵提取過程將輸入資料轉換為一組可用於訓練 SVM 分類器的特徵。
步驟 3:訓練 SVM 分類器 − 使用輸入資料訓練 SVM 分類器,以找到用於對資料進行分類的最佳超平面。
步驟 4:測試 SVM 分類器 − 使用一組驗證資料測試 SVM 分類器並評估其效能。
步驟 5:調整 SVM 分類器 − 透過調整 SVM 分類器的超引數來調整它,以提高其在驗證資料上的效能。
方法
方法 1 − 展示線性 SVM 的程式
方法 2 − 展示非線性 SVM 的程式
方法 1:展示線性 SVM 的程式
當輸入資料可以透過線性超平面分離時,使用線性 SVM。以下是相應的程式碼。
示例
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
clf = svm.SVC(kernel='linear')
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
輸出
Accuracy: 1.0
載入資料集 − 我們可以使用 scikit-learn 庫載入資料集。iris 資料集是一個常用的可用於分類任務的資料集。
將資料集分成訓練集和測試集 − 使用 scikit-learn 庫中的 train_test_split 函式將資料集分成訓練集和測試集。
建立具有非線性核的 SVM 分類器 − 我們使用 scikit-learn 庫中的 svm.SVC 函式建立具有非線性核的 SVM 分類器。
訓練 SVM 分類器 − 使用 fit 方法對訓練資料訓練 SVM 分類器。
測試 SVM 分類器 − 使用 predict 方法對測試資料測試 SVM 分類器。
方法 2:展示非線性 SVM 的程式
當輸入資料不能用線性超平面分離時,使用非線性 SVM。在這個方法中,使用核技巧將輸入資料轉換到更高維的特徵空間,以便可以使用線性超平面分離資料。
示例
from sklearn.datasets import make_circles from sklearn.model_selection import train_test_split from sklearn import svm from sklearn.metrics import accuracy_score X, y = make_circles(n_samples=100, noise=0.1, factor=0.5, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) clf = svm.SVC(kernel='rbf') clf.fit(X_train, y_train) y_pred = clf.predict(X_test) accuracy = accuracy score(y_test, y_pred) print(“Accuracy:”,accuracy)
輸出
Accuracy: 0.9
載入資料集 − 我們可以使用 scikit-learn 庫的 make_circles 方法建立一個具有兩個類別且不能用線性超平面分離的玩具資料集。
從資料集中建立訓練集和測試集 − 使用 scikit-learn 庫中的 train_test_split 函式將資料集分成訓練集和測試集。
將非線性核整合到 SVM 分類器中 − 使用 scikit-learn 庫中的 svm.SVC 函式,我們建立一個具有非線性核的 SVM 分類器。在這個例子中,我們使用 RBF 核。
訓練 SVM 分類器 − 使用 fit 方法對訓練資料訓練 SVM 分類器。
測試 SVM 分類器 − 使用 predict 方法對測試資料測試 SVM 分類器。
結論
總而言之,SVM 是一種強大的機器學習技術,可應用於線性分類和非線性分類問題。它們廣泛應用於許多行業,並具有許多實際應用。在本文中,我們介紹了 SVM,討論了它們的定義和語法,並描述了線性 SVM 和非線性 SVM 的 Python 實現方法。此外,我們還提供了將這些方法應用於兩個資料集的完整程式碼,並使用準確性作為指標展示了它們的有效性。透過學習 SVM 以及如何在 Python 中實現它們,機器學習專業人員可以擴充套件他們的技能,並使用 SVM 來解決各種現實世界的問題。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP