真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ldajava代碼 ldjam

我是這樣一步步理解--主題模型(Topic Model)、LDA(案例代碼)

LDA可以分為以下5個(gè)步驟:

創(chuàng)新互聯(lián)建站專注于邗江企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。邗江網(wǎng)站建設(shè)公司,為邗江等地區(qū)提供建站服務(wù)。全流程按需定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

關(guān)于LDA有兩種含義,一種是線性判別分析(Linear Discriminant Analysis),一種是概率主題模型: 隱含狄利克雷分布(Latent Dirichlet Allocation,簡(jiǎn)稱LDA) ,本文講后者。

按照wiki上的介紹,LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,是一種主題模型,它可以將文檔集 中每篇文檔的主題以概率分布的形式給出,從而通過分析一些文檔抽取出它們的主題(分布)出來后,便可以根據(jù)主題(分布)進(jìn)行主題聚類或文本分類。同時(shí),它是一種典型的詞袋模型,即一篇文檔是由一組詞構(gòu)成,詞與詞之間沒有先后順序的關(guān)系。此外,一篇文檔可以包含多個(gè)主題,文檔中每一個(gè)詞都由其中的一個(gè)主題生成。

人類是怎么生成文檔的呢?首先先列出幾個(gè)主題,然后以一定的概率選擇主題,以一定的概率選擇這個(gè)主題包含的詞匯,最終組合成一篇文章。如下圖所示(其中不同顏色的詞語(yǔ)分別對(duì)應(yīng)上圖中不同主題下的詞)。

那么LDA就是跟這個(gè)反過來: 根據(jù)給定的一篇文檔,反推其主題分布。

在LDA模型中,一篇文檔生成的方式如下:

其中,類似Beta分布是二項(xiàng)式分布的共軛先驗(yàn)概率分布,而狄利克雷分布(Dirichlet分布)是多項(xiàng)式分布的共軛先驗(yàn)概率分布。此外,LDA的圖模型結(jié)構(gòu)如下圖所示(類似貝葉斯網(wǎng)絡(luò)結(jié)構(gòu)):

先解釋一下以上出現(xiàn)的概念。

至此,我們可以看到二項(xiàng)分布和多項(xiàng)分布很相似,Beta分布和Dirichlet 分布很相似。

如果想要深究其原理可以參考: 通俗理解LDA主題模型 ,也可以先往下走,最后在回過頭來看詳細(xì)的公式,就更能明白了。

總之, 可以得到以下幾點(diǎn)信息。

在講LDA模型之前,再循序漸進(jìn)理解基礎(chǔ)模型:Unigram model、mixture of unigrams model,以及跟LDA最為接近的pLSA模型。為了方便描述,首先定義一些變量:

反過來,既然文檔已經(jīng)產(chǎn)生,那么如何根據(jù)已經(jīng)產(chǎn)生好的文檔反推其主題呢?這個(gè)利用看到的文檔推斷其隱藏的主題(分布)的過程(其實(shí)也就是產(chǎn)生文檔的逆過程),便是 主題建模的目的:自動(dòng)地發(fā)現(xiàn)文檔集中的主題(分布)。

文檔d和詞w是我們得到的樣本,可觀測(cè)得到,所以對(duì)于任意一篇文檔,其 是已知的。從而可以根據(jù)大量已知的文檔-詞項(xiàng)信息 ,訓(xùn)練出文檔-主題 和主題-詞項(xiàng) ,如下公式所示:

故得到文檔中每個(gè)詞的生成概率為:

由于 可事先計(jì)算求出,而 和 未知,所以 就是我們要估計(jì)的參數(shù)(值),通俗點(diǎn)說,就是要最大化這個(gè)θ。

用什么方法進(jìn)行估計(jì)呢,常用的參數(shù)估計(jì)方法有極大似然估計(jì)MLE、最大后驗(yàn)證估計(jì)MAP、貝葉斯估計(jì)等等。因?yàn)樵摯烙?jì)的參數(shù)中含有隱變量z,所以我們可以考慮EM算法。詳細(xì)的EM算法可以參考之前寫過的 EM算法 章節(jié)。

事實(shí)上,理解了pLSA模型,也就差不多快理解了LDA模型,因?yàn)長(zhǎng)DA就是在pLSA的基礎(chǔ)上加層貝葉斯框架,即LDA就是pLSA的貝葉斯版本(正因?yàn)長(zhǎng)DA被貝葉斯化了,所以才需要考慮歷史先驗(yàn)知識(shí),才加的兩個(gè)先驗(yàn)參數(shù))。

