導航:首頁 > 源碼編譯 > r語言實現em演算法

r語言實現em演算法

發布時間:2022-08-23 04:41:07

㈠ 怎麼利用r語言做em演算法估計混合雙參數指數分布的數值模擬

建議你先看一下這本書:
Modeling Survival Data Using Frailty Models

chap 2. Some Parametric Methods
2.1 Introction . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Exponential Distribution . . . . . . . . . . . . . . . . . . . 20
2.3 Weibull Distribution . . . . . . . . . . . . . . . . . . . . . 21
2.4 Extreme Value Distributions . . . . . . . . . . . . . . . . 23
2.5 Lognormal . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6 Gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7 Loglogistic . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.8 Maximum Likelihood Estimation . . . . . . . . . . . . . 30
2.9 Parametric Regression Models

chap 6. Estimation Methods for Shared Frailty Models
6.1 Introction . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.2 Inference for the Shared Frailty Model . . . . . . . . . . 106
6.3 The EM Algorithm . . . . . . . . . . . . . . . . . . . . . . . 108
6.4 The Gamma Frailty Model . . . . . . . . . . . . . . . . . . . 110
6.5 The Positive Stable Frailty Model . . . . . . . . . . . . . . 111
6.6 The Lognormal Frailty Model . . . . . . . . . . . . . . . . . 113
6.6.1 Application to Seizure Data . . . . . . . . . . . . . . . 113
6.7 Modified EM (MEM) Algorithm for Gamma Frailty Models 114
6.8 Application

然後用最基本的package "survival"
並參考你的模型可能用到的一些functions:
survreg(formula, data, weights, subset,na.action, dist="weibull",....)
survreg.distributions include "weibull", "exponential", "gaussian",
"logistic","lognormal" and "loglogistic"
frailty(x, distribution="gamma", ...)
distribution: either the gamma, gaussian or t distribution may be specified.
frailty.gamma(x, sparse = (nclass > 5), theta, df, eps = 1e-05,
method = c("em","aic", "df", "fixed"),...)

㈡ 運行MATLAB配置要求

處理器:intel i7 3770K或以上的四核。
內存:三通道DDR3 1600,三條4G的
操作系統:64位的win7或Vista(這樣12G內存可以全部調用,32位的系統最多隻能調用3.25G)
==如果要預算便宜1000塊,建議
AMD推土機FX-8150。動態加速到4.5G的8核,2013版的Matlab也算不死。
內存:雙通道DDR3 1866,4G兩條或8G兩條。
系統:64位
==intel的i7,不用買1866內存,因為內存控制器只支持到1600。推土機支持1866的。
推土機的功耗比i7大48W(一年開機365天,每天8小時,電費多50塊),發熱較大,因此建議買保一年的散片,1060。另買散熱器:超頻三 黃海S90F至尊版,95。 不買盒裝(1220)。盒裝的散熱器不好。

㈢ 機器學習需要什麼數學基礎

㈣ 基於混合高斯模型的EM演算法在MATLAB中實現後,為什麼輸出的極大似然函數值隨著聚類個數的增多而變大

應該是「過擬合」了吧。雖然在EM中沒有真正的「過擬合」一說,但是類別增多,每個數據點會以更高的概率分配到這些類別上。

㈤ em演算法是什麼

最大期望演算法(Expectation-Maximization algorithm, EM),或Dempster-Laird-Rubin演算法,是一類通過迭代進行極大似然估計(Maximum Likelihood Estimation, MLE)的優化演算法 ,通常作為牛頓迭代法(Newton-Raphson method)的替代用於對包含隱變數(latent variable)或缺失數據(incomplete-data)的概率模型進行參數估計。
EM演算法的標准計算框架由E步(Expectation-step)和M步(Maximization step)交替組成,演算法的收斂性可以確保迭代至少逼近局部極大值 。EM演算法是MM演算法(Minorize-Maximization algorithm)的特例之一,有多個改進版本,包括使用了貝葉斯推斷的EM演算法、EM梯度演算法、廣義EM演算法等 。
由於迭代規則容易實現並可以靈活考慮隱變數,EM演算法被廣泛應用於處理數據的缺測值 ,以及很多機器學習(machine learning)演算法,包括高斯混合模型(Gaussian Mixture Model, GMM) 和隱馬爾可夫模型(Hidden Markov Model, HMM) 的參數估計。

