python的sklearn庫封裝了許多常用的機器學習算法,而且入門簡單,調用方便。下面我們用sklearn庫和簡單的幾個點作爲數據集,來實現一個簡單的SVM分類器。
首先,準備好數據。我們把(2,0),(0,2),(0,0)這三個點當作類別1;(3,0),(0,3),(3,3)這三個點當作類別2,訓練好SVM分類器之後,我們預測(-1,-1),(4,4)這兩個點所屬的類別。示意圖如下:
1、組裝數據集。
在組裝數據集的時候,這裏最重要的就是要注意數據的組合格式。data中每行元素作爲一個樣本,各列分別是該樣本的各個屬性,比如上邊的幾個點,封裝成如下格式:x = np.array([[2,0],[0,2],[0,0],[3,0],[0,3],[3,3]])
。label排成一行,與data中的數據相對應即可:y = np.array([1,1,1,2,2,2])
【注】:這裏利用Pandas進行封裝也可以。
import pandas as pd
data = np.array([[2,0,1],[0,2,1],[0,0,1],[3,0,2],[0,3,2],[3,3,2]])
data = pd.DataFrame(data,column = [0,1,2])
x = data[[0,1]]
y = data[2]
2、設置SVM分類器的屬性
model = SVC(kernel='linear', probability=True)
當probability=False時,沒辦法調用 model.predict_proba()函數
可選的屬性列表:
- 待完善1
- 待完善2
3、執行SVM分類器
model.fit(x,y)
4、預測
pre = model.predict_proba(C)
最後,附完整代碼如下:
from sklearn.svm import SVC
import numpy as np
x = np.array([[2,0],[0,2],[0,0],[3,0],[0,3],[3,3]])
y = np.array([1,1,1,2,2,2])
model = SVC(kernel='linear', probability=True)#probability=False時,沒辦法調用 model.predict_proba()函數
model.fit(data,label)
C = [[-1,-1],[4,4]]
pre = model.predict_proba(C)
print(pre)
pre1 = model.predict(C)
print(pre1)
結果如下:
[[0.62507004 0.37492996]
[0.33332917 0.66667083]]
[1 2]
可以看到,預測(-1,-1)的標籤是1的概率爲0.62507004,2的概率爲0.37492996。最終預測爲類別1。
預測(4,4)的標籤是1的概率爲0.33332917,2的概率爲0.66667083。最終預測爲類別2。這個結果與我們在圖中直觀看到的結果相符。
官方文檔地址:sklearn.svm.SVC