下面,咱們對(duì)比下本文開頭所述的LDA模型中一篇文檔生成的方式是怎樣的:

LDA中,選主題和選詞依然都是兩個(gè)隨機(jī)的過程,依然可能是先從主題分布{教育:0.5,經(jīng)濟(jì):0.3,交通:0.2}中抽取出主題:教育,然后再?gòu)脑撝黝}對(duì)應(yīng)的詞分布{大學(xué):0.5,老師:0.3,課程:0.2}中抽取出詞:大學(xué)。

那PLSA跟LDA的區(qū)別在于什么地方呢?區(qū)別就在于:

PLSA中,主題分布和詞分布是唯一確定的,能明確的指出主題分布可能就是{教育:0.5,經(jīng)濟(jì):0.3,交通:0.2},詞分布可能就是{大學(xué):0.5,老師:0.3,課程:0.2}。

但在LDA中,主題分布和詞分布不再唯一確定不變,即無法確切給出。例如主題分布可能是{教育:0.5,經(jīng)濟(jì):0.3,交通:0.2},也可能是{教育:0.6,經(jīng)濟(jì):0.2,交通:0.2},到底是哪個(gè)我們不再確定(即不知道),因?yàn)樗请S機(jī)的可變化的。但再怎么變化,也依然服從一定的分布, 即主題分布跟詞分布由Dirichlet先驗(yàn)隨機(jī)確定。正因?yàn)長(zhǎng)DA是PLSA的貝葉斯版本,所以主題分布跟詞分布本身由先驗(yàn)知識(shí)隨機(jī)給定。

換言之,LDA在pLSA的基礎(chǔ)上給這兩參數(shù) 加了兩個(gè)先驗(yàn)分布的參數(shù)(貝葉斯化):一個(gè)主題分布的先驗(yàn)分布Dirichlet分布 ,和一個(gè)詞語(yǔ)分布的先驗(yàn)分布Dirichlet分布 。

綜上,LDA真的只是pLSA的貝葉斯版本,文檔生成后,兩者都要根據(jù)文檔去推斷其主題分布和詞語(yǔ)分布(即兩者本質(zhì)都是為了估計(jì)給定文檔生成主題,給定主題生成詞語(yǔ)的概率),只是用的參數(shù)推斷方法不同,在pLSA中用極大似然估計(jì)的思想去推斷兩未知的固定參數(shù),而LDA則把這兩參數(shù)弄成隨機(jī)變量,且加入dirichlet先驗(yàn)。

所以,pLSA跟LDA的本質(zhì)區(qū)別就在于它們?nèi)ス烙?jì)未知參數(shù)所采用的思想不同,前者用的是頻率派思想,后者用的是貝葉斯派思想。

LDA參數(shù)估計(jì): Gibbs采樣 ,詳見文末的參考文獻(xiàn)。

推薦系統(tǒng)中的冷啟動(dòng)問題是指在沒有大量用戶數(shù)據(jù)的情況下如何給用戶進(jìn)行個(gè)性化推薦,目的是最優(yōu)化點(diǎn)擊率、轉(zhuǎn)化率或用戶 體驗(yàn)(用戶停留時(shí)間、留存率等)。冷啟動(dòng)問題一般分為用戶冷啟動(dòng)、物品冷啟動(dòng)和系統(tǒng)冷啟動(dòng)三大類。

解決冷啟動(dòng)問題的方法一般是基于內(nèi)容的推薦。以Hulu的場(chǎng)景為例,對(duì)于用 戶冷啟動(dòng)來說,我們希望根據(jù)用戶的注冊(cè)信息(如:年齡、性別、愛好等)、搜 索關(guān)鍵詞或者合法站外得到的其他信息(例如用戶使用Facebook賬號(hào)登錄,并得 到授權(quán),可以得到Facebook中的朋友關(guān)系和評(píng)論內(nèi)容)來推測(cè)用戶的興趣主題。 得到用戶的興趣主題之后,我們就可以找到與該用戶興趣主題相同的其他用戶, 通過他們的歷史行為來預(yù)測(cè)用戶感興趣的電影是什么。

同樣地,對(duì)于物品冷啟動(dòng)問題,我們也可以根據(jù)電影的導(dǎo)演、演員、類別、關(guān)鍵詞等信息推測(cè)該電影所屬于的主題,然后基于主題向量找到相似的電影,并將新電影推薦給以往喜歡看這 些相似電影的用戶。 可以使用主題模型(pLSA、LDA等)得到用戶和電影的主題。

