有哪些免费的做网站平台,公关公司排行,在线生成,境外电商哪个平台好目录
一、环境
二、SVM原理
三、完整代码 一、环境
本文使用环境为#xff1a;
Windows10Python 3.9.17opencv-python 4.8.0.74
二、SVM原理
OpenCV中的向量机#xff08;SVM#xff09;是一种监督学习算法#xff0c;用于分类和回归分析。它通过找到一个最优的超平…目录
一、环境
二、SVM原理
三、完整代码 一、环境
本文使用环境为
Windows10Python 3.9.17opencv-python 4.8.0.74
二、SVM原理
OpenCV中的向量机SVM是一种监督学习算法用于分类和回归分析。它通过找到一个最优的超平面来将不同类别的数据分开并使用支持向量来确定这个超平面的位置和方向。
SVM的基本思想是找到一个最优的超平面使得两个类别之间的间隔最大化。这个间隔被称为“最大间隔”而支持向量则是位于间隔边缘上的样本点。这些支持向量决定了最优超平面的位置和方向因此它们也被称为“支持向量机”。
在OpenCV中SVM可以用于二分类、多分类和回归分析。对于二分类问题SVM会找到一个最优的超平面将正类和负类分开。对于多分类问题SVM会使用“一对一”或“一对多”策略来处理多个类别。对于回归分析问题SVM会找到一个最优的超平面将输入数据映射到一个连续的输出值上。
SVM的核心是核函数它用于将输入数据映射到一个高维空间中。在高维空间中数据更容易被分离因为不同类别之间的距离更大。常用的核函数包括线性核、多项式核、径向基函数核RBF和sigmoid核等。不同的核函数适用于不同类型的数据选择合适的核函数可以提高SVM的性能。
线性核是最简单的核函数它将输入数据直接映射到高维空间中。如果数据的维度很高那么线性核的效果可能不太好。多项式核可以将输入数据映射到一个更高维的空间中但是它需要更多的计算资源。径向基函数核RBF是一种非常强大的核函数它可以将输入数据映射到一个无限维的空间中。但是RBF需要调整一个参数C来控制间隔的大小这可能会影响模型的性能。sigmoid核可以将输入数据映射到一个概率空间中它通常用于二分类问题。
总之OpenCV中的向量机是一种强大的监督学习算法可以用于分类和回归分析。它的核心是核函数不同的核函数适用于不同类型的数据。选择合适的核函数可以提高SVM的性能从而更好地解决实际问题。
三、完整代码
以下代码是在二维坐标系上随便设置4个点第一个点类别是1剩余三个点类别是-1。向量机作用就是找到一个2维决策面线将上述两类点划分开。
import cv2 as cv
import numpy as np# 设置训练数据二分类
labels np.array([1, -1, -1, -1])
trainingData np.matrix([[501, 10], [255, 10], [501, 255], [10, 501]], dtypenp.float32)# 训练SVM
# 初始化
svm cv.ml.SVM_create()
svm.setType(cv.ml.SVM_C_SVC)
svm.setKernel(cv.ml.SVM_LINEAR)
svm.setTermCriteria((cv.TERM_CRITERIA_MAX_ITER, 100, 1e-6))
# 开始训练
svm.train(trainingData, cv.ml.ROW_SAMPLE, labels)
# 用于数据可视化
width 512
height 512
image np.zeros((height, width, 3), dtypenp.uint8)# 显示不同类别区域
green (0,255,0)
blue (255,0,0)
for i in range(image.shape[0]):for j in range(image.shape[1]):sampleMat np.matrix([[j,i]], dtypenp.float32)response svm.predict(sampleMat)[1]if response 1:image[i,j] greenelif response -1:image[i,j] blue
# 显示训练数据
thickness -1
cv.circle(image, (501, 10), 5, ( 0, 0, 0), thickness)
cv.circle(image, (255, 10), 5, (255, 255, 255), thickness)
cv.circle(image, (501, 255), 5, (255, 255, 255), thickness)
cv.circle(image, ( 10, 501), 5, (255, 255, 255), thickness)# 显示支撑向量决策边界
thickness 2
sv svm.getUncompressedSupportVectors()for i in range(sv.shape[0]):cv.circle(image, (int(sv[i,0]), int(sv[i,1])), 6, (128, 128, 128), thickness)
cv.imwrite(result.png, image) # save the image
cv.imshow(SVM Simple Example, image) # show it to the user
cv.waitKey()