㈥ 如何系統地學習數據挖掘

看數據挖掘方面的演算法理論時經常感覺一些公式的推導過程如天書一般,例如看svm的數學證明,EM演算法..,感覺知識跳躍比較大,那麼數據挖掘系統的學習過程是怎麼樣?
磨刀不誤砍柴工。在學習數據挖掘之前應該明白幾點:
數據挖掘目前在中國的尚未流行開,猶如屠龍之技。
數據初期的准備通常占整個數據挖掘項目工作量的70%左右。
數據挖掘本身融合了統計學、資料庫和機器學習等學科,並不是新的技術。
數據挖掘技術更適合業務人員學習(相比技術人員學習業務來的更高效)
數據挖掘適用於傳統的BI(報表、OLAP等)無法支持的領域。
數據挖掘項目通常需要重復一些毫無技術含量的工作。
如果你閱讀了以上內容覺得可以接受,那麼繼續往下看。

學習一門技術要和行業靠攏,沒有行業背景的技術如空中樓閣。技術尤其是計算機領域的技術發展是寬泛且快速更替的(十年前做網頁設計都能成立公司),一般人沒有這個精力和時間全方位的掌握所有技術細節。但是技術在結合行業之後就能夠獨當一面了,一方面有利於抓住用戶痛點和剛性需求,另一方面能夠累計行業經驗,使用互聯網思維跨界讓你更容易取得成功。不要在學習技術時想要面面俱到,這樣會失去你的核心競爭力。

一、目前國內的數據挖掘人員工作領域大致可分為三類。
數據分析師:在擁有行業數據的電商、金融、電信、咨詢等行業里做業務咨詢,商務智能,出分析報告。
數據挖掘工程師:在多媒體、電商、搜索、社交等大數據相關行業里做機器學習演算法實現和分析。
科學研究方向:在高校、科研單位、企業研究院等高大上科研機構研究新演算法效率改進及未來應用。

二、說說各工作領域需要掌握的技能。
(1).數據分析師
需要有深厚的數理統計基礎,但是對程序開發能力不做要求。
需要熟練使用主流的數據挖掘(或統計分析)工具如Business Analytics and Business Intelligence Software(SAS)、SPSS、EXCEL等。
需要對與所在行業有關的一切核心數據有深入的理解,以及一定的數據敏感性培養。
經典圖書推薦:《概率論與數理統計》、《統計學》推薦David Freedman版、《業務建模與數據挖掘》、《數據挖掘導論》、《SAS編程與數據挖掘商業案例》、《Clementine數據挖掘方法及應用 》、《Excel 2007 VBA參考大全》、《IBM SPSS Statistics 19 Statistical Proceres Companion》等。
(2).數據挖掘工程師
需要理解主流機器學習演算法的原理和應用。
需要熟悉至少一門編程語言如(Python、C、C++、java、Delphi等)。
需要理解資料庫原理,能夠熟練操作至少一種資料庫(Mysql、SQL、DB2、Oracle等),能夠明白MapRece的原理操作以及熟練使用Hadoop系列工具更好。
經典圖書推薦:《數據挖掘概念與技術》、《機器學習實戰》、《人工智慧及其應用》、《資料庫系統概論》、《演算法導論》、《Web數據挖掘》、《 Python標准庫》、《thinking in Java》、《Thinking in C++》、《數據結構》等。
(3).科學研究方向
需要深入學習數據挖掘的理論基礎,包括關聯規則挖掘 (Apriori和FPTree)、分類演算法(C4.5、KNN、Logistic Regression、SVM等) 、聚類演算法 (Kmeans、Spectral Clustering)。目標可以先吃透數據挖掘10大演算法各自的使用情況和優缺點。
相對SAS、SPSS來說R語言更適合科研人員The R Project for Statistical Computing,因為R軟體是完全免費的,而且開放的社區環境提供多種附加工具包支持,更適合進行統計計算分析研究。雖然目前在國內流行度不高,但是強烈推薦。
可以嘗試改進一些主流演算法使其更加快速高效,例如實現Hadoop平台下的SVM雲演算法調用平台--web 工程調用hadoop集群。
需要廣而深的閱讀世界著名會議論文跟蹤熱點技術。如KDD,ICML,IJCAI,Association for the Advancement of Artificial Intelligence,ICDM 等等;還有數據挖掘相關領域期刊:ACM Transactions on Knowledge Discovery from Data,IEEE Transactions on Knowledge and Data Engineering,Journal of Machine Learning Research Homepage,IEEE Xplore: Pattern Analysis and Machine Intelligence, IEEE Transactions on等。
可以嘗試參加數據挖掘比賽培養全方面解決實際問題的能力。如Sig KDD ,Kaggle: Go from Big Data to Big Analytics等。
可以嘗試為一些開源項目貢獻自己的代碼,比如Apache Mahout: Scalable machine learning and data mining ,myrrix等(具體可以在SourceForge或GitHub.上發現更多好玩的項目)。
經典圖書推薦:《機器學習》 《模式分類》《統計學習理論的本質》《統計學習方法》《數據挖掘實用機器學習技術》《R語言實踐》,英文素質是科研人才必備的《Machine Learning: A Probabilistic Perspective》《Scaling up Machine Learning : Parallel and Distributed Approaches》《Data Mining Using SAS Enterprise Miner : A Case Study Approach》《Python for Data Analysis》等。

