支援向量機,英文全稱為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中文網其他相關文章!