前言
本篇文章繼續我們的微軟挖掘系列算法總結,前幾篇文章已經將相關的主要算法做了詳細的介紹,我為了展示方便,特地的整理了一個目錄提綱篇:大數據時代:深入淺出微軟數據挖掘算法總結連載,有興趣的童鞋可以點擊查閱,在開始Microsoft 神經網絡分析算法之前,本篇我們先將神經網絡分析算法做一個簡單介紹,此算法由于其本身的復雜性,所以我打算在開始之前先將算法原理做一個簡單的總結,因為本身該算法就隸屬于高等數學的研究范疇,我們對算法的推斷和驗證過程不做研究,只介紹該算法特點以及應用場景,且個人技術能力有限,不當之處還望勿噴。
算法起源
在思維學中,人類的大腦的思維分為:邏輯思維、直觀思維、和靈感思維三種基本方式。
而神經網絡就是利用其算法特點來模擬人腦思維的第二種方式,它是一個非線性動力學系統,其特點就是信息分布式存儲和并行協同處理,雖然單個神經元的結構及其簡單,功能有限,但是如果大量的神經元構成的網絡系統所能實現的行為確實及其豐富多彩的。其實簡單點講就是利用該算法來模擬人類大腦來進行推理和驗證的。
我們先簡要的分析下人類大腦的工作過程,我小心翼翼的在網上找到了一張勉強看起來舒服的大腦圖片
嗯,看著有那么點意思了,起碼看起來舒服點,那還是在19世紀末,有一位叫做:Waldege的大牛創建了神經元學活,他說人類復雜的神經系統是由數目繁多的神經元組成,說大腦皮層包括100億個以上的神經元,每立方毫米源數萬個,汗..我想的是典型的大數據。他們相互聯系形成神經網絡,通過感官器官和神經來接受來自身體外的各種信息(在神經網絡算法中我們稱:訓練)傳遞中樞神經,然后經過對信息的分析和綜合,再通過運動神經發出控制信息(比如我在博客園敲文字),依次來實現機體與外部環境的聯系。
神經元這玩意跟其它細胞一樣,包括:細胞核、細胞質和細胞核,但是它還有比較特殊的,比如有許多突起,就跟上面的那個圖片一樣,分為:細胞體、軸突和樹突三分部。細胞體內有細胞核,突起的作用是傳遞信息。樹突的作用是作為引入輸入信息的突起,而軸突是作為輸出端的突起,但它只有一個。
也就是說一個神經元它有N個輸入(樹突),然后經過信息加工(細胞核),然后只有一個輸出(軸突)。而神經元之間四通過樹突和另一個神經元的軸突相聯系,同時進行著信息傳遞和加工。我去...好復雜....
我們來看看神經網絡的原理算法公式
中間那個圓圓的就是細胞核了,X1、X2、X3....Xn就是樹突了,而Yi就是軸突了....是不是有那么點意思了,嗯...我們的外界信息是通過神經元的樹突進行輸入,然后進過細胞核加工之后,經過Yi輸出,然后輸出到其它神經元...
但是這種算法有著它自身的特點,就好像人類的大腦神經元一樣,當每次收到外界信息的輸入,不停的刺激的同時會根據信息的不同發生自身的調節,比如:通過不斷的訓練運動員學會了遠動,不停的訓練學會了騎自行車....等等吧這些人類的行為形成,其本質是通過不停的訓練數百億腦神經元形成的。而這些行為的沉淀之后就是正確結果導向。
同樣該算法也會通過X1、X2、X3....Xn這些元素不停的訓練,進行自身的參數的調整來適應,同樣訓練次數的增加而形成一個正確的結果導向。這時候我們就可以利用它的自身適應過程產生正確的結果,而通過不斷的訓練使其具備學習功能,當然,該算法只是反映了人腦的若干基本特性,但并非生物系統的逼真描述,只是某種簡單的模仿、簡化和抽象。
該算法不同數字計算機一樣,會按照程序的一步一步地執行運算,而是能夠自身適應環境、總結規律、完成某種運算、識別或控制過程,而這就是機器人的起源...人工智能的基礎。
神經網絡算法原理
由于神經網絡算法的設計面太大,我們此處暫且只分析Microsoft神經網絡算法的原理,在Microsoft神經網絡算法中,我們可以簡化成下面這個圖片:
Microsoft神經網絡使用的由最多三層神經元組成的“多層感知器”網絡,分別為:輸入層、可選隱含層和輸出層。
輸入層:輸入神經元定義數據挖掘模型所有的輸入屬性值以及概率。
隱含層:隱藏神經元接受來自輸入神經元的輸入,并向輸出神經元提供輸出。隱藏層是向各種輸入概率分配權重的位置。權重說明某一特定宿儒對于隱藏神經元的相關性或重要性。輸入所分配的權重越大,則輸入值也就越重要。而這個過程可以描述為學習的過程。權重可為負值,表示輸入抑制而不是促進某一特定結果。
輸出層:輸出神經元代表數據挖掘模型的可預測屬性值。
數據從輸入經過中間隱含層到輸出,整個過程是一個從前向后的傳播數據和信息的過程,后面一層節點上的數據值從與它相連接的前面節點傳來,之后把數據加權之后經過一定的函數運算得到新的值,繼續傳播到下一層節點。這個過程就是一個前向傳播過程。
而當節點輸出發生錯誤時,也就是和預期不同,神經網絡就要自動“學習”,后一層節點對前一層節點一個“信任”程度(其實改變的就是連接件的權重),采取降低權重的方式來懲罰,如果節點輸出粗粗哦,那就要查看這個錯誤的受那些輸入節點的影響,降低導致出錯的節點連接的權重,懲罰這些節點,同時提高那些做出正確建議節點的連接的權重。對那些受到懲罰的節點而說,也用同樣的方法來懲罰它前面的節點,直到輸入節點而止。這種稱為:回饋。
而我們學習的過程就是重復上面的介紹的流程,通過前向傳播得到輸入值,用回饋法進行學習。當把訓練集中的所有數據運行過一遍之后,則稱為一個訓練周期。訓練后得到神經網絡模型,包含了訓練集中相應值和受預測值影響變化的規律。
在每個神經元中的隱含層中都有著復雜的函數,并且這些都非線性函數,并且類似生物學神經網絡的基本傳輸特征,這些函數稱之為:激活函數,即:輸入值發生細微的變化有時候會產生較大的輸出變化。
當然Microsot神經網絡算法使用的函數是這樣的:
其中a是輸入值,而O是輸出值。
處理反向傳播,計算誤差,更新權值時輸出層所用的誤差函數為交叉熵
上述公式中Oi是輸出神經元i的輸出,而Ti是基于訓練樣例的該輸出神經元實際值。
隱含神經元的誤差是基于下一層的神經元的誤差和相關權值來計算的。公式為:
其中Oi是輸出神經元i的輸出,該單元有j個到下一層的輸出。Erri是神經元i的誤差,Wij是這兩個神經元之間的權值。
一旦計算出每個神經元的誤差,則下一步是使用以下方法來調整網絡中的權值。
其中l為0-1范圍內的數,稱之為學習函數。
其實以上函數應用的激活函數還是挺簡單的。有興趣的可以進行詳細的研究和公式的推算,咱這里只是簡要分析,列舉算法特點。
Microsoft神經網絡分析算法特點
經過上面的原理分析,我們知道了神經網絡算法分為了:輸入層、隱含層、輸出層三層方式連接,其中隱含層是可選的,也就是說在Microsoft神經網絡算法中如果不經過隱含層,則輸入將會直接從輸入層中的節點傳遞到輸出層中的節點。
輸入層特點:如果輸入層如果為離散值,那么輸入神經元通常代表輸入屬性的單個狀態。如果輸入數據包含Null值,則缺失的值也包括在內。具有兩個以上狀態的離散輸入屬性值會生成一個輸入神經元,如果存在NUll值,會自動再重新的生成一個輸入的神經元,用以處理Null值,一個連續的輸入屬性將生成兩個輸入神經元:一個用于缺失的狀態、一個用以連續屬性自身的值。輸入神經元可向一個多多個神經元提供輸入。
隱含層特點:隱含神經元接受來自輸入神經元的輸入,并向輸出神經元提供輸出。存在激活函數供其使用改變閥值。
輸出層特點:輸出神經如果對于離散輸入屬性,輸出神經元通常代表可預測可預測屬性的單個預測狀態,其中包括缺失的Null值。
如果挖掘模型包含一個或多個僅用于預測的屬性,算法將創建一個代表所有這些屬性的單一網絡,如果挖掘模型包含一個或多個同時用于輸入和預測的屬性,則該算法提供程序將為其中每個屬性構建一個網絡。
對于具有離散值的輸入屬性和可預測屬性,每個輸入或輸出神經元各自表示單個狀態。對于具有連續值的輸入屬性和可預測屬性,每個輸入或輸出神經元分別表示該屬性值的范圍和分布。
算法提供程序通過接受之前保留的定性數據集也就是事例集合并將維持數據中的每個事例的實際已知值與網絡的預測進行比較。即通過一個“批學習”的過程來迭代計算的整個網絡,并且改變的輸入權重。該算法處理了整個事例集合之后,將檢查每個神經元的預測值和實際值。該算法將計算錯誤程度(如果錯誤),并且調整與神經輸入關聯的權重,并通過一個“回傳”的過程從輸出神經元返回到輸出神經元。然后,該算法對整個事例集合重復該過程。經過以上的層層沉淀我們的算法就算從一個不懂的“嬰兒”逐漸成長成“成人”,而這個結果就是我們那它來發掘和預測的工具。
神經網絡分析算法應用場景
神經網絡研究內容廣泛,非本篇文章所能涵蓋,而且它反映了多學科交叉技術領域的特點。研究工作集中以下領域:
(1)生物原型研究。從生理學、心理學、腦科學、病理學等生物科學方面研究神經細胞、神經網絡、神經系統的生物原型結構及其功能機理。
我去....這那是我這個碼農層面研究的事,上面說的種種如果有興趣童鞋可以繼續深入研究,隨便一塊玩好了都可以升官加祿,衣食無憂......
回歸正題,我們還是來看看我們的Microsoft 神經網絡分析算法在數據挖掘領域的應用那些:
- 營銷和促銷分析,如評估直接郵件促銷或一個電臺廣告活動的成功情況。
-
根據歷史數據預測股票升降、匯率浮動或其他頻繁變動的金融信息。
-
分析制造和工業流程。
-
文本挖掘。
-
分析多個輸入和相對較少的輸出之間的復雜關系的任何預測模型。
其實它的應用場景是最廣泛的,比如當我們拿到一堆數據的時候,針對一個目標無從下手毫無頭緒的時候,Microsoft 神經網絡分析算法就是該應用的最佳場景了,因為其利用“人腦”的特點去茫茫的數據海洋中去發掘有用的信息。比如:BOSS把公司的數據庫扔給你了...讓你分析下公司為啥不掙錢...或者說啥子原因導致的不盈利...這時候該算法就應該出場了。
不過從最近的市場中發現,該算法的在"文本挖掘"中特別火,而且更在微軟中得到充分利用,比如當前的:微軟小冰,各種平臺下的語音識別,并且就連蘋果這樣的孤傲的公司也在慢慢的臣服于該算法的魅力下,有興趣可以查看本篇文章:http://www.yeeworld.com/article/info/aid/4039.html
結語
本篇文章到此結束了,滿篇的只是簡要的介紹了神經網絡算法的一些基礎和原理,當然因為該算法的高大上我暫且不做深入分析,只是記住其典型的應用場景即可,下一篇的文章我們將通過微軟的VS工具使用該算法做一個詳細的數據挖掘應用方法介紹。有興趣的可以提前關注。
文章的最后我們給出前幾篇算法的文章連接:
本篇參照:神經網絡算法——百度百科
院子里蒼梧老兄有過一篇該算法的稍詳細介紹,可點擊查看,本篇中圖片用到了該文章中截圖。
還有Microsoft SQL Server中聯機叢書部分內容。
如果您看了本篇博客,覺得對您有所收獲,請不要吝嗇您的“推薦”。
文章列表