一、什麼是支持向量機?
支持向量機(Support Vector Machine, SVM)首先由Vladimir Vapnik等人於上世紀90年代提出,是一種常見的機器學習演算法。SVM是一種非概率性二元線性分類器,它的基本想法是將數據映射到高維空間中,使得該空間中不同類別之間的超平面最大化,從而達到良好的分類效果。
SVM的主要優點在於它可以處理高維度的數據,並且能夠在處理較小數據集的時候取得非常好的效果。
二、SVM的原理
在SVM的訓練過程中,它會將數據集映射到高維空間中,並構建一個超平面來將不同類別的數據進行分類。超平面是指一個n維空間中的n-1維子空間,它能夠將數據點分為兩類。例如,在二維平面中,超平面就是一條直線,可以將數據點分為正負兩類。
但在實際應用中,數據點很可能不是線性可分的。因為SVM本身是一個線性分類器,所以需要對數據進行適當的處理,使得它們變成線性可分的。SVM的主要思想是利用核函數對輸入數據進行非線性轉換,將原始空間中不易分類的樣本映射到一個新的高維空間,使得它們在該空間中線性可分。
三、SVM的核函數
SVM的核函數是將數據點映射到新空間的重要工具之一。當我們想要處理的數據集不是線性可分的時候,可以使用非線性核函數將數據映射到一個高維空間中,使它們在該空間中線性可分。
常用的核函數有以下幾種:
線性核函數
線性核函數是一種最簡單的核函數,它是在原數據空間中直接求內積,對應於高維特徵空間中的一個線性核空間,數學表達式為:
K(x_i, x_j) = x_i * x_j
多項式核函數
多項式核函數通過引入多項式項將數據映射到高維空間中,表達式為:
K(x_i, x_j) = (x_i * x_j + c)^d
高斯核函數
高斯核函數也被稱為徑向基核函數,它是一種非常常用的核函數。
在高斯核函數的計算中,每個樣本都被映射到無窮維的空間中,該核函數的表達式為:
K(x_i, x_j) = exp(- gamma * ||x_i - x_j||^2)
四、SVM的核函數代碼示例
1.線性核函數代碼示例
import numpy as np from sklearn.svm import SVC X_train = np.array([[1, 2], [2, 3], [3, 3], [2, 1], [3, 2], [4, 3]]) y_train = np.array([1, 1, 1, -1, -1, -1]) svm_linear = SVC(kernel='linear', C=10) svm_linear.fit(X_train, y_train) print('支持向量:', svm_linear.support_vectors_) print('決策函數:', svm_linear.decision_function(X_train)) print('預測值:',svm_linear.predict(X_train))
2.多項式核函數代碼示例
import numpy as np from sklearn.svm import SVC X_train = np.array([[1, 2], [2, 3], [3, 3], [2, 1], [3, 2], [4, 3]]) y_train = np.array([1, 1, 1, -1, -1, -1]) svm_poly = SVC(kernel='poly', degree=3, coef0=1) svm_poly.fit(X_train, y_train) print('支持向量:', svm_poly.support_vectors_) print('決策函數:', svm_poly.decision_function(X_train)) print('預測值:',svm_poly.predict(X_train))
3.高斯核函數代碼示例
import numpy as np from sklearn.svm import SVC X_train = np.array([[1, 2], [2, 3], [3, 3], [2, 1], [3, 2], [4, 3]]) y_train = np.array([1, 1, 1, -1, -1, -1]) svm_rbf = SVC(kernel='rbf', gamma=1) svm_rbf.fit(X_train, y_train) print('支持向量:', svm_rbf.support_vectors_) print('決策函數:', svm_rbf.decision_function(X_train)) print('預測值:',svm_rbf.predict(X_train))
五、SVM的優缺點
優點:
- 在高維空間中,具有良好的泛化性能。
- 可以有效地處理高維特徵空間中的大型數據集。
- 適用於小樣本的情況。
- 對於非線性分類問題具有出色的表現。
缺點:
- 不適合大規模訓練集,因為它需要大量的空間和計算時間。
- 對於非常嘈雜的數據集,可能會出現過度擬合的現象。
- 對於多分類問題,需要進行額外的處理。
原創文章,作者:LRZEZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370068.html