0
在this后,你可以找到一个非常好的教程,介绍如何将SVM分类器应用到MNIST数据集。我想知道是否可以使用逻辑回归而不是SVM分类器。所以我搜索了openCV中的Logistic回归,并且我发现两个分类器的语法几乎完全相同。所以我猜我可能只是注释掉以下部分:MNIST数据集上的逻辑回归
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
svm->setType(cv::ml::SVM::C_SVC);
svm->setKernel(cv::ml::SVM::POLY);//LINEAR, RBF, SIGMOID, POLY
svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6));
svm->setGamma(3);
svm->setDegree(3);
svm->train(trainingMat , cv::ml::ROW_SAMPLE , labelsMat);
,取而代之的是:
cv::Ptr<cv::ml::LogisticRegression> lr1 = cv::ml::LogisticRegression::create();
lr1->setLearningRate(0.001);
lr1->setIterations(10);
lr1->setRegularization(cv::ml::LogisticRegression::REG_L2);
lr1->setTrainMethod(cv::ml::LogisticRegression::BATCH);
lr1->setMiniBatchSize(1);
lr1->train(trainingMat, cv::ml::ROW_SAMPLE, labelsMat);
但首先,我得到这个错误: OpenCV的错误:错误的参数(数据和标签必须是浮点矩阵)
然后,我改变
cv::Mat labelsMat(labels.size(), 1, CV_32S, labelsArray);
:
cv::Mat labelsMat(labels.size(), 1, CV_32F, labelsArray);
现在我得到这个错误:OpenCV的错误:错误的参数(数据应该有ATLEAST两班)
我有10个班(0,1,...,9),但我不知道为什么我得到这个错误。我的代码与上述教程中的代码几乎完全相同。
可能的分类之一,你'将'labelsArray'中的整数值解释为浮点数。尝试这种方式,让我知道:'cv :: Mat labelsMat(labels.size(),1,CV_32S,labelsArray); labelsMat.convertTo(labelsMat,CV_32F);'(数据相同) – Miki
@miki这很好用。谢谢 – MoNo