lda編譯原理
⑴ 要學數據挖掘需要哪些基礎
人工智慧、機器學習、模式識別、統計學、資料庫、可視化技術等。
數據挖掘從資料庫的大量數據中揭示出隱含的、先前未知的並有潛在價值的信息,數據挖掘主要基於人工智慧、機器學習、模式識別、統計學、資料庫、可視化技術等,高度自動化地分析企業的數據;
作出歸納性的推理,從中挖掘出潛在的模式,幫助決策者調整市場策略,減少風險,作出正確的決策。
(1)lda編譯原理擴展閱讀
數據挖掘起源於「情報深加工」,前身為「知識發現」,其實質就是找尋出數據背後的「故事」。用好數據挖掘技術,就能破除信息化戰場的「數據迷霧」,從而發現數字背後的奧秘,從戰略、戰役、戰術各個層面准確掌握戰場態勢及對手作戰特點。
信息化戰爭中,軍事決策的正確、及時與否,直接決定戰爭行動的成敗。數據挖掘技術的出現,可以幫助軍事決策人員從海量戰場數據中分析獲取有價值信息,進而為作戰籌劃等軍事決策提供有力支撐。
藉助專家系統、遺傳演算法,可高效完成兵力區分、戰術編組、隊形配置等決策;藉助關聯演算法、統計決策,可准確預判敵人的行動路線,對重要目標實施保護;藉助「決策樹」方法、人工神經網路以及可視化技術等,可進行目標火力分配。
數據挖掘還可以進行戰場環境分析,實現戰場態勢的精確感知,為指揮員提供更加清晰的戰場態勢顯示。
⑵ 數據挖掘工程師一般都做什麼
數據挖掘工程師是做什麼的?
數據挖掘,從字面上理解,就是在數據中找到有用的東西,哪些東西有用就要看具體的業務目標了。最簡單的就是統計應用了,比如電商數據,如淘寶統計過哪個省購買泳衣最多、哪個省的女生胸罩最大等,進一步,可以基於用戶的瀏覽、點擊、收藏、購買等行為推斷用戶的年齡、性別、購買能力、愛好等能表示一個人的畫像,就相當於用這些挖掘出來的屬性來刻畫一個人,這些還是最簡單的東西,更深層次的比如預測(股票預測),但是比較難。
數據挖掘往往與機器學習離不開。比如分類、聚類、關聯規則挖掘、個性化推薦、預測、神經網路、深度學習等。
數據挖掘 = 業務知識 + 自然語言處理技術( NLP ) + 計算機視覺技術( CV ) + 機器學習 / 深度學習( ML/DL )
( 1 )其中業務知識具體指的是個性化推薦,計算廣告,搜索,互聯網金融等; NLP , CV 分別是處理文本,圖像視頻數據的領域技術,可以理解為是將非結構化數據提取轉換成結構化數據;最後的ml/dl 技術則是屬於模型學習理論;
( 2 )在選擇崗位時,各個公司都沒有一套標準的稱呼,但是所做的事情無非 2 個大方向,一種是主要鑽研某個領域的技術,比如自然語言處理工程師,計算機視覺工程師,機器學習工程師等;一種是將各種領域技術應用到業務場景中去解決業務需求,比如數據挖掘工程師,推薦系統工程師等;具體的稱呼不重要,重要的是平時的工作內容;
PS :在互聯網行業,數據挖掘相關技術應用比較成功的主要是推薦以及計算廣告領域,而其中涉及到的數據主要也是文本,所以 NLP 技術相對來講比較重要,至於 CV 技術主要還是在人工智慧領域(無人車,人臉識別等)應用較多,本人了解有限,相關的描述會較少;
數據挖掘崗位需要具備的3 種基本能力
1. 工程能力
( 1 )編程基礎:需要掌握一大一小兩門語言,大的指 C++ 或者 java ,小的指 python 或者 shell 腳本;需要掌握基本的資料庫語言;
建議: MySQL + python + C++ ;語言只是一種工具,看看語法就好;
推薦書籍:《 C++ primer plus 》
( 2 )開發平台: Linux ;
建議:掌握常見的命令,掌握 Linux 下的源碼編譯原理;
推薦書籍:《 Linux 私房菜》
( 3 )數據結構與演算法分析基礎:掌握常見的數據結構以及操作(線性表,隊,列,字元串,樹,圖等),掌握常見的計算機演算法(排序演算法,查找演算法,動態規劃,遞歸等);
建議:多敲代碼,多上 OJ 平台刷題;
推薦書籍:《大話數據結構》《劍指 offer 》
( 4 )海量數據處理平台: Hadoop ( mr 計算模型, java 開發)或者 Spark ( rdd 計算模型, scala開發),重點推薦後者;
建議:主要是會使用,有精力的話可以看看源碼了解集群調度機制之類的;
推薦書籍:《大數據 spark 企業級實戰》
2. 演算法能力
( 1 )數學基礎:概率論,數理統計,線性代數,隨機過程,最優化理論
建議:這些是必須要了解的,即使沒法做到基礎扎實,起碼也要掌握每門學科的理論體系,涉及到相應知識點時通過查閱資料可以做到無障礙理解;
( 2 )機器學習 / 深度學習:掌握 常見的機器學習模型(線性回歸,邏輯回歸, SVM ,感知機;決策樹,隨機森林, GBDT , XGBoost ;貝葉斯, KNN , K-means , EM 等);掌握常見的機器學習理論(過擬合問題,交叉驗證問題,模型選擇問題,模型融合問題等);掌握常見的深度學習模型( CNN ,RNN 等);
建議:這里的掌握指的是能夠熟悉推導公式並能知道模型的適用場景;
推薦書籍:《統計學習方法》《機器學習》《機器學習實戰》《 UFLDL 》
( 3 )自然語言處理:掌握常見的方法( tf-idf , word2vec , LDA );
3. 業務經驗
( 1 )了解推薦以及計算廣告相關知識;
推薦書籍:《推薦系統實踐》《計算廣告》
( 2 )通過參加數據挖掘競賽熟悉相關業務場景,常見的比賽有 Kaggle ,阿里天池, datacastle 等。
想要學習數據挖掘的話可以看一下這篇文章《AI時代就業指南:數據挖掘入門與求職》
⑶ NLP自然語言處理
羅素悖論:由所有不包含自身的集合構成的集合
例子:理發師稱只給那些不給自己理發的人理發。
基於集合論,理發師無論給自己理發還是不給自己理發都是矛盾的。
因此集合論不是完備的。 即使後面馮羅伊德等科學家提出了各種假定條件。
由於上述的原因,集合率無法很好的描述自然語言,科學家發現通過概率模型可以更好的描述自然語言。
深度學習來處理自然語言屬於概率模型
證明最小點位於坐標軸上
h = f+c|x|
由於在x = 0處不可導
h-left'(0)*h-right'(0) = (f'+c)*(f'-c)
那麼如果c>|f'(0)|可得,h在0處左右導數異號
0是最值。
那麼在損失函數加入L1正則化後,可以得到某些維度容易為0,從而得到稀疏解
幾乎所有的最優化手段,都將適用凸優化演算法來解決
P(A|B) = P(A and B) / P(B)
if A and B 獨立
=》P(A and B| C) = P(A|C)*P(B|C)
也可以推出
=>A(A|B and C) = P(A|C) (B交C不為空)
拋9次硬幣,硬幣出現正面的概率是0.5,出現k次的概率分布如下如
服從正態分布
x的平均值
E = x*p(x) + ...
x相對於期望的偏離
var = (x-E(x))^2
conv = (x - E(x))*(m - E(m))
描述x,m是否有同分布
按理協方差為0,並不代表x和m沒有關系
例如下圖
如果點的分布對稱的分布,會得到協方差為0,但是其實他們是有關系的。
把每個相關的概率累加,得到聯合概率
P(x1=m1,x2=m2...) = n!*P1 m1/m1!*P2 m2/m2!
T(n) = (n-1)!
T(x)用一條曲線逼近n!,進而可以求得非整數的階乘
由二項式分布推出
P = T(a+b)*x (a-1)*(1-x) (b-1)/(T(a)*T(b))
則正態分布
y為0時,不考慮y『。y為1時,y'越接近1,越小,越靠近0,越大
把D最小化,迫使y'逼近y
對於一個句子,有若干單片語成。例如
C1: The dog laughs.
C2: He laughs.
那麼計算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。
根據歷史文本的統計學習。
可以得到P(C1)<<P(C2)
P('I love the game') = P('I')*P('love')*P('the')*P('game')
其中P(<work>) = 頻率/總單詞數
計算一篇文章是積極的還是消極的。
P(y|x) = sigmod(wx)
x是文章內每個單詞的頻率
y表示積極和消極情感
其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)
2-gram模型例子
把多個gram的模型進行線性整合
P(y|x1, x2, .. xn) = P(y)*P(x1, x2, ... xn|y) / P(x1, x2, ... xn)
y代表是否是垃圾郵件
x代表單詞
廣州市長壽路 -》 廣州市長|壽路
廣州市長壽路 -》 廣州市|長壽路
匹配詞袋:廣州市,廣州市長,長壽路
使用最大匹配發,第二個分詞更優
通過統計P(A|B),得出各個option的概率,取最大的概率,則為最後的分詞
word => [0, 0 , ... 1, ... 0]
word => [0, 1, 0, 1, 0, ...]
可以解決詞相似性問題
計算附近詞的頻率
word => [0, 3, 0, 1, 0, ...]
w是附近詞的one-hot encoding
score是詞的one-hot encoding
最後一層通過softmax,取擬合文本
最終中間層則為詞向量
輸入為詞one-hot encoding
輸出為附近此的one-hot encoding
最後通過softmax預測附近詞
最後中間層則為結果詞向量
混合模型是一種統計模型,問題中包含若干個子問題,每個子問題是一個概率分布,那麼總問題就是若干個子問題的組合,也就是若干個子分部的組合,這樣就形成了混合模型。
有紅黑兩種硬幣,把它們放在盒子里,從盒子里隨機抽取一個硬幣並投幣,抽到紅色的概率是p,紅色硬幣正面的概率是q,黑色硬幣正面的概率是m,假設我們沒辦法看到抽取出的硬幣的顏色,只能看到最終是正面或者反面的結果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估計p,q,m三個參數。
此時可以計算出
通過EM演算法迭代如下:
隨機p q m
迭代以下過程:
計算上面table
p = (aC(正)+cC(反))/total
q = aC(正)/(aC正+cC正)
m = bC(正)/(bC正 + dC正)
假設有上述數據,需要用混合模型來逼近,通過分析,紅色和藍色數據分別為高斯正態分布,N(u, v)
此時可以得到如下表
p = pN紅x/(pN紅x+(1-p)N藍x)
u = pN紅x/n
v = pN紅(x-u)^2/n
詞性轉換概率
詞性到單詞的轉換概率
通過EM遞歸演算法,訓練以上參數,得到隱馬爾可夫模型
PLSA主題模型
只統計詞的頻率,不計算詞的相對位置
計算文檔和單詞頻率的矩陣
進行奇異矩陣分解
得到A矩陣的壓縮U,U中的k則為k個主題
通過分析,LSA得到的主題是跟現實無法關聯,它只是一個量,而沒有明顯的意義。
PLSA為了解決此問題,引入概率模型,先確定主題個數
然後通過構建Doc->topic的概率table,和topic->word的概率table。
然後通過EM模型,得到這兩個table的所有概率值。
進而得到文檔的主題表示
PLSA的缺陷是,對於預測未知的doc,無法計算此文檔的相關概率。隨著doc數量的增加,PLSA模型的參數會線性增加,從而會造成過擬合。
LDA通過引入先驗概率來克服PLSA的問題。
類似於編譯原理的上下文無法句法分析,一顆語法樹
通過對CFG引入概率參數
有了概率,可以計算每顆語法樹的極大似然概率,並取最大概率的樹為最終輸出
上一個狀態中間層的輸出作為下一隱層的輸入
類似於HMM的2-gram模型。t狀態受到t-1時刻輸出的影響,受t-k的輸出的k越大,影響越小
由於RNN幾乎只受到上一時刻的影響,而忽略了久遠信息的影響。從而造成了一定的局限性。
LSTM通過引入長短記憶方法,來維持長記憶的信息。
通過訓練核內的sigmod函數,使得LSTM可以根據不同的句子,有條件的保留和過濾歷史信息,從而達到長記憶的功能。
GRU是LSTM的簡化版,它只需要處理兩個sigmod函數的訓練,而LSTM需要三個sigmod函數的訓練,減少了訓練的參數,加快了訓練的速度,但也損失了一部分模型的復雜,在處理較復雜問題時,沒有LSTM那麼好。
auto-encoder-decoder的特點是輸出的單元數是固定的。對於一般自然語言處理,例如機器翻譯,輸入的單元個數跟輸出單元的個數並不是一一對應的,此時就需要動態的生成輸出單元。Seq2Seq通過動態的輸出結束符,代表是否輸出完成,達到可以動態的根據輸入輸出不同的單元個數。
seq2seq的缺點是,所有的輸入序列都轉化為單一的單元c,導致很多信息都將消失,對於不同的輸出yi,它可能依賴的輸入xj有可能不一樣,此時通過加入注意力模型,通過對xi進行softmax處理,並加入到y權重的訓練中,可以讓不同的y,有不同的x對它進行影響
softmax的輸入為輸入單元x,和上一個輸出單元y,聯合產生softmax的權重,進而對不同的序列,對於同一個x,會有不同的注意力到輸出
q = Wq(x)
k = Wk(x)
v = Wv(x)
x為詞向量
通過訓練,得到權重w,從而學習到這一層的softmax注意力參數
R是前一次encoder的輸出
通過增加w的數量,產生多個z,並進行堆疊,通過前饋網路,最後產生z
在使用self attention處理句子時,是沒有考慮單詞在句子中的位置信息的。為了讓模型可以加入考慮單詞的位置信息,加入了位置編碼的向量
計算如下:
pos為單詞在句子中的位置
i為詞向量的位置
d為句子的長度
位置編碼加上詞向量形成tranformer的輸入
加入了歸一化和殘差網路
最終通過softmax,輸出每個單詞的概率,並最終輸出單詞
⑷ 計算機是有許多邏輯門電路和一些電子元件組成的,不同硬體組成的計算機有不同的指令集,這一指令集可以用
理解有問題啊。
「比如,下面這些數字就是存放在內存中的8086指令B8 3F 00 01 C3 01 C1」,其中「B8 3F 00 01 C3 01 C1」就已經是機器語言了,之所以用十六進制而不是二進制,只是一個表達方便的問題,在存儲器中,肯定是二進制的。
當你用高級語言寫好程序後,然後用編譯器(編譯原理比較高深,主要就是一個源代碼識別和源代碼-高級語言與低級代碼之間的轉換,最終的低級代碼就是機器語言,究竟一條二進制機器碼代表什麼由硬體設計決定。基本可以說寫一個XX編譯器,就算誕生了XX語言)與鏈接器翻譯成可執行文件(所謂文件,就是有一定的格式,因此它並非所有的內容都是二進制指令了。不過,這個自有操作系統能夠識別出哪些是指令)。運行可執行文件的時候,操作系統根據自己的機制,載入數據到內存。其中的指令,當被送入指令寄存器的時候,由硬體分解(翻譯)指令,生成執行這個指令所應該有的所有電信號(這是硬體設計決定的,建議去了解一下時序電路)。當然,操作系統的所有動作,歸根結底還是硬體實現的,這個你得了解計算機的硬體與軟體究竟是如何結合的。
建議你看看《計算機原理》、《計算機介面技術》(或者51單片機原理)、《數字電路》(了解一下時序電路,這是計算機硬體實現的關鍵)、《脈沖電路》(僅僅了解一下觸發器、門電路即可,有助於對打破砂鍋問到底者的滿足)、《操作系統原理》(關鍵點是了解軟硬在那一剎那是如何結合的。這里很有哲學之美。),要深刻理解軟硬的結合,還建議你了解PE結構、學習反匯編、手工匯編,《深入理解計算機系統》這書不錯。
⑸ 數據挖掘主要涉及到哪些方面的知識
與數據挖掘相關的內容包括資料庫、數據倉庫、機器學習、信息檢索。
學習數據挖掘基礎:資料庫理論、數學基礎(包括數理統計、概率、圖論等)、熟練掌握一種編程語言(java,python)、會使用數據挖掘工具軟體(weka、matlab、spss)
數據挖掘的內容包括分類、關聯分析、聚類和異常檢測等幾個方面
⑹ 請問那位高人有關於人臉識別lda演算法的實例,帶圖片庫最好,謝謝
原代碼可以在這里下載。論文原作者David Blei用C寫的。
lda-c.tgz載下來解壓,用make編譯,生成lda可執行程序。
lda est [initial alpha] [k] [settings] [data] [random/seeded/*] [directory]
lda inf [settings] [model] [data] [name]
第一個命令是模型生成的部分。est就是estimate
第二個命令是推理部分。inf就是inference
主函數在lda-estimate.c里。
readme.txt里的模型描述:
LDA is a hierarchical probabilistic model of documents. Let \alpha be a scalar and \beta_{1:K} be K distributions of words (called "topics"). As implemented here, a K topic LDA model assumes the following generative process of an N word document:
1. \theta | \alpha ~ Dirichlet(\alpha, ..., \alpha)
2. for each word n = {1, ..., N}:
a. Z_n | \theta ~ Mult(\theta)
b. W_n | z_n, \beta ~ Mult(\beta_{z_n})
This code implements variational inference of \theta and z_{1:N} for a document, and estimation of the topics \beta_{1:K} and Dirichlet parameter \alpha.
從前面一篇文章可知K是一個選取的參數表示topic的個數(在代碼里用變數NTOPICS表示),\alpha是Dirichlet分布的參數,本來是一個k維向量,但是這里把它定義為標量,用一個值表示。在lda est命令里會給出一個初始的\alpha值,程序會根據訓練數據求出最終的\alpha和\beta值,\beta值在上一篇文章中已經解釋: β是一個k*V的矩陣。k就是主題個數,V是詞語個數。計算模型實際上就是估算α和β的值。
lda est另外幾個參數的解釋。
setting: 配置文件,格式如下:
var max iter [integer e.g., 10 or -1]
var convergence [float e.g., 1e-8]
em max iter [integer e.g., 100]
em convergence [float e.g., 1e-5]
alpha [fit/estimate]
var max iter: 對於每一個文檔的最大迭代次數,-1就是不限制,用收斂准則去判斷是否停止迭代。
var convergence: 參數估計的收斂准則,當(score_old - score) / abs(score_old)小於設定值(或者迭代次數達到最大值)時,停止迭代
em max iter: EM最大迭代次數
em convergence: EM收斂准則
alpha: fit表示迭代過程中\alpha值保持不變,estimate表示\alpha值也會計算
data: 數據文件(數據格式在後面講到)
random/seeded/*: 模型初始化參數,就是\beta矩陣的初始化。random就是用隨機變數初始化,seeded就是隨機抽取一個文檔用平滑方法得到。*表示從已有的模型里載入。代碼里涉及到一個概念:sufficient statistics(充分統計量),用結構體lda_suffstats存儲,裡面有一個k*V的二維數組class_word,不知道跟lda_model結構里的log_prob_w(也是k*V的二維數組)是什麼關系。此處存疑。
directory: 輸出目錄
這里 有一個簡單的語料庫。載下來解壓到lda程序所在目錄。
然後運行如下命令
./lda 1 10 settings.txt ap/ap.dat random output
大概跑10來分鍾