机器学习(18)-- SVM支持向量机(根据身高体重分类性别)

目录

一、基础理论

二、身高体重预测性别

1、获取数据(男女生身高体重)

2、数据处理(合并数据)

3、设置标签

4、创建分类器(支持向量机)

4-1、创建svm分类器

4-2、设置分类器属性(线性核)

5、训练

6、预测

总代码


一、基础理论

SVM本质:寻求一个最优的超平面进行分类。(分类器

SVM核:支持很多核(这里主要使用线性核)

左图分类比较简单,一条线就可以分类;

但右图一条线明显无法完成分类,这时则需要多条线甚至曲线才能完成分类。

这里用的是监督学习,所以必须要有label标签(即目标值)

二、身高体重预测性别

1、获取数据(男女生身高体重)

获取男女生身高体重(训练集、测试集) 

# 训练集
girls_train = np.array([[155, 48], [159, 50], [165, 55], [158, 55], [170, 58]])
boys_train = np.array([[162, 56], [182, 68], [175, 62], [180, 72], [178, 66]])
# 测试集
girls_test = np.array([[152,46], [164,55]])
boys_test = np.array([[175,64], [182, 67]])

2、数据处理(合并数据)

# 2 合并数据(并转浮点型,svm需要)
data = np.vstack((girls_train, boys_train))
data = np.array(data, dtype='float32')
print(data)
predict_data = np.vstack((girls_test, boys_test))
predict_data = np.array(predict_data, dtype='float32')
print(predict_data)

3、设置标签

# 3 设置标签(监督学习的目标值)(0:负样本;1:正样本)
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])

4、创建分类器(支持向量机)

4-1、创建svm分类器

# 4-1 创建svm分类器
svm = cv2.ml.SVM_create()

4-2、设置分类器属性(线性核)

# 4-2 设置分类器属性
svm.setType(cv2.ml.SVM_C_SVC)       #svm 类型
svm.setKernel(cv2.ml.SVM_LINEAR)    #设置内核:线性核(最关键)
svm.setC(0.01)

5、训练

根据训练集和目标集,进行监督学习。 

# 5 训练
svm.train(data, cv2.ml.ROW_SAMPLE, label)

6、预测

# 6 预测
print(svm.predict(predict_data))

可以看到,结果预测成功,前面两个是女的(0),最后2个是男的(1),达到了想要的效果。

 

总代码

# SVM支持向量机(根据身高体重预测性别)
import cv2
import numpy as np

# 1 获取数据(男女生身高体重)
# 训练集
girls_train = np.array([[155, 48], [159, 50], [165, 55], [158, 55], [170, 58]])
boys_train = np.array([[162, 56], [182, 68], [175, 62], [180, 72], [178, 66]])
# 测试集
girls_test = np.array([[152,46], [164,55]])
boys_test = np.array([[175,64], [182, 67]])

# 2 合并数据(并转浮点型,svm需要)
train_data = np.vstack((girls_train, boys_train))
train_data = np.array(train_data, dtype='float32')
print(train_data)
test_data = np.vstack((girls_test, boys_test))
test_data = np.array(test_data, dtype='float32')
print(test_data)

# 3 设置标签(监督学习的目标值)(0:负样本;1:正样本)
label = np.array([[0],[0],[0],[0],[0],[1],[1],[1],[1],[1]])
# print(label)

# 4 创建分类器(支持向量机)
# 4-1 创建svm分类器
svm = cv2.ml.SVM_create()

# 4-2 设置分类器属性
svm.setType(cv2.ml.SVM_C_SVC)       #svm 类型
svm.setKernel(cv2.ml.SVM_LINEAR)    #设置内核:线性核(最关键)
svm.setC(0.01)

# 5 训练
svm.train(train_data, cv2.ml.ROW_SAMPLE, label)
#         训练集                          标签(目标集)

# 6 预测
print(svm.predict(test_data))

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
使用Matlab实现CNN-SVM卷积支持向量机分类预测的步骤如下: 1. 数据准备:首先,需要准备训练和测试数据集。这些数据集应包含已标记的样本图像和对应的分类标签。 2. 卷积神经网络(CNN)训练:使用Matlab的深度学习工具箱,可以构建和训练卷积神经网络。首先,定义网络架构,包括卷积层、池化层、全连接层等,并设置相应的超参数(如学习率、批处理大小等)。然后,使用训练数据集对网络进行训练,通过反向传播算法优化网络权重。重复训练过程直到达到预设的准确率或迭代次数。 3. 特征提取:在训练完成后,使用训练好的CNN模型提取图像的特征表示。通过将图像输入到CNN中,获取卷积层或全连接层的输出作为特征向量。 4. 支持向量机SVM)训练:使用Matlab的SVM工具箱,将CNN提取的特征向量作为输入数据,对SVM进行训练。在训练过程中,选择合适的核函数(如线性核、高斯核等),并设置相应的超参数(如正则化参数、惩罚项等)。训练过程将优化支持向量机模型的权重和偏置。 5. 分类预测:使用训练好的CNN-SVM模型进行分类预测。首先,将测试样本输入到CNN中,提取特征向量。然后,将特征向量作为输入数据,通过训练好的SVM模型进行分类预测。根据SVM模型返回的分类结果,确定图像的类别。 综上所述,借助Matlab的深度学习和机器学习工具箱,可以实现CNN-SVM卷积支持向量机分类预测。通过训练卷积神经网络和支持向量机模型,提取图像特征并进行分类预测。这种组合方法可以充分利用卷积神经网络在图像识别任务中的优势,并借助支持向量机分类能力,提高分类预测的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值