Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv SVM不适用于缩放特征_C++_Opencv_Svm - Fatal编程技术网

C++ opencv SVM不适用于缩放特征

C++ opencv SVM不适用于缩放特征,c++,opencv,svm,C++,Opencv,Svm,我试图在OpenCV 2.4.9中使用SVM,但在实现特征缩放时遇到了问题。我正在运行支持向量机教程简介中的源代码: 当我复制粘贴代码并运行它时,它工作正常,显示如下: 然后,我尝试通过进行2次修改将特征标准化为[0,1]: 增加trainingDataMat/=512.f;在训练SVM之前,对训练数据进行归一化 将预测步骤修改为float response=SVM.predictsampleMat/512.f;从而使测试数据正常化 执行此操作后,它预测所有值都是同一类,生成以下图像: 我错过了

我试图在OpenCV 2.4.9中使用SVM,但在实现特征缩放时遇到了问题。我正在运行支持向量机教程简介中的源代码:

当我复制粘贴代码并运行它时,它工作正常,显示如下:

然后,我尝试通过进行2次修改将特征标准化为[0,1]:

增加trainingDataMat/=512.f;在训练SVM之前,对训练数据进行归一化

将预测步骤修改为float response=SVM.predictsampleMat/512.f;从而使测试数据正常化

执行此操作后,它预测所有值都是同一类,生成以下图像:


我错过了什么?在实现功能规范化方面是否还有一些我不知道的额外步骤?

我找到了一种产生所需行为的解决方法,但我必须承认,我不确定它为什么有效

在上述两个试验中,正则化参数C均未指定,因此默认为1。但是,如果我在缩放版本中添加一行,将其指定为512,即缩放步骤中分割特征的值,则SVM工作正常


我不明白的是,为什么正则化项太小会导致训练数据的错误分类,因为在这种情况下,训练点是线性可分离的。我的理解是,线性可分离训练数据的错误分类通常是C太大的结果。

你的所有列/特征是否都从0到512?告诉你,不只是这个问题,OpenCV的SVM不好。而且,特征通常不是这样归一化的。尽管如此,我不认为一个常数的简单缩放对分类有什么影响。您是否对预测响应进行了数字检查?@carlosdc此代码生成4个具有2个特征和2个类的训练数据点,训练线性支持向量机,然后预测512x512网格上每个点的类,生成上面的图像,训练点标记为圆。特性本身是从0到511的浮点值。@a-Jays我最初将特性缩放为[-1 1],但在提出问题之前,我将其简化为上述方案,以便我的代码尽可能与原始代码相似。关于检查响应,除了代码运行以生成发布的图像的参数扫描之外,我还检查了调试模式下的响应。他们匹配了图形输出。有没有另外一种方法来检查你心目中的回答?