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