三、以下是通信行業數據挖掘工程師的工作感受。

真正從數據挖掘項目實踐的角度講,溝通能力對挖掘的興趣愛好是最重要的,有了愛好才可以願意鑽研,有了不錯的溝通能力,才可以正確理解業務問題,才能正確把業務問題轉化成挖掘問題,才可以在相關不同專業人才之間清楚表達你的意圖和想法,取得他們的理解和支持。所以我認為溝通能力和興趣愛好是個人的數據挖掘的核心競爭力,是很難學到的;而其他的相關專業知識誰都可以學,算不上個人發展的核心競爭力。

說到這里可能很多數據倉庫專家、程序員、統計師等等都要扔磚頭了,對不起,我沒有別的意思,你們的專業對於數據挖掘都很重要,大家本來就是一個整體的,但是作為單獨一個個體的人來說,精力有限,時間有限,不可能這些領域都能掌握,在這種情況下,選擇最重要的核心,我想應該是數據挖掘技能和相關業務能力吧(從另外的一個極端的例子,我們可以看, 比如一個迷你型的挖掘項目,一個懂得市場營銷和數據挖掘技能的人應該可以勝任。這其中他雖然不懂數據倉庫,但是簡單的Excel就足以勝任高打6萬個樣本的數據處理;他雖然不懂專業的展示展現技能,但是只要他自己看的懂就行了,這就無需什麼展示展現;前面說過,統計技能是應該掌握的,這對一個人的迷你項目很重要;他雖然不懂編程,但是專業挖掘工具和挖掘技能足夠讓他操練的;這樣在迷你項目中,一個懂得挖掘技能和市場營銷業務能力的人就可以圓滿完成了,甚至在一個數據源中根據業務需求可以無窮無盡的挖掘不同的項目思路,試問就是這個迷你項目,單純的一個數據倉庫專家、單純的一個程序員、單純的一個展示展現技師、甚至單純的一個挖掘技術專家,都是無法勝任的)。這從另一個方面也說明了為什麼溝通能力的重要,這些個完全不同的專業領域,想要有效有機地整合在一起進行數據挖掘項目實踐,你說沒有好的溝通能力行嗎?

數據挖掘能力只能在項目實踐的熔爐中提升、升華,所以跟著項目學挖掘是最有效的捷徑。國外學習挖掘的人都是一開始跟著老闆做項目,剛開始不懂不要緊,越不懂越知道應該學什麼,才能學得越快越有效果。我不知道國內的數據挖掘學生是怎樣學的,但是從網上的一些論壇看,很多都是紙上談兵,這樣很浪費時間,很沒有效率。

