07 hog特征&SVM支持向量机的定义

2019-07-30  本文已影响0人  犬夜叉写作业

SVM支持向量机的本质:是个分类器,使用任意多条直线进行分类(对于三维就是平面),寻求最优的分类平面


image.png

男生女生身高体重,训练,预测:


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,65]])     #男生数据

# 2 label   准备一个标签
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])

# 3 data  对数据进行处理
data = np.vstack((rand1,rand2))  #将rand1,rand2进行合并
data = np.array(data,dtype='float32')   #转换为数组

# svm 所有的数据都要有label,标签用于描述数据当前的属性
# [155,48] -- 0 女生 [152,53] ---1  男生
# 监督学习        0 负样本 1 正样本

# 4 训练和预测

svm = cv2.ml.SVM_create() # ml : 机器学习模块 ;SVM_create() 完当前SVM向量机的创建

# 设置SVM的各种属性
svm.setType(cv2.ml.SVM_C_SVC) # 设置svm 类型
svm.setKernel(cv2.ml.SVM_LINEAR) #设置为使用 线性(line)内核,因为使用的是线性分类器
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(par2)
image.png

需要注意的地方:
1、svm的本质:分类器
2、寻求一个最优的超平面,用超平面来完成分类
3、SVM的核:可以有多钟,上面用的是线性核
4、准备数据(训练样本):一定要包含正样本和负样本;正样本与负样本的个数不一定相同;准备样本的时候,一定要准备一个样本标签,标签能唯一描述当前的数据
5、这是一个监督学习的过程,用0跟1来监督他0表示女生,1表示男生
6、数据准备好之后就可以进行训练:先创建SVM;设置一下内核,并表面其属性;进行训练;进行预测
7、找相关书籍了解具体算法推到过程

上一篇下一篇

猜你喜欢

热点阅读