Python-opencv SVM实现简单的监督学习

17 篇文章 1 订阅
15 篇文章 1 订阅

SVM的本质是分类机 主要是通过寻求一个最优的超平面来解决分类的问题
使用的步骤有

  1. 数据的准备 也叫训练样本(正样本)和(负样本) 一定要标签。因为正是因为有了标签才叫监督学习。
  2. SCM_create() 的创建
  3. 设置svm的type 和 核的类型
  4. 训练
  5. 预测

这是一个通过身高和体重来预测是男生还是女生的监督学习过程

import cv2
import numpy as np
import matplotlib.pyplot as plt

# data rand1 woman rand2 man
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]])
#lable
lable = np.array([[0],[0],[0],[0],[0],
                  [1],[1],[1],[1],[1]])
#data
data = np.vstack((rand1,rand2)) #合并到一起
data = np.array(data,dtype='float32')

#svm 最基本的要求:所有的数据都要有label<标签>
#[155,48] ->[0] 女生 [152,53] -> [1] 男生
#有标签的训练,叫做监督学习
#监督学习:在每一次训练结束后告诉对还是错
# 0 负样本 1 正样本(数据)

#训练
svm = cv2.ml.SVM_create()
# ml 机器学习模块 SCM_create() 创建
svm.setType(cv2.ml.SVM_C_SVC) # svm type
svm.setKernel(cv2.ml.SVM_LINEAR) # line #线性分类器
svm.setC(0.01)
# 进行训练
result= svm.train(data,cv2.ml.ROW_SAMPLE,lable)
# 预测
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("________________")
print(par1,par2)
# 1 思想 分类器 解决分类问题
# 2 如何? 寻求一个最优的超平面 分类
# 3 核 : line 核
# 4 数据的准备 (训练样本) 正样本 负样本 数量可以不一样,一定要标签
# 5 训练 SVM_create train predict

运行效果
可以看见预测的结果和设置的是相对应的

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值