91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-19
  • 語言: 其他
  • 標簽: C++??

資源簡介

根據論文寫的 有注釋

資源截圖

代碼片段和文件信息


//GMM源文件?

#include?
#include?
#include?“GMM.h“
#include?“KMeans.h“
using?namespace?std;

//double?M_PI=3.14159;

GMM::GMM(int?dimNum?int?mixNum)
{
m_dimNum?=?dimNum;
m_mixNum?=?mixNum;

m_maxIterNum?=?100;
m_endError?=?0.001;

Allocate();??????????????????

for?(int?i?=?0;?i? {
m_priors[i]?=?1.0?/?m_mixNum;???//初始化

for?(int?d?=?0;?d? {
m_means[i][d]?=?0;
m_vars[i][d]?=?1;
}
}
}

GMM::~GMM()
{
Dispose();
}

void?GMM::Allocate()
{???
//分配空間?
m_priors?=?new?double[m_mixNum];
m_means?=?new?double*[m_mixNum];
m_vars?=?new?double*[m_mixNum];

for?(int?i?=?0;?i? {
m_means[i]?=?new?double[m_dimNum];
m_vars[i]?=?new?double[m_dimNum];
}

m_minVars?=?new?double[m_dimNum];
}

void?GMM::Dispose()
{???
//釋放空間?
delete[]?m_priors;

for?(int?i?=?0;?i? {
delete[]?m_means[i];
delete[]?m_vars[i];
}
delete[]?m_means;
delete[]?m_vars;

delete[]?m_minVars;
}

void?GMM::Copy(GMM*?gmm)
{
assert(m_mixNum?==?gmm->m_mixNum?&&?m_dimNum?==?gmm->m_dimNum);
//賦值?
for?(int?i?=?0;?i? {
m_priors[i]?=?gmm->Prior(i);
memcpy(m_means[i]?gmm->Mean(i)?sizeof(double)?*?m_dimNum);
memcpy(m_vars[i]?gmm->Variance(i)?sizeof(double)?*?m_dimNum);
}
memcpy(m_minVars?gmm->m_minVars?sizeof(double)?*?m_dimNum);
}

double?GMM::GetProbability(const?double*?sample)
{
double?p?=?0;
for?(int?i?=?0;?i? {
p?+=?m_priors[i]?*?GetProbability(sample?i);??//在該高斯模型下面所有模型的和?權值*概率
}
return?p;
}

double?GMM::GetProbability(const?double*?x?int?j)
{
double?p?=?1;
for?(int?d?=?0;?d? {???
//使用單高斯概率計算公式???但是求出的是多個維度的乘積?
p?*=?1?/?sqrt(2?*?3.14159?*?m_vars[j][d]);
p?*=?exp(-0.5?*?(x[d]?-?m_means[j][d])?*?(x[d]?-?m_means[j][d])?/?m_vars[j][d]);
}
return?p;
}


void?GMM::Train(double?*data?int?N)
{????
//初始化??使用KMeans來初始化里面的數據
Init(dataN);

int?size?=?N;

//下面的參數參照KMeans??都是一次迭代之后分配空間??使用EM算法??具體見???http://www.cnblogs.com/mindpuzzle/tag/EM/
bool?loop?=?true;??
double?iterNum?=?0;
double?lastL?=?0;
double?currL?=?0;
int?unchanged?=?0;
double*?x?=?new?double[m_dimNum];
double*?next_priors?=?new?double[m_mixNum];
double**?next_vars?=?new?double*[m_mixNum];
double**?next_means?=?new?double*[m_mixNum];

for?(int?i?=?0;?i? {
next_means[i]?=?new?double[m_dimNum];
next_vars[i]?=?new?double[m_dimNum];
}

while?(loop)
{???
//初始化
memset(next_priors?0?sizeof(double)?*?m_mixNum);
for?(int?i?=?0;?i? {
memset(next_vars[i]?0?sizeof(double)?*?m_dimNum);
memset(next_means[i]?0?sizeof(double)?*?m_dimNum);
}

lastL?=?currL;
currL?=?0;

for?(int?k?=?0;?k? {
for(int?j=0;j x[j]=data[k*m_dimNum+j];?????????//獲取數據?
double?p?=?GetProbability(x);????????//計算概率

for?(int?j?=?0;?j? {
double?pj?=?GetProbability(x?j)?*?m_priors[j]?/?p;??//相當于計算x值在該高斯模型下面的概率?論文里面的rjk

next_priors[j]?+=?p

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????6425??2014-11-08?23:37??CODE\GMM.cpp

?????文件???????1761??2014-11-08?23:10??CODE\GMM.h

?????文件???????1708??2014-11-08?22:22??CODE\KmeanAndGmm.cpp

?????文件???????4306??2014-11-08?22:49??CODE\KMeans.cpp

?????文件???????1615??2014-11-08?22:35??CODE\KMeans.h

?????目錄??????????0??2014-11-08?23:38??CODE

-----------?---------??----------?-----??----

????????????????15815????????????????????6


評論

共有 條評論