机器学习(18)-- SVM支持向量机(根据身高体重分类性别)
生活随笔
收集整理的這篇文章主要介紹了
机器学习(18)-- SVM支持向量机(根据身高体重分类性别)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
一、基礎理論
二、身高體重預測性別
1、獲取數據(男女生身高體重)
2、數據處理(合并數據)
3、設置標簽
4、創建分類器(支持向量機)
4-1、創建svm分類器
4-2、設置分類器屬性(線性核)
5、訓練
6、預測
總代碼
一、基礎理論
SVM本質:尋求一個最優的超平面進行分類。(分類器)
SVM核:支持很多核(這里主要使用線性核)
左圖分類比較簡單,一條線就可以分類;
但右圖一條線明顯無法完成分類,這時則需要多條線甚至曲線才能完成分類。
這里用的是監督學習,所以必須要有label標簽(即目標值)。
二、身高體重預測性別
1、獲取數據(男女生身高體重)
獲取男女生身高體重(訓練集、測試集)?
# 訓練集
girls_train = np.array([[155, 48], [159, 50], [165, 55], [158, 55], [170, 58]])
boys_train = np.array([[162, 56], [182, 68], [175, 62], [180, 72], [178, 66]])
# 測試集
girls_test = np.array([[152,46], [164,55]])
boys_test = np.array([[175,64], [182, 67]])
2、數據處理(合并數據)
# 2 合并數據(并轉浮點型,svm需要)
data = np.vstack((girls_train, boys_train))
data = np.array(data, dtype='float32')
print(data)
predict_data = np.vstack((girls_test, boys_test))
predict_data = np.array(predict_data, dtype='float32')
print(predict_data)
3、設置標簽
# 3 設置標簽(監督學習的目標值)(0:負樣本;1:正樣本)
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])
4、創建分類器(支持向量機)
4-1、創建svm分類器
# 4-1 創建svm分類器
svm = cv2.ml.SVM_create()
4-2、設置分類器屬性(線性核)
# 4-2 設置分類器屬性
svm.setType(cv2.ml.SVM_C_SVC) #svm 類型
svm.setKernel(cv2.ml.SVM_LINEAR) #設置內核:線性核(最關鍵)
svm.setC(0.01)
5、訓練
根據訓練集和目標集,進行監督學習。?
# 5 訓練
svm.train(data, cv2.ml.ROW_SAMPLE, label)
6、預測
# 6 預測
print(svm.predict(predict_data))
可以看到,結果預測成功,前面兩個是女的(0),最后2個是男的(1),達到了想要的效果。
?
總代碼
# SVM支持向量機(根據身高體重預測性別)
import cv2
import numpy as np# 1 獲取數據(男女生身高體重)
# 訓練集
girls_train = np.array([[155, 48], [159, 50], [165, 55], [158, 55], [170, 58]])
boys_train = np.array([[162, 56], [182, 68], [175, 62], [180, 72], [178, 66]])
# 測試集
girls_test = np.array([[152,46], [164,55]])
boys_test = np.array([[175,64], [182, 67]])# 2 合并數據(并轉浮點型,svm需要)
train_data = np.vstack((girls_train, boys_train))
train_data = np.array(train_data, dtype='float32')
print(train_data)
test_data = np.vstack((girls_test, boys_test))
test_data = np.array(test_data, dtype='float32')
print(test_data)# 3 設置標簽(監督學習的目標值)(0:負樣本;1:正樣本)
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])
# print(label)# 4 創建分類器(支持向量機)
# 4-1 創建svm分類器
svm = cv2.ml.SVM_create()# 4-2 設置分類器屬性
svm.setType(cv2.ml.SVM_C_SVC) #svm 類型
svm.setKernel(cv2.ml.SVM_LINEAR) #設置內核:線性核(最關鍵)
svm.setC(0.01)# 5 訓練
svm.train(train_data, cv2.ml.ROW_SAMPLE, label)
# 訓練集 標簽(目標集)# 6 預測
print(svm.predict(test_data))
總結
以上是生活随笔為你收集整理的机器学习(18)-- SVM支持向量机(根据身高体重分类性别)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派视觉小车 -- 小球追踪(颜色追踪
- 下一篇: 深度学习(7)卷积神经网络