以用戶為例,我們將每個(gè)用戶看作主題模型中的一篇文檔,用戶對(duì)應(yīng)的特征 作為文檔中的單詞,這樣每個(gè)用戶可以表示成一袋子特征的形式。通過主題模型 學(xué)習(xí)之后,經(jīng)常共同出現(xiàn)的特征將會(huì)對(duì)應(yīng)同一個(gè)主題,同時(shí)每個(gè)用戶也會(huì)相應(yīng)地 得到一個(gè)主題分布。每個(gè)電影的主題分布也可以用類似的方法得到。

那么如何解決系統(tǒng)冷啟動(dòng)問題呢? 首先可以得到每個(gè)用戶和電影對(duì)應(yīng)的主題向量,除此之外,還需要知道用戶主題和電影主題之間的偏好程度,也就是哪些主題的用戶可能喜歡哪些主題的電影。當(dāng)系統(tǒng)中沒有任何數(shù)據(jù)時(shí),我們需要一些先驗(yàn)知識(shí)來指定,并且由于主題的數(shù)目通常比較小,隨著系統(tǒng)的上線,收集到少量的數(shù)據(jù)之后我們就可以對(duì)主題之間的偏好程度得到一個(gè)比較準(zhǔn)確的估計(jì)。

通俗理解LDA主題模型

LDA模型應(yīng)用:一眼看穿希拉里的郵件

【 機(jī)器學(xué)習(xí)通俗易懂系列文章 】

java 的復(fù)制問題

輸入?syso?之后?alt?+?/?就會(huì)快速幫你補(bǔ)全!

復(fù)制一行的快捷鍵是?選中要被復(fù)制的行? ctrl?+?alt?+?上下?鍵

spark mllib lda主題模型一般迭代多少次

1.1 LDA實(shí)例

實(shí)例步驟:

1)加載數(shù)據(jù)

返回的數(shù)據(jù)格式為:documents: RDD[(Long, Vector)],其中:Long為文章ID,Vector為文章分詞后的詞向量;用戶可以讀取指定目錄下的數(shù)據(jù),通過分詞以及數(shù)據(jù)格式的轉(zhuǎn)換,轉(zhuǎn)換成RDD[(Long, Vector)]即可。

2)建立模型

模型參數(shù)設(shè)置說明:

k: 主題數(shù),或者聚類中心數(shù)

DocConcentration:文章分布的超參數(shù)(Dirichlet分布的參數(shù)),必需1.0

TopicConcentration:主題分布的超參數(shù)(Dirichlet分布的參數(shù)),必需1.0

MaxIterations:迭代次數(shù)

setSeed:隨機(jī)種子

CheckpointInterval:迭代計(jì)算時(shí)檢查點(diǎn)的間隔

Optimizer:優(yōu)化計(jì)算方法,目前支持"em", "online"

3)結(jié)果輸出

topicsMatrix以及topics(word,topic))輸出。

實(shí)例代碼如下:

[java] view plain copy

import org.apache.log4j.{ Level, Logger }

import org.apache.spark.{ SparkConf, SparkContext }

import org.apache.spark.mllib.clustering.LDA

import org.apache.spark.mllib.linalg.Vectors

object lda {

def main(args: Array[String]) {

//0 構(gòu)建Spark對(duì)象

val conf = new SparkConf().setAppName("lda")

val sc = new SparkContext(conf)

Logger.getRootLogger.setLevel(Level.WARN)

//1 加載數(shù)據(jù),返回的數(shù)據(jù)格式為:documents: RDD[(Long, Vector)]

// 其中:Long為文章ID,Vector為文章分詞后的詞向量

// 可以讀取指定目錄下的數(shù)據(jù),通過分詞以及數(shù)據(jù)格式的轉(zhuǎn)換,轉(zhuǎn)換成RDD[(Long, Vector)]即可

val data = sc.textFile("data/mllib/sample_lda_data.txt")

val parsedData = data.map(s = Vectors.dense(s.trim.split(' ').map(_.toDouble)))

// Index documents with unique IDs

val corpus = parsedData.zipWithIndex.map(_.swap).cache()

//2 建立模型,設(shè)置訓(xùn)練參數(shù),訓(xùn)練模型

/**

* k: 主題數(shù),或者聚類中心數(shù)

* DocConcentration:文章分布的超參數(shù)(Dirichlet分布的參數(shù)),必需1.0

* TopicConcentration:主題分布的超參數(shù)(Dirichlet分布的參數(shù)),必需1.0

* MaxIterations:迭代次數(shù)

* setSeed:隨機(jī)種子

* CheckpointInterval:迭代計(jì)算時(shí)檢查點(diǎn)的間隔

* Optimizer:優(yōu)化計(jì)算方法,目前支持"em", "online"

*/

val ldaModel = new LDA().

setK(3).

setDocConcentration(5).

setTopicConcentration(5).

setMaxIterations(20).

setSeed(0L).

setCheckpointInterval(10).

setOptimizer("em").

run(corpus)

//3 模型輸出,模型參數(shù)輸出,結(jié)果輸出

// Output topics. Each is a distribution over words (matching word count vectors)

println("Learned topics (as distributions over vocab of " + ldaModel.vocabSize + " words):")

val topics = ldaModel.topicsMatrix

for (topic - Range(0, 3)) {

print("Topic " + topic + ":")

for (word - Range(0, ldaModel.vocabSize)) { print(" " + topics(word, topic)); }

println()

}

}

}

