本文將從多個方面對 SVM Python 代碼進行詳細闡述和解釋。首先,我們來看一下 SVM 的概念和相關背景知識。SVM(Support Vector Machine)是一種分類算法,其目標是找到一個最優超平面,將不同的類別分開。在 SVM 中,分類問題轉化為一個求解最優分割平面的優化問題,該問題可以通過解決一個二次規劃問題得到。SVM 模型在各類分類問題中被廣泛應用,比如圖像分類,文本分類,生物信息學等領域。
一、SVM 原理
1、SVM 的模型
SVM 的模型可以理解為一個超平面,在二維情況下,超平面就是一條直線,可以將兩個不同類別的點分隔開來。在高維情況下,超平面就是一個超曲面,同樣可以將不同類別的點分開。
from sklearn import datasets from sklearn.svm import SVC # load iris dataset iris = datasets.load_iris() # select only first two features X = iris.data[:, :2] y = iris.target # fit the model model = SVC(kernel='linear') model.fit(X, y)
2、SVM 的數學模型
SVM 的數學模型是一種優化問題,最終目標是找到一個最優解。在 SVM 中,根據不同的分類問題,我們可以選擇不同的核函數,比如線性核、多項式核、徑向基核等等。以下代碼中,為了簡化問題選擇線性核。
from sklearn import datasets from sklearn.svm import SVC # load iris dataset iris = datasets.load_iris() # select only first two features X = iris.data[:, :2] y = iris.target # fit the model model = SVC(kernel='linear') model.fit(X, y) # get the weights and bias of the hyperplane weights = model.coef_[0] bias = model.intercept_ # calculate the slope and intercept of the line slope = -weights[0] / weights[1] intercept = -bias / weights[1] print("Slope: " + str(slope)) print("Intercept: " + str(intercept))
二、SVM 參數
1、C 值
C 值是一個超參數,可以用於調整 SVM 模型的容錯能力。當 C 值很大時,模型會嘗試將所有數據點正確分類,但是模型的泛化能力可能會受到影響。當 C 值很小時,模型容易出現分類錯誤,但是模型的泛化能力可能會更好。
from sklearn import datasets from sklearn.svm import SVC # load iris dataset iris = datasets.load_iris() # select only first two features X = iris.data[:, :2] y = iris.target # fit the model with different C values model1 = SVC(C=0.1, kernel='linear') model2 = SVC(C=10, kernel='linear') model1.fit(X, y) model2.fit(X, y)
2、Gamma 值
在 SVM 中,Gamma 值用於控制核函數的寬度,對分類結果產生很大影響。Gamma 值越大,核函數的寬度就越窄,分類器會更加關注數據點周圍的局部區域,泛化能力可能會受到影響。Gamma 值越小,核函數的寬度就越寬,分類器會更關注數據點的總體分佈情況,泛化能力可能會更好。
from sklearn import datasets from sklearn.svm import SVC # load iris dataset iris = datasets.load_iris() # select only first two features X = iris.data[:, :2] y = iris.target # fit the model with different gamma values model1 = SVC(gamma=0.1, kernel='linear') model2 = SVC(gamma=10, kernel='linear') model1.fit(X, y) model2.fit(X, y)
三、SVM 應用案例
1、文本分類
SVM 也被廣泛應用於文本分類問題,比如情感分析和垃圾郵件過濾。在文本分類中,我們需要將每個文本轉換為向量形式,比如使用 TF-IDF 方法,然後將這些向量輸入到 SVM 模型中進行訓練。以下代碼展示了如何使用 SVM 進行情感分析。
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC from sklearn.metrics import accuracy_score # sample text dataset corpus = ['This is good news.', 'This is bad news.', 'This is terrible news.', 'This is amazing news.'] # convert corpus to vector form vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(corpus) # label dataset y = [1, 0, 0, 1] # fit SVM model and predict model = SVC(kernel='linear') model.fit(X, y) y_pred = model.predict(X) # calculate accuracy acc = accuracy_score(y, y_pred) print('Accuracy: {:.2f}'.format(acc))
2、圖像分類
SVM 也被廣泛應用於圖像分類問題,比如人臉識別和數字識別。在圖像分類中,我們通常使用 HOG 特徵提取方法將圖像轉換成向量形式,然後將這些向量輸入到 SVM 模型中進行訓練。以下代碼展示了如何使用 SVM 進行數字識別。
from sklearn import datasets from sklearn.svm import SVC from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from skimage.feature import hog # load handwritten digits dataset digits = datasets.load_digits() # get the features and labels hog_features = [] labels = [] for i in range(len(digits.images)): img = digits.images[i] hog_feature = hog(img, orientations=8, pixels_per_cell=(4, 4), cells_per_block=(1, 1), feature_vector=True) hog_features.append(hog_feature) labels.append(digits.target[i]) X = hog_features y = labels # split dataset into train and test set X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # fit SVM model and predict model = SVC(kernel='linear') model.fit(X_train, y_train) y_pred = model.predict(X_test) # calculate accuracy acc = accuracy_score(y_test, y_pred) print('Accuracy: {:.2f}'.format(acc))
四、本文總結
本文以 SVM Python 代碼為例,詳細闡述了 SVM 的原理、參數和應用案例。SVM 模型在各類分類問題中被廣泛應用,其優缺點和適用範圍需要仔細分析和評估。通過本文的學習,相信大家對 SVM 算法有了更加深入和全面的理解。
原創文章,作者:WYQDW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/374778.html