Opencv 将猪喂入SVM:猪有9个箱子,但SVM采用1D矩阵

Opencv 将猪喂入SVM:猪有9个箱子,但SVM采用1D矩阵,opencv,machine-learning,svm,Opencv,Machine Learning,Svm,在OpenCV中,有一个CvSVM类,它接受样本矩阵来训练SVM。矩阵是二维的,样本在行中 我创建了自己的方法,从视频提要生成定向梯度直方图(HOG)。为此,我创建了一个9通道矩阵来存储HOG,其中每个通道对应一个方向箱。最后我得到了一个40x30的矩阵,类型是CV_32FC(9) 还为猪做了一个可视化,它正在工作 我不知道该如何将这个矩阵输入到OpenCV SVM中,因为如果我将其展平,我不知道SVM应该如何从1D输入数据中学习9D超平面。SVM总是在每个特征向量中获取一行数据。因此,特征向量

在OpenCV中,有一个CvSVM类,它接受样本矩阵来训练SVM。矩阵是二维的,样本在行中

我创建了自己的方法,从视频提要生成定向梯度直方图(HOG)。为此,我创建了一个9通道矩阵来存储HOG,其中每个通道对应一个方向箱。最后我得到了一个40x30的矩阵,类型是
CV_32FC(9)

还为猪做了一个可视化,它正在工作


我不知道该如何将这个矩阵输入到OpenCV SVM中,因为如果我将其展平,我不知道SVM应该如何从1D输入数据中学习9D超平面。

SVM总是在每个特征向量中获取一行数据。因此,特征向量的维数就是行的长度。如果处理的是二维数据,则每个特征向量有2项。此网页上有2D数据示例:

OpenCV中等效演示程序的代码

关键是,即使你认为直方图是二维的,有9个单元,特征向量实际上是这个的扁平版本。所以把它展平成一个长的特征向量是正确的。对我来说,结果是一个长度为2304(16x16x9)的特征向量,我在一个小测试集上获得了100%的预测准确率(即,它可能略低于100%,但工作异常良好)

这种方法之所以有效,是因为支持向量机处理的是特征向量每项的权重系统。所以它与问题的维数无关,超平面总是和特征向量在同一个维数。另一种方法是忽略超平面,将其视为特征向量中每个项目的一组权重。在这种情况下,它需要为每个项目设置一个权重,然后将每个项目乘以其权重并输出结果