另外現在國內關於數據挖掘的概念都很混亂,很多BI只是局限在報表的展示和簡單的統計分析,卻也號稱是數據挖掘;另一方面,國內真正規模化實施數據挖掘的行業是屈指可數(銀行、保險公司、移動通訊),其他行業的應用就只能算是小規模的,比如很多大學都有些相關的挖掘課題、挖掘項目,但都比較分散,而且都是處於摸索階段,但是我相信數據挖掘在中國一定是好的前景,因為這是歷史發展的必然。

講到移動方面的實踐案例,如果你是來自移動的話,你一定知道國內有家叫華院分析的公司(申明,我跟這家公司沒有任何關系,我只是站在數據挖掘者的角度分析過中國大多數的號稱數據挖掘服務公司,覺得華院還不錯,比很多徒有虛名的大公司來得更實際),他們的業務現在已經覆蓋了絕大多數中國省級移動公司的分析挖掘項目,你上網搜索一下應該可以找到一些詳細的資料吧。我對華院分析印象最深的一點就是2002年這個公司白手起家,自己不懂不要緊,一邊自學一邊開始拓展客戶,到現在在中國的移動通訊市場全面開花,的確佩服佩服呀。他們最開始都是用EXCEL處理數據,用肉眼比較選擇比較不同的模型,你可以想像這其中的艱難吧。

至於移動通訊的具體的數據挖掘的應用,那太多了,比如不同話費套餐的制訂、客戶流失模型、不同服務交叉銷售模型、不同客戶對優惠的彈性分析、客戶群體細分模型、不同客戶生命周期模型、渠道選擇模型、惡意欺詐預警模型,太多了,記住,從客戶的需求出發,從實踐中的問題出發,移動中可以發現太多的挖掘項目。最後告訴你一個秘密,當你數據挖掘能力提升到一定程度時,你會發現無論什麼行業,其實數據挖掘的應用有大部分是重合的相似的,這樣你會覺得更輕松。

㈦ matlab實現EM演算法

1. EM演算法程序:
http://www.mathworks.com/matlabcentral/fileexchange/3713-em-algorithm-for-clustering-emfc-m

2. EM image segmentation:
http://www.mathworks.com/matlabcentral/fileexchange/10956-em-image-segmentation

