trainAuto()函数中,使用了K折交叉验证来优化参数,会自动寻找最优参数。
两种用法:标黄的等效
virtual bool trainAuto( const Ptr<TrainData>& data, 
int kFold = 10,
ParamGrid Cgrid = getDefaultGrid(C),
ParamGrid gammaGrid = getDefaultGrid(GAMMA),
ParamGrid pGrid = getDefaultGrid(P),
ParamGrid nuGrid = getDefaultGrid(NU),
ParamGrid coeffGrid = getDefaultGrid(COEF),
ParamGrid degreeGrid = getDefaultGrid(DEGREE),
bool balanced=false) = 0;
bool trainAuto(InputArray samples,int layout,InputArray responses,
            int kFold = 10,
            Ptr<ParamGrid> Cgrid = SVM::getDefaultGridPtr(SVM::C),
            Ptr<ParamGrid> gammaGrid  = SVM::getDefaultGridPtr(SVM::GAMMA),
            Ptr<ParamGrid> pGrid      = SVM::getDefaultGridPtr(SVM::P),
            Ptr<ParamGrid> nuGrid     = SVM::getDefaultGridPtr(SVM::NU),
            Ptr<ParamGrid> coeffGrid  = SVM::getDefaultGridPtr(SVM::COEF),
            Ptr<ParamGrid> degreeGrid = SVM::getDefaultGridPtr(SVM::DEGREE),
            bool balanced=false);
第一种使用方式:
Ptr<TrainData> train_data= TrainData::create(InputArray samples, int layout, InputArray responses); //创建训练集
svm->trainAuto(train_data); //参数默认
第二种使用方式:
svm->trainAuto(InputArray samples, int layout, InputArray responses);//直接用
例如
svm->trainAuto(train_data,ROW_SAMPLE,labels);
注意:无论哪种方式,samples必须行为样本,列为特征。responses标签1行或1列都可以,但是必须与样本类别对应。
responses标签的创建,可以参考我的博客,int数组创建SVM的使用train() ,int容器创建HOG+SVM,4个级别(图、window、block、cell),push_back深拷贝浅拷贝,求余的妙用(OpenCV案例源码train_HOG.cpp解读)
原文:https://www.cnblogs.com/xixixing/p/12425518.html