支持向量機(Support Vector Machine,簡稱 SVM)是一種強大的監督學習算法,主要用於分類和迴歸任務,在分類中尤為常見。SVM 的核心思想是找到一個最優的超平面,將不同類別的數據儘可能分開
一、基本概念
1. 支持向量機(SVM)定義
- SVM 是一種基於最大間隔的分類方法,通過尋找使不同類別數據之間間隔最大的超平面來實現分類。
- 超平面:在二維空間中是直線,在三維空間中是平面,更高維空間中是超平面。
2. 支持向量(Support Vectors)
- 數據集中離超平面最近的點,決定了分類邊界(間隔)的大小。
3. 間隔(Margin)
- 分類邊界兩側到支持向量的距離,SVM 的目標是最大化這個間隔。
二、SVM 的原理
1. 線性可分情況
- 如果數據可以被一條直線(或超平面)完全分開,SVM 會找到這條最大間隔的直線。
2. 線性不可分情況
- 使用**核技巧(Kernel Trick)**將數據映射到高維空間,使其線性可分。
3. 核函數(Kernel Function)
- 常用核函數:
- 線性核(Linear Kernel)
- 多項式核(Polynomial Kernel)
- 徑向基函數核(RBF Kernel)
- Sigmoid 核(Sigmoid Kernel)
三、SVM 的數學模型
1. 目標函數
SVM 通過最大化間隔來尋找最優超平面,其數學形式為:
其中:
是權重向量
是偏置項
是類別標籤(+1 或 -1)
2. 軟間隔(Soft Margin)
- 允許部分樣本被錯誤分類,通過引入正則化項來防止過擬合。
四、SVM 的實現
1. 使用 Scikit-learn 實現(Python)
pythonfrom sklearn.svm import SVC
from sklearn.model_selection import train_test_split
# 假設 X 是特徵矩陣,y 是標籤(0 或 1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 使用線性核
model = SVC(kernel='linear')
model.fit(X_train, y_train)
predictions = model.predict(X_test)
2. 使用 RBF 核(非線性分類)
pythonmodel = SVC(kernel='rbf')
model.fit(X_train, y_train)
五、SVM 的優缺點
優點:
- 在高維空間中表現良好
- 適用於小樣本和非線性分類
- 對過擬合有較好的控制(通過正則化)
缺點:
- 對於大規模數據計算效率較低
- 參數調優複雜(如核函數、C 值)
- 對數據預處理敏感(需要標準化)
六、應用場景
- 文本分類
- 圖像識別
- 生物信息學
- 小樣本分類任務
七、評估指標
- 準確率(Accuracy)
- 精確率(Precision)
- 召回率(Recall)
- F1 分數
- 混淆矩陣
pythonfrom sklearn.metrics import accuracy_score, classification_report
accuracy = accuracy_score(y_test, predictions)
print(classification_report(y_test, predictions))
八、總結
支持向量機是一種高效的分類算法,尤其適合高維、小樣本和非線性數據。它通過核函數處理非線性問題,同時具備良好的泛化能力。在實際應用中,Scikit-learn 提供了方便的 SVM 實現,但需要合理選擇核函數和參數以獲得最佳效果