LDA的python實現之模型引數訓練
原文地址 http://blog.csdn.net/u010551621/article/details/45258573
最近看了不少關於主題模型的東西,要說起主題模型,現在最火的當然是LDA, LDA全稱是Latent Dirichlet Allocation(隱狄利克雷分佈), 而不是Linear Discriminant Analysis, 相信大家很多都對lda的理解感到痛苦不已,因為裡面涉及到的數學推導實在是太多了,從gamma函式,beta分佈,狄利克雷分佈,馬爾可夫蒙特卡洛模型,看到都覺得反胃,不過今天,我們不從這些來說,就跟大家分析一下怎麼從工程上去實現整個LDA
實現之前還是來說一下LDA的起源:
先上一張來自Blei大師之手的圖,簡單的說一下吧, theta代表文件-主題分佈,在工程上可以理解為一個矩陣,如果整個文件語料庫包含的詞是|W|,包含的文件數是|D|,那麼矩陣的大小就是|D| * |W|,直觀的來說,這個矩陣中儲存的值theta[d][z]表示的是文件d中被分派給主題z的詞的個數,更具體的,我們可以認為它就是p(z|d)
主題模型是一種生成模型,什麼是生成模型呢,比如我們在構思一篇文件:(1)我們要選擇文章的主題,一個主題中可能有多個詞; (2)我們現在就要從這個主題中選擇我們想要的詞;第一個部分的概率就是p(z|d),表示在給定文件d,出現主題z的概率;
舉一個例子(例子來源於 Rich jin的LDA數學八卦):
我們平時在構造一篇自然語言處理的文章時,可能會有40%的概率談論語言學,30%的概率談論概率統計,20%的概率談論計算機,還有10%談論其他主題;選定了主題之後,我們執行第二部,選詞,那正常情況下,我們是怎麼選詞的呢?
- 說到語言學:我們一般會想到 語法,句子,喬姆斯基,據法分析,主語這些詞
- 談到概率統計,我們也很容易想到詞:概率,模型,均值,方差,證明,獨立,馬爾可夫鏈
- 說到計算機,我們也能聯想到 記憶體,硬碟,程式設計,二進位制,物件,演算法,複雜度這些詞
- class LDAModel:
- alpha = float #超引數alpha
- beta = float #超引數beta
- D = int #文件數目
- K = int #主題個數
- W = int #詞的個數
- NumberOfIterations = int #迭代次數
- SaveStep = int #儲存的步數
- Dictionary = object #整個語料的詞典
- Z = object # D * doc.size()大小的矩陣,Z[i][j]表示第i文件的第j個詞背分配的主題
- W = object # D * doc.size()大小的矩陣, W[i][j]表示第i文件的第j個詞
- IDListSet = object # D * doc.size()大小的矩陣, IDListSet[i][j]表示第i篇文件的第j個詞在詞典中的編號
- nw = object # W * K 大小的矩陣, nw[w][z]表示詞w被分配到主題z的次數
- nd = object # D * K 大小的矩陣,nd[d][z]文件d中被分配為主題z的詞的個數
- nwsum = object # K * 1 大小的向量,nwsum[z]表示主題z中包含的詞的個數
- ndsum = object # D * 1 大小的向量,ndsum[d]表示文件d中包含的詞的個數
- theta = object # D * K 大小的矩陣,p(z|d) = theta[d][z]
- phi = object # K * V 大小的矩陣,p(w|z) = phi[z][w]
- def __init__(self, alpha, beta, NumberOfIterations, SaveStep, K):
- self.alpha = alpha
- self.beta = beta
- self.NumberOfIterations = NumberOfIterations
- self.SaveStep = SaveStep
- self.K = K
- #初始化大小為K * 1的向量,初始值為0
- self.nwsum = ListUtil.Initial(self.K)
- #ListUtil.py
- import string
- def Normalize(list, smoother=0.0):
- """
- 對向量list進行歸一化處理,得到每個元素出現的概率
- :param list: 向量
- :param smoother: 平滑值,預設值為0; 為了防止0概率的出現
- """
- sum = Sum(list)
- K = len(list)
- newlist = []
- if sum > 0:
- newlist = [float((item + smoother) / (sum + K * smoother)) for item in list]
- return newlist
- def Sum(list):
- """
- 計算list中所有元素的和
- """
- res = 0
- for item in list:
- res += item
- return res
- def Initial(size, data=0):
- """
- 生成一個大小為size, 所有元素都為data的列表
- :param size: 列表大小
- :param data: 列表元素
- """
- list = []
- for i in xrange(size):
- list.append(data)
- return list
- def InitialMat(M, N, data=0):
- """
- 初始化大小為M * N的矩陣,所有元素初始化為data
- :param M:
- :param N:
- :param data: 矩陣元素
- """
- mat = []
- for i in xrange(M):
- row = Initial(N, data)
- mat.append(row)
- return mat
- def InitialEmptyMat(rows):
- """
- 初始化一個空的matrix
- :param rows:
- """
- mat = []
- for i in xrange(rows):
- tmp = [] #代表每一個文件包含的詞,初始化為空
- mat.append(tmp)
- return mat
- def toString(list):
- """
- 將list中的元素拼接成字串
- 方便用作檔案操作
- :param list: 列表元素
- """
- listStr = ""
- count = 0
- for ele in list:
- if type(ele) == int:
- eleStr = str(ele)
- elif type(ele) == float:
- #浮點數轉換為字串,保留8位小數
- eleStr = str("%.10f"%ele)
- elif type(ele) == str or type(ele) == unicode:
- eleStr = ele
- if count != len(list) - 1:
- eleStr += " "
- count += 1
- listStr += eleStr
- listStr += "\n"
- return listStr
- def StringToFloatList(SS):
- """
-
相關推薦
LDA的python實現之模型引數訓練
原文地址 http://blog.csdn.net/u010551621/article/details/45258573 最近看了不少關於主題模型的東西,要說起主題模型,現在最火的當然是LDA, LDA全稱是Latent Dirichlet Allocatio
Tensorflow之模型引數的Saver儲存讀取
一、Saver儲存 import tensorflow as tf import numpy as np #定義W和b W = tf.Variable([[1,2,3],[3,5,6]],dtype = tf.float32,name = 'weight') b = tf.Variable([
[TensorFlow深度學習入門]實戰八·簡便方法實現TensorFlow模型引數儲存與載入(pb方式)
[TensorFlow深度學習入門]實戰八·簡便方法實現TensorFlow模型引數儲存與載入(pb方式) 在上篇博文中,我們探索了TensorFlow模型引數儲存與載入實現方法採用的是儲存ckpt的方式。這篇博文我們會使用儲存為pd格式檔案來實現。 首先,我會在上篇博文基礎上,實現由c
[TensorFlow深度學習入門]實戰七·簡便方法實現TensorFlow模型引數儲存與載入(ckpt方式)
[TensorFlow深度學習入門]實戰七·簡便方法實現TensorFlow模型引數儲存與載入(ckpt方式) TensorFlow模型訓練的好網路引數如果想重複高效利用,模型引數儲存與載入是必須掌握的模組。本文提供一種簡單容易理解的方式來實現上述功能。參考部落格地址 備註: 本文采用的
論文Multi-Perspective Sentence Similarity Modeling with Convolution Neural Networks實現之網路模型搭建及訓練
環境: Python3.6 Tensorflow-GPU 1.8.0 本文所實現的網路模型是在https://blog.csdn.net/liuchonge/article/details/64440110的基礎上搭建的,不同的是為了應對loss為NAN的情況,本文在每一層卷積的後面
學習筆記TF016:CNN實現、數據集、TFRecord、加載圖像、模型、訓練、調試
quest oba lose 神經元 byte 足夠 jpg eight 值轉換 AlexNet(Alex Krizhevsky,ILSVRC2012冠軍)適合做圖像分類。層自左向右、自上向下讀取,關聯層分為一組,高度、寬度減小,深度增加。深度增加減少網絡計算量。 訓練模
[Kaggle] dogs-vs-cats之模型訓練
naconda lob flow 技術分享 prot merge efault int app 上一步建立好模型之後,現在就可以訓練模型了。 主要代碼如下: import sys #將當期路徑加入系統path中 sys.path.append("E:\\CODE\
tensorflow 模型預訓練後的引數restore finetuning
之前訓練的網路中有一部分可以用到一個新的網路中,但是不知道儲存的引數如何部分恢復到新的網路中,也瞭解到有許多網路是通過利用一些現有的網路結構,通過finetuning進行改造實現的,因此瞭解了一下關於模型預訓練後部分引數restore和finetuning的內容 更多內容參見: http
實現yolo3模型訓練自己的資料集總結
經過兩天的努力,借鑑網上眾多部落格,在自己電腦上實現了使用yolo3模型訓練自己的資料集並進行測試圖片。本文主要是我根據下面參考文章一步步實施過程的總結,可能沒參考文章中那麼詳細,但是會包含一些參考文章中沒提及的容易掉坑的小細節,建議讀者結合參考文章一起看,一
keras讀取訓練好的模型引數並把引數賦值給其它模型
介紹 本博文中的程式碼,實現的是載入訓練好的模型model_halcon_resenet.h5,並把該模型的引數賦值給兩個不同的新的model。 函式式模型 官網上給出的呼叫一個訓練好模型,並輸出任意層的feature。 model = Model(inputs=base_mod
UnityShader開發之光照 - 簡單光照模型 - Phong反射光模型引數分析
1.概念 light color = emissive + ambient + diffuse + specluar emissive:自發光 ambient:環境光 diffuse :漫反射光 specluar:鏡面光 Phong模型 鏡面光公式
機器學習之模型選擇(K折交叉驗證,超引數的選擇)
來源: https://www.cnblogs.com/jerrylead/archive/2011/03/27/1996799.html 對於解決同一個問題,如怎麼選擇模型去擬合線性迴歸中只有一個特徵時房價預測問題,如可能有不同的模型去解決,如: 1、d = 1,h(
程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之②模型訓練與測試
個性化推薦第二部分:模型訓練 程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.
TensorFlow實現模型斷點訓練,checkpoint模型載入
深度學習中,模型訓練一般都需要很長的時間,由於很多原因,導致模型中斷訓練,下面介紹繼續斷點訓練的方法。 方法一:載入模型時,不必指定迭代次數,一般預設最新 # 儲存模型 saver = tf.train.Saver(max_to_keep=1) # 最多保留最新的模型 # 開啟會話 w
機器學習之模型評估與引數調優
一、流水線工作流 在利用訓練資料對模型進行擬合時已經得到一些引數,使用流水線可以避免在將模型用於新資料時重新設定這些引數。利用sklearn中的Pipline類,使得我們可以擬合出包含任意多個處理步驟的模型,並將模型用於新資料的預測。 1. # Title
Slog69_實現一個帶引數的雲函式GET!(微信小程式之雲開發-全棧時代2)
ArthurSlog SLog-69 Year·1 Guangzhou·China Sep 11th 2018 禍兮福之所倚 福兮禍之所伏 開發環境MacOS(High Sierra 10.13.5) 需要的資訊和資訊源: 前言 騰訊推出“雲開發”概
初識TensorFlow之將自己訓練好的模型遷移到電腦攝像頭和外接海康攝像頭上,並在視訊中實時檢測
有了訓練好的模型之後,可以將模型遷移到電腦或者手機上 電腦: # -*- coding: utf-8 -*- """ @author: Terry n """ # Imports import numpy as np import os import sys impor
pytorch學習筆記之載入預訓練模型
原文:https://blog.csdn.net/weixin_41278720/article/details/80759933 pytorch自發布以來,由於其便捷性,贏得了越來越多人的喜愛。 Pytorch有很多方便易用的包,今天要談的是torchvision包,
[ pytorch ] ——基本使用:(2) 訓練好的模型引數的儲存以及呼叫
1、儲存與呼叫 def modelfunc(nn.Module): # 之前定義好的模型 # 由於pytorch沒有像keras那樣有儲存模型結構的API,因此,每次load之前必須找到模型的結構。 model_object = modelfunc # 匯入模
機器學習主題模型之LDA引數求解——Gibbs取樣
LDA引數推導的Gibbs取樣方法基於馬爾科夫鏈蒙特卡洛方法,因此首先學習MCMC方法。 一、馬爾科夫鏈蒙特卡洛方法 MCMC(Markov Chain Monte Carlo)方法是構造適合的馬爾科夫鏈,使其平穩分佈為待估引數的後驗分佈,抽樣並使用蒙特卡洛方法進行積