一、SVM支持向量机
什么是SVM支持向量机? SVM支持向量机本质仍是一个分类器,其核心为寻求一个最优超平面最终实现分类,实现分类问题 在寻求超平面的时候有多种方式,可以使用若干条直线或曲线进行分类,这里使用的是直线,即SVM核为线性核 SVM支持许多核,这里使用的是线性核 数据准备,即准备训练样本,需要有正负样本两种情况,正样本和负样本的个数不一定相同;在准备样本的时候一定要准备label标签,这个label标签唯一描述当前训练的数据,正是因为有了label标签才使得其是一个监督学习的过程;监督学习:在学习一个数据的时候进行监督其对与错,即判断其是0还是1 训练:创建SVM并且设置其属性 通过train方法完成训练 训练完成后调用predict方法进行预测
实现案例:通过两组男生和女生的一些身高和体重的信息,进行训练,最后对指定身高和体重的人进行判别其性别。男生为1,女生为0。
import cv2
import numpy as np
import matplotlib.pyplot as plt
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 = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])
data = np.vstack((rand1,rand2))
data = np.array(data,dtype='float32')
svm = cv2.ml.SVM_create()
svm.setType(cv2.ml.SVM_C_SVC)
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]])
pt_data = np.array(pt_data,dtype='float32')
print(pt_data)
(par1,par2) = svm.predict(pt_data)
print(par1)
print(par2)
效果图如下:
二、Hog特征
|