3. 貝葉斯圖像分割程序:(Bayseian image segmentation)
沒有找到合適的程序代碼 :-(

㈧ R語言有沒有做CRF或者「命名實體識別」的包

基本上需要rule-based + ML-based 方法。
規則就要根據實際數據來設計了。如果有標注數據,那麼我想應該可以EM演算法學出一些對齊信息來(word alignment)。

㈨ 急求如何用MATLab實現EM演算法

最大期望演算法(Expectation Maximization Algorithm,又譯期望最大化演算法),是一種迭代演算法,用於含有隱變數(hidden variable)的概率參數模型的最大似然估計或極大後驗概率估計。
實現代碼如下:
02 Jul 2015 hui cheng
06 May 2015 Mei Dong
very good job!

12 Nov 2014 Jobaer
please, sir , send me a source code on image segmentation. I want to segement weeds from soil.My email address is [email protected] .

18 Jan 2014 HuangJunFeng HuangJunFeng
16 Dec 2013 widdy
19 Feb 2013 Tong Chu
01 Jan 2013 manas nag
sir
after executing this it is declaring that k is undefined

04 Dec 2012 Jason Rebello
Some people want to know how to view the segmented image. For example suppose you have two classes ie k=2; us the following code to view it
[row col] = size(ima);
final_img = zeros(row,col);
for i=1:row
for j=1:col
if mask(i,j)==1
final_img(i,j)=1;
else
final_img(i,j)=255;
end
end
end
imshow(final_img/255);
This is a naive way of viewing it .. you may have to change somethings if k>2. Anywayz hope it helps. The mask basically stores the segmented image.

16 Nov 2011 surya
great job.i am using the same algorithm in my project for x-ray images.can u please tell how to view the segmented image

Comment only

18 Feb 2010 prashanth
Sir, I am starting my project on the same subject. i was unable to find the algorithm psuedocode for em algorithm. kindly send me one at [email protected]. Also can u just tell me the explanation for the source code..

Comment only

21 Dec 2009 maria
Hi, could you please explain how I can use "mask" to see result of segmentation??

Comment only

17 Mar 2009 Patrick
Greetings Prof., Very nice .. could you please let me know what exactly does the mask variable store ? As what i see it classifies each pixel that falls within each class . Am i correct in that assumption?
Thanks

24 May 2008 darko brajicic
great job!

27 Apr 2008 Bilo Bilo
Thanks

15 Aug 2007 smiled fisher
06 Nov 2006 Karthik Raja T
HI, Greetings,can it for my color image segmentation ?

04 Sep 2006 Mikel Rodriguez
12 Jul 2006 carlos mas
03 May 2006 Mohamed Sami
look when u make a code u must show us the output to see it then u read ur code .. try to explain that with output we can see bye

㈩ 誰做過 EM演算法 java實現

參考:

packagenlp;
/**
*@authorOrisun
*date2011-10-22
*/
importjava.util.ArrayList;

publicclassBaumWelch{

intM;//隱藏狀態的種數
intN;//輸出活動的種數
double[]PI;//初始狀態概率矩陣
double[][]A;//狀態轉移矩陣
double[][]B;//混淆矩陣

ArrayList<Integer>observation=newArrayList<Integer>();//觀察到的集合
ArrayList<Integer>state=newArrayList<Integer>();//中間狀態集合
int[]out_seq={2,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,
1,1,1,2,2,2,1,1,1,1,1,2,1};//測試用的觀察序列
int[]hidden_seq={1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,
1,1,1,1,2,2,2,1,1,1,1,1,1,1};//測試用的隱藏狀態序列
intT=32;//序列長度為32

double[][]alpha=newdouble[T][];//向前變數
doublePO;
double[][]beta=newdouble[T][];//向後變數
double[][]gamma=newdouble[T][];
double[][][]xi=newdouble[T-1][][];

//初始化參數。Baum-Welch得到的是局部最優解,所以初始參數直接影響解的好壞
publicvoidinitParameters(){
M=2;
N=2;
PI=newdouble[M];
PI[0]=0.5;
PI[1]=0.5;
A=newdouble[M][];
B=newdouble[M][];
for(inti=0;i<M;i++){
A[i]=newdouble[M];
B[i]=newdouble[N];
}
A[0][0]=0.8125;
A[0][1]=0.1875;
A[1][0]=0.2;
A[1][1]=0.8;
B[0][0]=0.875;
B[0][1]=0.125;
B[1][0]=0.25;
B[1][1]=0.75;

observation.add(1);
observation.add(2);
state.add(1);
state.add(2);

for(intt=0;t<T;t++){
alpha[t]=newdouble[M];
beta[t]=newdouble[M];
gamma[t]=newdouble[M];
}
for(intt=0;t<T-1;t++){
xi[t]=newdouble[M][];
for(inti=0;i<M;i++)
xi[t][i]=newdouble[M];
}
}

//更新向前變數
publicvoipdateAlpha(){
for(inti=0;i<M;i++){
alpha[0][i]=PI[i]*B[i][observation.indexOf(out_seq[0])];
}
for(intt=1;t<T;t++){
for(inti=0;i<M;i++){
alpha[t][i]=0;
for(intj=0;j<M;j++){
alpha[t][i]+=alpha[t-1][j]*A[j][i];
}
alpha[t][i]*=B[i][observation.indexOf(out_seq[t])];
}
}
}

//更新觀察序列出現的概率,它在一些公式中當分母
publicvoipdatePO(){
for(inti=0;i<M;i++)
PO+=alpha[T-1][i];
}

//更新向後變數
publicvoipdateBeta(){
for(inti=0;i<M;i++){
beta[T-1][i]=1;
}
for(intt=T-2;t>=0;t--){
for(inti=0;i<M;i++){
for(intj=0;j<M;j++){
beta[t][i]+=A[i][j]
*B[j][observation.indexOf(out_seq[t+1])]
*beta[t+1][j];
}
}
}
}

//更新xi
publicvoipdateXi(){
for(intt=0;t<T-1;t++){
doublefrac=0.0;
for(inti=0;i<M;i++){
for(intj=0;j<M;j++){
frac+=alpha[t][i]*A[i][j]
*B[j][observation.indexOf(out_seq[t+1])]
*beta[t+1][j];
}
}
for(inti=0;i<M;i++){
for(intj=0;j<M;j++){
xi[t][i][j]=alpha[t][i]*A[i][j]
*B[j][observation.indexOf(out_seq[t+1])]
*beta[t+1][j]/frac;
}
}
}
}

//更新gamma
publicvoipdateGamma(){
for(intt=0;t<T-1;t++){
doublefrac=0.0;
for(inti=0;i<M;i++){
frac+=alpha[t][i]*beta[t][i];
}
//doublefrac=PO;
for(inti=0;i<M;i++){
gamma[t][i]=alpha[t][i]*beta[t][i]/frac;
}
//for(inti=0;i<M;i++){
//gamma[t][i]=0;
//for(intj=0;j<M;j++)
//gamma[t][i]+=xi[t][i][j];
//}
}
}

//更新狀態概率矩陣
publicvoipdatePI(){
for(inti=0;i<M;i++)
PI[i]=gamma[0][i];
}

//更新狀態轉移矩陣
publicvoipdateA(){
for(inti=0;i<M;i++){
doublefrac=0.0;
for(intt=0;t<T-1;t++){
frac+=gamma[t][i];
}
for(intj=0;j<M;j++){
doubledem=0.0;
//for(intt=0;t<T-1;t++){
//dem+=xi[t][i][j];
//for(intk=0;k<M;k++)
//frac+=xi[t][i][k];
//}
for(intt=0;t<T-1;t++){
dem+=xi[t][i][j];
}
A[i][j]=dem/frac;
}
}
}

//更新混淆矩陣
publicvoipdateB(){
for(inti=0;i<M;i++){
doublefrac=0.0;
for(intt=0;t<T;t++)
frac+=gamma[t][i];
for(intj=0;j<N;j++){
doubledem=0.0;
for(intt=0;t<T;t++){
if(out_seq[t]==observation.get(j))
dem+=gamma[t][i];
}
B[i][j]=dem/frac;
}
}
}

//運行Baum-Welch演算法
publicvoidrun(){
initParameters();
intiter=22;//迭代次數
while(iter-->0){
//E-Step
updateAlpha();
//updatePO();
updateBeta();
updateGamma();
updatePI();
updateXi();
//M-Step
updateA();
updateB();
}
}

publicstaticvoidmain(String[]args){
BaumWelchbw=newBaumWelch();
bw.run();
System.out.println("訓練後的初始狀態概率矩陣:");
for(inti=0;i<bw.M;i++)
System.out.print(bw.PI[i]+" ");
System.out.println();
System.out.println("訓練後的狀態轉移矩陣:");
for(inti=0;i<bw.M;i++){
for(intj=0;j<bw.M;j++){
System.out.print(bw.A[i][j]+" ");
}
System.out.println();
}
System.out.println("訓練後的混淆矩陣:");
for(inti=0;i<bw.M;i++){
for(intj=0;j<bw.N;j++){
System.out.print(bw.B[i][j]+" ");
}
System.out.println();
}
}
}
閱讀全文

與r語言實現em演算法相關的資料

熱點內容
php注冊框代碼 瀏覽:714
手機加密好還是不加好好 瀏覽:814
別克凱越壓縮機泵頭多錢 瀏覽:239
組管理命令 瀏覽:979
海南高德司機端是什麼app 瀏覽:861
pid命令 瀏覽:888
一天一圖學會python可視化 瀏覽:309
魔獸編輯文本命令串 瀏覽:497
android中view繪制 瀏覽:798
安卓機內存刪除怎麼恢復 瀏覽:331
Qt環境的編譯軟體放到linux 瀏覽:214
聯創列印系統怎麼連接伺服器 瀏覽:937
杭州行政命令 瀏覽:160
如何查找伺服器日誌 瀏覽:801
加密的鑰匙扣怎麼寫 瀏覽:579
文件夾更新不了怎麼辦 瀏覽:475
壓縮機指示燈亮是什麼原因 瀏覽:956
什麼app訂酒店半價 瀏覽:767
中老年解壓神器 瀏覽:243
訊飛語音ttsandroid 瀏覽:468