一、介紹
支持向量機(Support Vector Machines,SVM)是一種非常優秀的分類演算法,它在很多領域得到了廣泛的應用。Python中的SVM演算法實現引入了libsvm的介面,並使用numpy和scipy等庫對數據進行處理和計算。
二、數據處理
在使用SVM演算法進行分類之前,需要進行數據處理。常見的數據處理包括數據清洗、特徵選擇、特徵提取等操作。SVM演算法對數據的格式有特定的要求,需要將數據集轉化為SVM可接受的格式。
import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 載入數據集 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)
以上代碼中,我們首先使用Sklearn的load_iris函數載入iris數據集,並將數據和標籤分別存儲在X和y中。接著,使用train_test_split函數將數據集劃分為訓練集和測試集。
三、訓練SVM模型
在進行訓練之前,首先需要對數據進行標準化處理,以避免數據差異的影響。標準化處理可以使用preprocessing模塊中的StandardScaler函數實現。
from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC # 標準化處理 scaler = StandardScaler() X_train_std = scaler.fit_transform(X_train) X_test_std = scaler.transform(X_test) # 構建SVM分類器 svm = SVC(kernel='linear', C=1.0, random_state=42) svm.fit(X_train_std, y_train)
以上代碼中,我們使用StandardScaler對訓練集和測試集進行標準化處理。接著,使用SVC函數構建SVM分類器。其中,kernel參數指定核函數的類型,默認為rbf;C參數指定懲罰係數;random_state參數指定隨機種子值。
四、模型評估
在訓練好SVM模型後,我們需要選擇合適的評價指標對模型進行評估。常用的評價指標包括準確率、召回率、F1值等指標。
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report # 在測試集上進行預測 y_pred = svm.predict(X_test_std) # 計算準確率 accuracy = accuracy_score(y_test, y_pred) print(f"準確率為:{accuracy:.2f}") # 計算混淆矩陣 conf_mat = confusion_matrix(y_test, y_pred) print(f"混淆矩陣為:\n{conf_mat}") # 輸出分類報告 class_report = classification_report(y_test, y_pred) print(f"分類報告為:\n{class_report}")
以上代碼中,我們首先使用predict函數對測試集進行預測,並使用accuracy_score函數計算準確率。接著,使用confusion_matrix函數計算混淆矩陣。混淆矩陣可以幫助我們了解分類器在每個類別上的表現。最後,使用classification_report函數輸出分類報告,包括每個類別的準確率、召回率、F1值等指標。
五、調參技巧
調參是SVM模型訓練過程中非常重要的一步。常用的調參技巧包括網格搜索、隨機搜索和貝葉斯優化等。
from sklearn.model_selection import GridSearchCV # 定義參數網格 param_grid = { 'C': [0.1, 1, 10, 100], 'kernel': ['linear', 'rbf', 'poly', 'sigmoid'], 'gamma': [1, 0.1, 0.01, 0.001] } # 構建網格搜索器 gs = GridSearchCV(estimator=svm, param_grid=param_grid, scoring='accuracy', cv=5, verbose=1, n_jobs=-1) # 在訓練集上進行網格搜索 gs.fit(X_train_std, y_train) # 輸出最佳參數和最高得分 print(f"最佳參數為:{gs.best_params_}") print(f"最高得分為:{gs.best_score_:.2f}")
以上代碼中,我們使用GridSearchCV函數構建網格搜索器,並使用cv參數指定交叉驗證折數。接著,在訓練集上進行網格搜索,並使用best_params_輸出最佳參數和best_score_輸出最高得分。
六、總結
本文對PythonSVM演算法進行了詳細的闡述。從數據處理、訓練模型、評估模型和調參技巧等方面進行了講解。通過深入學習和實踐,我們能夠更好地應用SVM演算法進行分類和回歸分析。
原創文章,作者:RHLR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136515.html