計算機視覺基礎系列(python與opencv的操作與運用/tensorflow的基礎介紹)(二十二)---SVM支持向量機

SVM的本質是尋求一個最優的超平面進行分類,比較簡單的分類就是一個直線,很簡單,若是多維空間的話就是超平面了,運用的核是線性核。樣本準備一般是至少有正樣本和負樣本兩種情況,還要label標籤。運用機器學習模塊進行創建訓練,最後調用預測模塊進行預測。下面我們運用學生的身高核體重進行SVM的分類預測。

其中0代表女生,1代表男生。

# SVM的本質:尋求一個最優的超平面進行分類
# SVM核:線性核
# 身高體重,訓練,預測
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 1準備data
rand1 = np.array([[155, 48], [159, 50], [164, 53], [168, 56], [172, 60]])
rand2 = np.array([[152, 53], [156, 55], [160, 56], [172, 64], [176, 66]])
# 2 label標籤準備
label = np.array([[0], [0], [0], [0], [0], [1], [1], [1], [1], [1]])
# 3data處理
data = np.vstack((rand1, rand2))                 # 數據進行合併
data = np.array(data, dtype='float32')
# 所有的數據必須要有標籤
# [155,48]---0女生   [152, 53]----1 男生
# 監督學習:監督學習就是每訓練一次通過數據進行矯正
# 4 訓練
svm = cv2.ml.SVM_create()                        # ml 代表機器學習模塊,SVM_crete()創建
# 屬性設置
svm.setType(cv2.ml.SVM_C_SVC)                    # SVM的type
svm.setKernel(cv2.ml.SVM_LINEAR)                 # 線性分類器
svm.setC(0.01)
# 訓練
result = svm.train(data, cv2.ml.ROW_SAMPLE, label)         
# 預測
pt_data= np.vstack([[167, 55], [162, 57]])              # 0 女生  1 男生
pt_data = np.array(pt_data, dtype='float32')
print(pt_data)
(par1, par2) = svm.predict(pt_data)
print(par1, par2)

輸出的結果爲:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章