学习机器学习的时候,基本都是在用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);