支持向量機(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 通過最大化間隔來尋找最優超平面,其數學形式為:

機器學習——支持向量機_支持向量機

其中:

  • 機器學習——支持向量機_支持向量機_02 是權重向量
  • 機器學習——支持向量機_核函數_03 是偏置項
  • 機器學習——支持向量機_核函數_04 是類別標籤(+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 實現,但需要合理選擇核函數和參數以獲得最佳效果