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、找相关书籍了解具体算法推到过程
网友评论