# 寻求一个最优的超平面
# svm 核: line
# 通过训练身高和体重,预测性别
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 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, 65]])
# label
label = np.array([[0], [0] ,[0] ,[0] ,[0], [1] ,[1] ,[1] ,[1], [1]])
# prepare data
# 拼接数据
data = np.vstack((rand1, rand2))
data = np.array(data, dtype = 'float32')
# 创建svm
svm = cv2.ml.SVM_create()
# 属性设置
svm.setType(cv2.ml.SVM_C_SVC)
svm.setKernel(cv2.ml.SVM_LINEAR)
svm.setC(0.01)
# train
result = svm.train(data, cv2.ml.ROW_SAMPLE, label)
# predict
pt_data = np.vstack([[167, 55], [162, 57]])
pt_data = np.array(pt_data, dtype = 'float32')
print('pt_data: ', pt_data)
(par1, par2) = svm.predict(pt_data)
# 预测值分别为0(女),1(男)
print('par1: ', par1)
print('par2: ', par2)
性别预测结果如下图中par2所示:
![](https://img.haomeiwen.com/i4479796/c96adffbadee92fd.png)
网友评论