EM演算法原理解析

2021-09-24 10:50:31 字數 2559 閱讀 8994

em演算法,即最大期望演算法(expectation maximization algorithm,又譯期望最大化演算法),是一種迭代演算法,用於含有隱變數(latent variable)的概率引數模型的最大似然估計或極大後驗概率估計。

em演算法應用於高斯混合模型(gmm)、聚類、隱式馬爾科夫演算法(hmm)、基於概率的plsa模型等等。

問題一:

現在乙個班裡有50個男生,50個女生。我們假定男生的身高服從正態分佈

問題二:

但現在我們讓情況複雜一點,就是這50個男生和50個女生混在一起了。我們擁有100個人的身高資料,但是我們不知道抽取的那100個人裡面的每乙個人到底是從男生的那個身高分布裡面抽取的,還是女生的那個身高分布抽取的。 用數學的語言就是,抽取得到的每個樣本都不知道是從哪個分布抽取的。 這個時候,對於每乙個樣本,就有兩個東西需要猜測或者估計:

(1)這個人是男的還是女的?

(2)男生和女生對應的身高的高斯分布的引數是多少?

em演算法要解決的問題是:     (1)求出每乙個樣本屬於哪個分布

(2)求出每乙個分布對應的引數

1.初始化引數:先初始化男生身高的正態分佈的引數:如均值=1.7,方差=0.1

2.計算每乙個人更可能屬於男生分布或者女生分布;

3.通過分為男生的n個人來重新估計男生身高分布的引數(最大似然估計),女生分布也按照相同的方式估計出來,更新分布。

4.這時候兩個分布的概率也變了,然後重複步驟(1)至(3),直到引數不發生變化為止。

總結:其實em演算法就是先通過假設的引數把資料進行分類,然後通過分類的資料計算引數,接著對比計算的引數和假設的引數是否滿足精度,不滿足就返回去,滿足就結束。

原圖及效果圖:

opencv原始碼:

#include #include using namespace cv;

using namespace cv::ml;

using namespace std;

int main(int argc, char** ar**)

char* inputwintitle = "input image";

namedwindow(inputwintitle, cv_window_autosize);

imshow(inputwintitle, src);

// 初始化

int numcluster = 3;

const scalar colors = ;

int width = src.cols;

int height = src.rows;

int dims = src.channels();

int nsamples = width*height;

mat points(nsamples, dims, cv_64fc1);

mat labels;

mat result = mat::zeros(src.size(), cv_8uc3);

// 影象rgb畫素資料轉換為樣本資料

int index = 0;

for (int row = 0; row < height; row++)

} // em cluster train

ptrem_model = em::create();

em_model->setclustersnumber(numcluster);

em_model->setcovariancematrixtype(em::cov_mat_spherical);

em_model->settermcriteria(termcriteria(termcriteria::eps + termcriteria::count, 100, 0.1));

em_model->trainem(points, noarray(), labels, noarray());

// 對每個畫素標記顏色與顯示

mat sample(1, dims, cv_64fc1);//

double time = gettickcount();

int r = 0, g = 0, b = 0;

for (int row = 0; row < height; row++)

} printf("execution time(ms) : %.2f\n", (gettickcount() - time) / gettickfrequency() * 1000);

imshow("em-segmentation", result);

waitkey(0);

return 0;

}

EM演算法原理

在聚類中我們經常用到em演算法 i.e.estimation maximization 進行引數估計,在該演算法中我們通過函式的凹 凸性,在estimation和maximization兩步中迭代地進行引數估計,並保證可以演算法收斂,達到區域性最優解。ps 為了不在11.11這個吉祥的日子發blog...

EM演算法原理

在聚類中我們經常用到em演算法 i.e.expectation maximization 進行引數估計,在該演算法中我們通過函式的凹 凸性,在expectation 和maximization兩步中迭代地進行引數估計,並保證可以演算法收斂,達到區域性最優解。ps 為了不在11.11這個吉祥的日子發b...

EM演算法原理

在聚類中我們經常用到em演算法 i.e.expectation maximization 進行引數估計,在該演算法中我們通過函式的凹 凸性,在expectation 和maximization兩步中迭代地進行引數估計,並保證可以演算法收斂,達到區域性最優解。ps 為了不在11.11這個吉祥的日子發b...