⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmm.h

📁 简单明了的HMM-GMM-KEAMS调用接口
💻 H
字号:
/***************************************************************************

Module Name:

	Gaussian Mixture Model with Diagonal Covariance Matrix

History: 

	2003/11/01	Fei Wang

***************************************************************************/


#pragma once

#include <fstream>

class GMM
{
public:
	GMM(int dimNum = 1, int mixNum = 1);
	~GMM();

	void Copy(GMM* gmm);

	void SetMaxIterNum(int i)	{ m_maxIterNum = i; }
	void SetEndError(double f)	{ m_endError = f; }

	int GetDimNum()			{ return m_dimNum; }
	int GetMixNum()			{ return m_mixNum; }
	int GetMaxIterNum()		{ return m_maxIterNum; }
	double GetEndError()	{ return m_endError; }

	double& Prior(int i)	{ return m_priors[i]; }
	double* Mean(int i)		{ return m_means[i]; }
	double* Variance(int i)	{ return m_vars[i]; }

	void setPrior(int i,double val)	{  m_priors[i]=val; }
	void setMean(int i,double *val)		{ for(int j=0;j<m_dimNum;j++) m_means[i][j]=val[j]; }
	void setVariance(int i,double *val)	{for(int j=0;j<m_dimNum;j++) m_vars[i][j]=val[j]; }


	double GetProbability(const double* sample);

	/*	SampleFile: <size><dim><data>...
	*/
	void Train(const char* sampleFileName);
	void Init(double *data, int N);
	void Train(double *data, int N);


	void DumpSampleFile(const char* fileName);

	friend std::ostream& operator<<(std::ostream& out, GMM& gmm);
	friend std::istream& operator>>(std::istream& in, GMM& gmm);

private:
	int m_dimNum;		// Number of dimension in samples
	int m_mixNum;		// Number of mixture Gaussians
	double* m_priors;	// Prior probabilities of each Gaussian
	double** m_means;	// Means of each Gaussian
	double** m_vars;	// Variances of each Gaussian

	// A minimum variance is required. Now, it is the overall variance * 0.01.
	double* m_minVars;

	int m_maxIterNum;		// The stopping criterion regarding the number of iterations
	double m_endError;		// The stopping criterion regarding the error

private:
	// Return the "j"th pdf, p(x|j).
	double GetProbability(const double* x, int j);
	void Init(const char* sampleFileName);

	void Allocate();
	void Dispose();
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -