首頁  >  文章  >  後端開發  >  Python中的支援向量機演算法實例

Python中的支援向量機演算法實例

王林
王林原創
2023-06-10 16:42:141408瀏覽

支援向量機,英文全稱為Support Vecto Machines,簡稱SVM。它是一種非常優秀的分類模型,特別在小樣本、非線性以及高維模式辨識中都有很好的表現。 SVM是由Vapnik團隊在1992年提出,最初被用來解決二分類問題,後來逐漸發展成可以處理多分類問題的演算法。

Python是一種簡潔而強大的程式語言,它實作了眾多機器學習演算法的包,其中包括SVM。本文將介紹透過Python實現支援向量機演算法的步驟。

一、準備資料

我們來建構一組簡單的訓練資料。建立一個範例資料集,其中x1表示身高,x2表示體重,y為類別標籤(0或1)。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(7)
X_train = np.array([[167, 75], [182, 80], [176, 85], [156, 50], [173, 70], [183, 90], [178, 75], [156, 45],
                    [162, 55], [163, 50], [159, 45], [180, 85]])
y_train = np.array([0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1])
plt.scatter(X_train[y_train == 0][:, 0], X_train[y_train == 0][:, 1], c='r', s=40, label='Male')
plt.scatter(X_train[y_train == 1][:, 0], X_train[y_train == 1][:, 1], c='b', s=40, label='Female')
plt.legend()
plt.xlabel('Height')
plt.ylabel('Weight')
plt.show()

在這個資料集中,我們將人群分類為男性或女性。

二、選擇分類器

接下來,我們要選擇適用於這個問題的分類器,也就是SVM。 SVM有許多變種,但在這裡,我們使用的是線性SVM。

我們來建構一個SVM模型:

from sklearn.svm import SVC

svm = SVC(kernel='linear')
svm.fit(X_train, y_train)

在這裡,我們使用的是SVC類,指定kernel參數為linear ,表示我們使用線性核。

三、繪製決策邊界

我們想要知道模型的表現如何,因此我們可以在繪製出分類器的決策邊界:

def plot_decision_boundary(model, ax=None):
    if ax is None:
        ax = plt.gca()
    x_min, x_max = ax.get_xlim()
    y_min, y_max = ax.get_ylim()
    xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),
                         np.linspace(y_min, y_max, 100))
    Z = model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
    ax.contourf(xx, yy, Z, alpha=0.2)
    ax.contour(xx, yy, Z, colors='black', linewidths=0.5)
    ax.set_xlim([x_min, x_max])
    ax.set_ylim([y_min, y_max])
    
plt.scatter(X_train[y_train == 0][:, 0], X_train[y_train == 0][:, 1], c='r', s=40, label='Male')
plt.scatter(X_train[y_train == 1][:, 0], X_train[y_train == 1][:, 1], c='b', s=40, label='Female')
plot_decision_boundary(svm)
plt.legend()
plt.xlabel('Height')
plt.ylabel('Weight')
plt.show()

運行結束後,可以看到繪製出了分類器的決策邊界。

四、預測新資料

我們可以用訓練好的模型對新的資料進行預測。

X_test = np.array([[166, 70], [185, 90], [170, 75]])
y_test = svm.predict(X_test)
print(y_test)

在這裡,我們使用predict函數對三個新資料樣本進行預測。它將返回它們的類別。

結論

在這篇文章中,我們介紹如何使用Python中的支援向量機演算法。我們透過建立一個簡單的訓練資料集,並使用線性SVM建構了一個分類器。我們也繪製了分類器的決策邊界,並使用模型來預測了新的資料樣本。 SVM在許多場合也是非常受歡迎的演算法,可以在許多領域獲得好的表現。如果你想在處理資料時,掌握更多機器學習的演算法,那麼SVM也是非常值得學習的。

以上是Python中的支援向量機演算法實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn