1. 程式人生 > >2017.06.22:LDA與困惑度程式碼

2017.06.22:LDA與困惑度程式碼

LDA程式碼:

class LDAModel(object):
	def __init__(self, dpre):

		self.dpre = dpre  # 獲取預處理引數

		#
		# 模型引數
		# 聚類個數K,迭代次數iter_times,每個類特徵詞個數top_words_num,超引數α(alpha) β(beta)
		#
		self.K = K
		self.beta = beta
		self.alpha = alpha
		self.iter_times = iter_times
		self.top_words_num = top_words_num
		#
		# 檔案變數
		# 分好詞的檔案trainfile
		# 詞對應id檔案wordidmapfile
		# 文章-主題分佈檔案thetafile
		# 詞-主題分佈檔案phifile
		# 每個主題topN詞檔案topNfile
		# 最後分派結果檔案tassginfile
		# 模型訓練選擇的引數檔案paramfile
		#
		self.wordidmapfile = wordidmapfile
		self.trainfile = trainfile
		self.thetafile = thetafile
		self.phifile = phifile
		self.topNfile = topNfile
		self.tassginfile = tassginfile
		self.paramfile = paramfile
		# p,概率向量 double型別,儲存取樣的臨時變數
		# nw,詞word在主題topic上的分佈
		# nwsum,每各topic的詞的總數
		# nd,每個doc中各個topic的詞的總數
		# ndsum,每各doc中詞的總數
		self.p = np.zeros(self.K)
		self.nw = np.zeros((self.dpre.words_count, self.K), dtype="int")
		self.nwsum = np.zeros(self.K, dtype="int")
		self.nd = np.zeros((self.dpre.docs_count, self.K), dtype="int")
		self.ndsum = np.zeros(dpre.docs_count, dtype="int")
		self.Z = np.array(
			[[0 for y in xrange(dpre.docs[x].length)] for x in xrange(dpre.docs_count)])  # M*doc.size(),文件中詞的主題分佈

		# 隨機先分配型別
		for x in xrange(len(self.Z)):
			self.ndsum[x] = self.dpre.docs[x].length
			for y in xrange(self.dpre.docs[x].length):
				topic = random.randint(0, self.K - 1)
				self.Z[x][y] = topic
				self.nw[self.dpre.docs[x].words[y]][topic] += 1
				self.nd[x][topic] += 1
				self.nwsum[topic] += 1

		self.theta = np.array([[0.0 for y in xrange(self.K)] for x in xrange(self.dpre.docs_count)])
		self.phi = np.array([[0.0 for y in xrange(self.dpre.words_count)] for x in xrange(self.K)])

	def sampling(self, i, j):

		topic = self.Z[i][j]
		word = self.dpre.docs[i].words[j]
		self.nw[word][topic] -= 1
		self.nd[i][topic] -= 1
		self.nwsum[topic] -= 1
		self.ndsum[i] -= 1

		Vbeta = self.dpre.words_count * self.beta
		Kalpha = self.K * self.alpha
		self.p = (self.nw[word] + self.beta) / (self.nwsum + Vbeta) * \
				 (self.nd[i] + self.alpha) / (self.ndsum[i] + Kalpha)
		for k in xrange(1, self.K):
			self.p[k] += self.p[k - 1]

		u = random.uniform(0, self.p[self.K - 1])
		for topic in xrange(self.K):
			if self.p[topic] > u:
				break

		self.nw[word][topic] += 1
		self.nwsum[topic] += 1
		self.nd[i][topic] += 1
		self.ndsum[i] += 1

		return topic

	def est(self):
		# Consolelogger.info(u"迭代次數為%s 次" % self.iter_times)
		for x in xrange(self.iter_times):
			for i in xrange(self.dpre.docs_count):
				for j in xrange(self.dpre.docs[i].length):
					topic = self.sampling(i, j)
					self.Z[i][j] = topic
		logger.info(u"迭代完成。")
		logger.debug(u"計算文章-主題分佈")
		self._theta()
		logger.debug(u"計算詞-主題分佈")
		self._phi()
		logger.debug(u"儲存模型")
		self.save()

	def _theta(self):
		for i in xrange(self.dpre.docs_count):
			self.theta[i] = (self.nd[i] + self.alpha) / (self.ndsum[i] + self.K * self.alpha)

	def _phi(self):
		for i in xrange(self.K):
			self.phi[i] = (self.nw.T[i] + self.beta) / (self.nwsum[i] + self.dpre.words_count * self.beta)

困惑度:
def f_perplexity(word_frequency,word_count):             #計算困惑度
    
    duishu=-math.log(word_frequency)
    kuohaoli=duishu/word_count
    perplexity=math.exp(kuohaoli)
    return perplexity


相關推薦

2017.06.22LDA困惑程式碼

LDA程式碼: class LDAModel(object): def __init__(self, dpre): self.dpre = dpre # 獲取預處理引數 # # 模型引數 # 聚類個數K,迭代次數iter_times,每個類特徵詞個數

2017.06.22

