SVM的使用trainAuto(),K折交叉验证优化参数

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解读)

 

posted @ 2020-03-06 11:19  夕西行  阅读(1641)  评论(0编辑  收藏  举报