java編寫一個(gè)應(yīng)用程序,接收用戶輸入的一行字符串,統(tǒng)計(jì)字符個(gè)數(shù)符串反序輸出

import?java.awt.event.ActionEvent;

import?java.awt.*;

import?java.awt.event.ActionListener;

import?java.util.ArrayList;

import?javax.swing.*;

import?javax.swing.JButton;

import?javax.swing.JPanel;

import?javax.swing.JTextField;

public?class?test??{

/**

*?@param?args

*/

public?static?void?main(String[]?args)?{

//?TODO?Auto-generated?method?stub

testJFrame?frame=new?testJFrame();

frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

class?testJFrame?extends?JFrame{

private?JTextField?text1;

private?JTextField?text2;

private?JTextField?text3;

private?JButton?button;

private?JPanel?panel;

private?static?final?int?WIDTH=300;

private?static?final?int?HEIGHT=300;

public?testJFrame(){

setTitle("test");

setSize(WIDTH,HEIGHT);

text1=new?JTextField(12);

text2=new?JTextField(12);

text3=new?JTextField(12);

button=new?JButton("確定");

button.addActionListener(new?ActionListener(){

@Override

public?void?actionPerformed(ActionEvent?arg0)?{

//?TODO?Auto-generated?method?stub

String?str=text1.getText();

text2.setText(""+str.length());

for(int?i=str.length()-1;i=0;i--){

text3.setText(text3.getText()+str.charAt(i));

}

}

});

panel=new?JPanel();

panel.add(text1);

panel.add(text2);

panel.add(text3);

panel.add(button);

add(panel);

}

}

因?yàn)閷懙谋容^趕,所以做的比較粗糙,不過你要的功能都有實(shí)現(xiàn)。

LDA在短文本分類方面的擴(kuò)展模型有哪些

針對(duì)短文本存在的稀疏問題,有一系列的算法被提出??梢源笾路譃槿?。第一類采用一種的簡(jiǎn)單的假設(shè)去學(xué)習(xí)隱含的主題,可以認(rèn)為是基于窗口的算法,一個(gè)窗口內(nèi)的詞具有同一主題或者共現(xiàn)的詞具有相同的主題,代表算法Dirichlet Multinomial Mixture (DMM) in conference KDD2014, Biterm Topic Model (BTM) in journal TKDE2016。第二類算法可以成為偽長(zhǎng)文檔算法,主要是把短文本聚合成偽長(zhǎng)文檔來增強(qiáng)詞的共現(xiàn)信息,代表算法有Pseudo-Document-Based Topic Model (PTM) in conference KDD2016, Self-Aggregation-Based Topic Model (SATM) in conference IJCAI2015。 第三類是通過外部語(yǔ)料(如詞嵌入)增強(qiáng)詞的語(yǔ)義信息,代表算法有Generalized P′olya Urn (GPU) based Dirichlet Multinomial Mixturemodel (GPU-DMM) in conference SIGIR2016, Generalized P′olya Urn (GPU) based Poisson-based Dirichlet Multinomial Mixturemodel (GPU-PDMM) in journal TIS2017 and Latent Feature Model with DMM (LF-DMM) in journal TACL2015.。

這些算法的源代碼都可以在這個(gè)基于JAVA的包里獲取到網(wǎng)頁(yè)鏈接。


分享名稱:ldajava代碼 ldjam
鏈接URL:http://weahome.cn/article/dosojii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部