學習機器學習的時候,基本都是在用Matlab、Python寫算法,做測試;
由於最近要用OpenCV寫作業,興起看了看OpenCV的機器學習模塊(The Machine Learning Library——MLL)。
來看看MLL的主要構成:Statistical Model是個基類,下面的K-NN、SVM等都是其子類。
不太喜歡這個Statistical定語,Statistics在ML界橫行的好多年,感覺溫度已經降下來了。
來看下Statistical Model:
class CV_EXPORTS_W CvStatModel
{
public:
CvStatModel();
virtual ~CvStatModel();
virtual void clear();
CV_WRAP virtual void save( const char* filename, const char* name=0 ) const;
CV_WRAP virtual void load( const char* filename, const char* name=0 );
virtual void write( CvFileStorage* storage, const char* name ) const;
virtual void read( CvFileStorage* storage, CvFileNode* node );
virtual bool train(const Mat& train_data, const Mat& responses, Mat(), Mat(), CVParms params );
virtual float predict(const Mat& sample, ...);
protected:
const char* default_model_name;
};
void CvStatModel::clear() 清除內存重置模型狀態;
void CvStatModel::save() /load() 保存/加載文件和模型;
void CvStatModel:read() /write() 讀寫文件和模型;
bool CvStatModel::train() 訓練模型;
float CvStatModel::predict() 預測樣本結果;
那麼樸素貝葉斯、K-近鄰、支持向量機、決策樹等類都是繼承CVStatModel;
使用這些方法的基本框架就是:
Method.train(train_data, responses, Mat(), Mat(), params);
Method.predict(sampleMat);