nds 之間 mon 印度 new rand extend ear instance package Java.Test; import java.util.Calendar; public class Lianxi { public static void main

微軟 Build 2017 開發者大會Azure AI 的快速發展

一年一度的微軟 Build 大會準時起航,本年度大會從舊金山移師西雅圖,一個近年來憑藉女神湯唯而在中國家喻戶曉的美國西部海濱城市。 距離開場15分鐘,大會主會場已經就緒。 會議開頭是一個 MineCraft 拼出的 Seattle。 首先薩提亞·內德拉開始 Build 2017 開題演講,首

Android API level version對應關係(最新整理2017.06.26 1621)

Platform Version API Level VERSION_CODE 中文名稱 Android API 26 26 Android 7.1.1/7.1 25 Nougat Android 7

2017-05-22】WebForm內置對象Application和ViewState、Repeater的Command用法

操作數 傳值 rep 服務器 創建 bject bsp strong () 一、內置對象 1、Application 存貯在服務器端,占用服務器內存生命周期:永久 所有人訪問的都是這一個對象 傳值:傳的是object類型可以傳對象。 string s =TextBox1.T

2017-06-20】Linux應用開發工程師C/C++面試問題之一Linux多線程程序的同步問題

依次 其它 如果 開發工程師 logs 特殊 另一個 特殊情況 發生 參考之一:Linux 線程同步的三種方法 鏈接地址:http://www.cnblogs.com/eleclsc/p/5838790.html 簡要回答: Linux下線程同步最常用的三種方法就是互斥鎖、

2017-06-28(passwd 主要組附屬組 gpasswd newgrp)

鎖定 同時 tro 名稱 strong 刪除 span new gpa passwd passwd -l 用戶名 (鎖定用戶) passwd -u 用戶名 (解鎖用戶) passwd -d 用戶名 (清楚用戶密碼) 主要組與附屬組 一個用戶可以同

第一次作業Linux 2.6.32的進程模型調器分析

範圍 喚醒 最大 被調用 test ini writeback uid endif 1.前言 本文分析的是Linux 2.6.32版的進程模型以及調度器分析。在線查看 源碼下載 本文主要討論以下幾個問題: 什麽是進程?進程是如何產生的?進程都有那些? 在操作系統中,

強勢入場,AI們集體打 call揭秘百智能客服背後的語音技術應用

一起 直接 net sap pac 上下 應用 class 例子 兩年前的今天,AI流行下圍棋;今天,AI流行打電話……這個潮流的最近一次上演,是幾天前的百度AI開發者大會上,李彥宏現場播放了百度AI客服邀請開發者的真實電話錄音。當時我就在現場,第一通電話裏那位開發者方言比

Android禁止viewpager左右滑動,去除viewpager切換時動畫,解決viewpager地圖滑動衝突

Android自定義viewpager,禁止viewpager左右滑動,去除viewpager切換時動畫,解決viewpager與百度地圖滑動衝突 public class CustomViewPager extends ViewPager { private boolean e

RISC-V雙週簡報0x1aRISC-V Day Shanghai即將舉行,紀念版T恤不容錯過(2018-06-22)

RISC-V 雙週簡報 (2018-06-22) 要點新聞: RISC-V Day Shanghai即將舉行,紀念版T恤不容錯過 第二輪 RISC-V Day 2018 Shanghai學生參會資助計劃開啟 RV新聞 RISC-V Day 2018 Sha

Spark在Spark叢集中,叢集的節點個數、RDD分割槽個數、​cpu核心個數三者並行的關係??

梳理一下Spark中關於併發度涉及的幾個概念File,Block,Split,Task,Partition,RDD以及節點數、Executor數、core數目的關係。 輸入可能以多個檔案的形式儲存在HDFS上,每個File都包含了很多塊,稱為Block。 當Spark

【工具】Visual Studio 2017安裝提示找不到以下引數匹配的產品

問題: 下載好Visual Studio 2017 Installer執行安裝時,提示: 解決: 刪除隱藏檔案C:\ProgramData\Microsoft\VisualStudio\Packages; cmd視窗中執行C:\Program Files (x

數據結構開發(22)二叉樹的轉換、深層特性存儲結構設計

his 9.png 二叉 klist efi remove ren binary 兩個 0.目錄 1.樹到二叉樹的轉換 2.二叉樹的深層特性 3.二叉樹的存儲結構設計 4.小結 1.樹到二叉樹的轉換 通用樹結構的回顧: 雙親孩子表示法 每個結點都有一個指向其雙親的指針

【Android UI設計開發】第06底部選單欄(一)使用TabActivity實現底部選單欄

轉載請註明出處:http://blog.csdn.net/yangyu20121224/article/details/8989063               從這一篇文章開始,我們將進入到一個應用程式主介面UI的開發和設計中了,底部選單欄在Android的應用開發當

python下進行lda主題挖掘(三)——計算困惑perplexity

到2018年3月7日為止,本系列三篇文章已寫完,可能後續有新的內容的話會繼續更新。 本篇是我的LDA主題挖掘系列的第三篇,專門來介紹如何對訓練好的LDA模型進行評價。 訓練好好LDA主題模型後,如何評價模型的好壞?能否直接將訓練好的

LDA(一)LDA前身PLSA介紹推導

PLSA介紹與推導: 概率隱語義分析(PLSA)是一個著名的針對文字建模的模型,是一個生成模型。因為加入了主題模型,所以可以很大程度上改善多詞一義和一詞多義的問題。 數學基礎: 生成模型: 預測模型的公式是P(y|x),即給定輸入,輸出給定輸入的概

QT火星座標系 (GCJ-02) 座標系 (BD-09ll) 簡介及轉換演算法

首先向轉換演算法的作者 @coolypf 致敬!轉換演算法文章:http://blog.csdn.net/coolypf/article/details/8569813 1、美國GPS使用的是WGS84座標系統,以經緯度的形式來表示地球平面上的某一個位置。但在我國,出於國家安全考慮,國內所有導

CIIS2018演講實錄丨百王海峰語言知識

  文章釋出於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。       轉自 | 中國人工智慧學會 作者 | 王海峰   此次小編為大家整

關於前端直播(videoJS雲web播放器Cyberplayer3.0試用)

文章目錄 videoJS 開啟方式 記錄 初始化 居中播放按鈕 百度視訊播放器demo 開啟方式 修改