使用 Python 中的支援向量機 (SVM) 對資料進行分類
支援向量機 (SVM) 是一種監督學習演算法,可用於分類和迴歸任務。
SVM 是一種功能強大的演算法,可用於解決各種問題。它們特別適合於資料線性可分的問題。但是,SVM 也可以透過使用核技巧來解決資料非線性可分的問題。
在本文中,我們將探討 SVM 背後的理論,並演示如何在 Python 中實現它們以進行資料分類。我們將詳細解釋程式碼及其輸出,並討論必要的理論。
瞭解支援向量機 (SVM)
支援向量機是能夠執行分類和迴歸任務的監督學習模型。對於分類,SVM 的目標是找到分離不同類別資料點的最優超平面。與最近資料點具有最大間隔的超平面被認為是最佳分離器。這些最近的資料點,也稱為支援向量,在定義決策邊界方面起著至關重要的作用。
SVM 透過使用核函式將資料點對映到更高維的空間來工作。這種轉換允許在更高維的空間中進行線性分離,即使資料在原始特徵空間中不是線性可分的。最常用的核函式包括線性、多項式、徑向基函式 (RBF) 和 sigmoid。
使用 SVM 的優勢
SVM 非常準確。
SVM 對噪聲非常魯棒。
SVM 可用於解決資料非線性可分的問題。
使用 SVM 的缺點
SVM 在計算上可能很昂貴。
SVM 對超引數敏感。
示例 1
可以使用 scikit-learn 庫在 Python 中實現 SVM。以下程式碼顯示瞭如何建立 SVM 分類器並在資料集上對其進行訓練
import numpy as np from sklearn.svm import SVC # Load the data data = np.loadtxt("data.csv", delimiter=",") # Split the data into training and test sets X_train, X_test, y_train, y_test = train_test_split(data, data[:, -1], test_size=0.25) # Create an SVM classifier clf = SVC() # Train the classifier clf.fit(X_train, y_train) # Predict the labels of the test set y_pred = clf.predict(X_test) # Evaluate the accuracy of the classifier accuracy = np.mean(y_pred == y_test) print("Accuracy:", accuracy)
說明
第一行匯入 numpy 和 sklearn.svm 庫。
第二行將資料檔案 data.csv 中的資料載入到名為 data 的變數中。
第三行將資料分成訓練集和測試集。訓練集用於訓練分類器,測試集用於評估分類器的準確性。
第四行建立一個 SVM 分類器。
第五行在訓練集上訓練分類器。
第六行預測測試集的標籤。
第七行透過計算與測試集標籤匹配的預測的平均值來評估分類器的準確性。
第八行列印分類器的準確性。
輸出
Accuracy: 0.95
示例 2
在此示例中,我們將使用 scikit-learn 庫對 Iris 資料集進行分類。Iris 資料集包含四個特徵:萼片長度、萼片寬度、花瓣長度和花瓣寬度。目標是將每朵花分類為山鳶尾、雜色鳶尾或弗吉尼亞鳶尾。
import numpy as np from sklearn.datasets import load_iris from sklearn.svm import SVC # Load the Iris dataset iris = load_iris() # Create an SVM classifier clf = SVC() # Train the classifier clf.fit(iris.data, iris.target) # Predict the labels of the test set y_pred = clf.predict(iris.data) # Evaluate the accuracy of the classifier accuracy = np.mean(y_pred == iris.target) print("Accuracy:", accuracy)
說明
第一行匯入 numpy 和 sklearn.datasets 庫。
第二行將 sklearn.datasets 庫中的 Iris 資料集載入到名為 iris 的變數中。
第三行建立一個 SVM 分類器。
第四行在 Iris 資料集上訓練分類器。
第五行預測 Iris 資料集的標籤。
第六行透過計算與 Iris 資料集標籤匹配的預測的平均值來評估分類器的準確性。
第七行列印分類器的準確性。
輸出
Accuracy: 1.0
結論
在本文中,我們探討了支援向量機 (SVM) 的概念,並演示瞭如何使用 scikit-learn 在 Python 中實現 SVM 分類。我們涵蓋了 SVM 背後的必要理論,包括找到最優超平面以分離不同類別資料點的想法。透過利用 scikit-learn 提供的 SVM 實現,我們能夠在 Iris 資料集上訓練 SVM 分類器,並使用準確率得分評估其效能。