1 引言
??前段時間,花了很多精力在了解、學習和思考有關(guān)——大數(shù)據(jù)/數(shù)據(jù)挖掘/知識發(fā)現(xiàn)/人工智能等等的知識/概念。思維上很受啟發(fā),對一些曾經(jīng)很模糊的概念,也有了較為清晰的認識。
??另一方面,作為一個程序員,我開始認真思考一些比較深層次的問題,比如,“信息的本質(zhì)”,“軟件的本質(zhì)”,“數(shù)據(jù)的本質(zhì)”,“語言的本質(zhì)”,“系統(tǒng)的本質(zhì)與系統(tǒng)論”,“編程語言原理”,信息在傳輸過程中的損耗,“對象與關(guān)系”,“如何評估智能化的程度”,“神經(jīng)網(wǎng)絡(luò)”,“計算機與大腦”等等等等。很有趣,也很有意義,而且讓我對現(xiàn)實生活和現(xiàn)實世界有了新的認知。
??另外,對“馮.諾依曼”體系結(jié)構(gòu),也有了進一步的認知,它與現(xiàn)代計算機結(jié)構(gòu)的關(guān)系,以及對編程語言的影響。
本文主要是把自己學習中遇到的工具、概念、過程,做一些整理和記錄。
2 統(tǒng)計工具的學習
??首先,以運維監(jiān)控信息為原數(shù)據(jù),以關(guān)聯(lián)性分析為切入點,展開分析,希望在大量、靜態(tài)的數(shù)據(jù)中獲取有價值的信息。在這一需求背景下,學習了 R 語言,并通過 R 語言完成了一些簡單的分析工作。
圖1 R語言編程環(huán)境
??R 語言更專注和適應(yīng)于統(tǒng)計學領(lǐng)域,是做學術(shù)和實驗的絕佳選擇,在產(chǎn)品化和集成方面稍顯不足。于是,將關(guān)注點轉(zhuǎn)向 Python 的數(shù)據(jù)分析模塊,Numpy&Pandas,Scipy,Matplotlib等。Python 由于其自身的開放、簡潔、和靈活性,使其在數(shù)據(jù)分析領(lǐng)域擁有著得天獨厚的優(yōu)勢,相對于 R 在統(tǒng)計方面的專業(yè)性,Python 更均衡,更全面。
??此外,數(shù)據(jù)分析畢竟是一門專業(yè)性很強的工作,需要掌握很多統(tǒng)計學、數(shù)學相關(guān)的領(lǐng)域知識。比如,如何建立相關(guān)模型,如何進行回歸,如何理解檢驗參數(shù),一般線性模型與廣義線性模型,非參數(shù)校驗與參數(shù)校驗,ROC曲線等等。Python 和 R 只不過是個工具,它們提供了所有可用的方法和函數(shù),但如何使用它們,如何有效的建立模型,得出結(jié)論,則需要大量的時間、精力,以及統(tǒng)計分析經(jīng)驗。作為一名程序員,這些才是真正的挑戰(zhàn)。
圖2 Python大數(shù)據(jù)學習路線
??除了 Python 和 R,還花了不少時間學習和使用SPSS。
??SPSS 是一個可視化的統(tǒng)計分析平臺,其分析結(jié)果清晰、直觀、易學易用,可對一些簡單的數(shù)據(jù)進行快速建模分析,對于掌握和理解一些專業(yè)術(shù)語有極大的幫助。它整合集成了統(tǒng)計分析中最常用、最主流的算法、過程、和工具,特別適合對分析、建模的方案進行快速驗證。
圖3 SPSS軟件視圖
??SPSS更適合那些傳統(tǒng)統(tǒng)計領(lǐng)域的從業(yè)人員,重心放在對工具的使用上,點一點,選一選,無需編程。但是 SPSS 缺少靈活性,尤其是在大數(shù)據(jù)分析時,SPSS所能完成的功能,也都可以通過python來編程實現(xiàn)。
??除了以上三種在數(shù)據(jù)分析領(lǐng)域普遍使用的工具,還花時間學習了杭州奇越數(shù)據(jù)科技有限公司的SPM軟件??傮w來說,SPM與SPSS有很多相似之處,但它比SPSS更專注于算法和大數(shù)據(jù)分析,能更靈活的應(yīng)對數(shù)據(jù)的不同規(guī)模、復(fù)雜度和結(jié)構(gòu),對數(shù)據(jù)進行描述性分析,構(gòu)建分析模型,或者預(yù)測。
??SPM內(nèi)含了多種先進的數(shù)據(jù)挖掘、機器學習算法模塊,如CART、TreeNet、MARS、Random Forests等,學習起來明顯比SPSS更難,非統(tǒng)計學專業(yè)人員,一般只能使用經(jīng)典模型進行分析,很難根據(jù)數(shù)據(jù)特征進行調(diào)參、優(yōu)化,或者創(chuàng)建新的分析模型。
圖3 SPM軟件視圖
??統(tǒng)計分析相關(guān)的工具主要了解了以上四種,數(shù)據(jù)分析是一個極其廣泛的領(lǐng)域,社會、金融、互聯(lián)網(wǎng)、娛樂、氣象等等,不同領(lǐng)域都有各式各樣定制化的分析工具或系統(tǒng)方案,另外還有很多開源工具,各具特色,但萬變不離其宗,數(shù)據(jù)分析的基本規(guī)律、結(jié)構(gòu)和算法原理都一樣。
??研究了這些統(tǒng)計工具之后,我的感觸是,我們畢竟是程序員,很難做好統(tǒng)計專業(yè)的事情,一句話隔行如隔山,我花了挺多時間去看高等數(shù)學、概率論與數(shù)理統(tǒng)計,也看了不少的技術(shù)文檔,可以理解一些術(shù)語,一些算法,但是很難去使用它們、去建模、去做其他有創(chuàng)造性的事情,尤其是涉及到大數(shù)據(jù)和復(fù)雜結(jié)構(gòu)時。
??而且,數(shù)據(jù)的統(tǒng)計分析是指導我們?nèi)绾稳シ治?、處理和理解?shù)據(jù),是一個技術(shù)概念、一個方法論。那么如何跳出晦澀的、統(tǒng)計相關(guān)的技術(shù)范疇?有沒有系統(tǒng)化的解決方案?
??于是,開始進入了第二階段的探索——知識發(fā)現(xiàn)。知識發(fā)現(xiàn)是數(shù)據(jù)分析的目的。
3 知識發(fā)現(xiàn)
??知識發(fā)現(xiàn)就是在數(shù)據(jù)中發(fā)掘知識,將低層次的原始數(shù)據(jù)轉(zhuǎn)換為高層次的信息。
??比如運維系統(tǒng)中,常常幾百G的歷史記錄躺在數(shù)據(jù)庫中,死氣沉沉,毫無價值,因為客戶根本不關(guān)心半年前的主機或者網(wǎng)絡(luò)設(shè)備到底是什么狀態(tài),有沒有告警,cpu高了還是低了,因為那都是陳年往事了。
??那么這些數(shù)據(jù)中,有沒有蘊藏著某些天機呢?可能有,也可能沒有,這就需要進行知識發(fā)現(xiàn)。沃爾瑪尿不濕與啤酒的經(jīng)典案例,就是知識發(fā)現(xiàn)的最佳實踐。
圖4 知識發(fā)現(xiàn)過程圖
??知識發(fā)現(xiàn)過程可以概括為三個部分:數(shù)據(jù)準備、數(shù)據(jù)挖掘、結(jié)果的表達和解釋(數(shù)據(jù)展示)。
3.1 數(shù)據(jù)準備與數(shù)據(jù)倉庫
??數(shù)據(jù)準備其實就是把原始數(shù)據(jù)提取并轉(zhuǎn)換為可分析數(shù)據(jù)!當數(shù)據(jù)量小,數(shù)據(jù)結(jié)構(gòu)簡單的時候,我們甚至可以通過excel來完成數(shù)據(jù)準備,無非就是進行數(shù)據(jù)規(guī)整、合并、填充、轉(zhuǎn)換等等操作唄;但是隨著數(shù)據(jù)量的增大,比如幾百M甚至幾G,或者多種不同結(jié)構(gòu)的信息,excel就無能為力了,不過,還可以通過數(shù)據(jù)庫的sql語句來完成。
??當數(shù)據(jù)量進一步增大,數(shù)據(jù)結(jié)構(gòu)進一步復(fù)雜,甚至數(shù)據(jù)來源于不同結(jié)構(gòu)的存儲體系,有些在分布式數(shù)據(jù)庫中,有些在關(guān)系型數(shù)據(jù)庫中,有些可能在mysql里,有些可能在oracle里,要對這些不同來源,不同形式的數(shù)據(jù)進行綜合分析,很顯然,傳統(tǒng)的sql查詢也無能為力了。
??以淘寶網(wǎng)站的架構(gòu)變遷為例,在最開始的時候,由于業(yè)務(wù)規(guī)模很小,電商系統(tǒng)的技術(shù)門檻是非常低的,簡單的前端設(shè)計+Apache+幾臺應(yīng)用服務(wù)器+mysql,網(wǎng)站就可以運營了。這個時候業(yè)務(wù)量不大,每天的訂單數(shù),訂單金額,訪問量,暢銷商品排行,客戶消費能力排行等等信息,幾張excel表就可以做了,一目了然。
??然后,客戶和訂單越來越多,查詢開始變慢,系統(tǒng)開始卡頓,這個時候就需要對網(wǎng)站架構(gòu)進行升級,增加服務(wù)器,增加數(shù)據(jù)庫(分庫分表)。業(yè)務(wù)數(shù)據(jù)和指標依然可以從數(shù)據(jù)庫中查詢,基于數(shù)據(jù)表信息進行數(shù)據(jù)的查詢處理。
??接下來,隨著網(wǎng)購時代的真正來臨,業(yè)務(wù)規(guī)模指數(shù)級增長,數(shù)據(jù)量陡增,管理團隊的規(guī)模也越來越大,高層管理人員關(guān)心的問題,已經(jīng)不再是流量,收入,PV,UV這些細枝末節(jié)的技術(shù)指標了,逐漸演變?yōu)橼厔菪缘摹⒓盒?、?zhàn)略性的分析。而這樣的需求,再也無法通過傳統(tǒng)的數(shù)據(jù)查詢來實現(xiàn)了,因為數(shù)據(jù)量太大了,原始數(shù)據(jù)必須抽象轉(zhuǎn)換為更高級的知識才能發(fā)揮價值。
??此時,數(shù)據(jù)倉庫技術(shù)應(yīng)運而生!
??數(shù)據(jù)倉庫,簡單的說就是為了知識發(fā)現(xiàn)與輔助決策而構(gòu)建的數(shù)據(jù)加工系統(tǒng),支持復(fù)雜的分析操作,并且提供直觀易懂的查詢結(jié)果。數(shù)據(jù)倉庫的建立標識著一家公司真正進入信息化階段!
圖5 數(shù)據(jù)倉庫結(jié)構(gòu)視圖
??IBM、Oracle、Sybase、Microsoft、和SAS等IT巨頭都曾先后通過收購或研發(fā)推出了自己的數(shù)據(jù)倉庫解決方案,可見IT公司對數(shù)據(jù)倉庫的重視。
??Hive 是一個基于Hadoop的數(shù)據(jù)倉庫基礎(chǔ)架構(gòu),它提供了一系列的工具,可以用來進行數(shù)據(jù)ETL(Extract-Transform-Load),是一種可以存儲、查詢和分析 Hadoop中數(shù)據(jù)的技術(shù)方案。
??在了解和學習Hive時,專門使用了4臺服務(wù)器搭建了一個Hadoop集群,并安裝了Hive工具,進行了簡單功能的使用。
圖6 Hive體系結(jié)構(gòu)
??當然,建立數(shù)據(jù)倉庫最重要的工作并非工具使用,而是對業(yè)務(wù)系統(tǒng)和決策需求的分析,確定數(shù)據(jù)倉庫所要解決的真正問題,不同主題下的查詢需求等等。
3.2 數(shù)據(jù)挖掘
??當數(shù)據(jù)準備結(jié)束,就開始進行數(shù)據(jù)挖掘了。數(shù)據(jù)挖掘是知識發(fā)現(xiàn)中的核心工作,它利用一系列的方法或算法從數(shù)據(jù)中獲取知識。
??數(shù)據(jù)挖掘的概念來源于機器學習。學習是人類才具有的智能行為,目的在于獲取知識。機器學習是研究如何使用計算機來模擬或?qū)崿F(xiàn)人類的學習行為的技術(shù),是人工智能領(lǐng)域中的重要研究方向。
圖7 機器學習的方向
??數(shù)據(jù)挖掘根據(jù)任務(wù)目的的不同,可以分為聚類、分類、關(guān)聯(lián)規(guī)則發(fā)現(xiàn)等。
??聚類算法是將沒有類別的數(shù)據(jù)按照距離的遠近親疏聚集成若干類別,典型的方法有K-means。分類方法是對有類別的數(shù)據(jù),找出各類別的描述知識,典型的算法有ID3,C4.5,IBLE等。關(guān)聯(lián)規(guī)則是對多個數(shù)據(jù)項重復(fù)出現(xiàn)的概率進行評測,超過指定的閾值時,建立這些數(shù)據(jù)項之間的關(guān)聯(lián),典型的算法是Apriori。此外,人工神經(jīng)網(wǎng)絡(luò)的相關(guān)算法也被應(yīng)用于數(shù)據(jù)挖掘中。
??在學習過程中,深入的了解和學習了決策樹與人工神經(jīng)網(wǎng)絡(luò)這兩類算法。
??決策樹是用樣本的屬性作為結(jié)點,用屬性的取值作為分支的樹結(jié)構(gòu),利用信息論原理對大量樣本的屬性進行分析和歸納而產(chǎn)生的。決策樹的根結(jié)點是所有樣本中信息量最大的屬性。ID3,C4.5都屬于決策樹算法。
??人工神經(jīng)網(wǎng)絡(luò)算法,由大量處理單元互聯(lián)組成的非線性、自適應(yīng)信息處理系統(tǒng)。它是在現(xiàn)代神經(jīng)科學研究成果的基礎(chǔ)上提出的,試圖通過模擬大腦神經(jīng)網(wǎng)絡(luò)處理、記憶信息的方式進行信息處理。目前廣泛應(yīng)用于模式識別、智能機器人、預(yù)測估計、自動控制等領(lǐng)域,并成功解決了許多現(xiàn)代計算機難以解決的實際問題。
??Keras是目前比較流行、易學易用的python 深度學習框架,可以通過Keras對數(shù)據(jù)進行網(wǎng)絡(luò)建模和訓練。我在公司環(huán)境里搭建了Keras環(huán)境,并構(gòu)建了簡單的網(wǎng)絡(luò)模型,實現(xiàn)圖片分類功能。對理解人工神經(jīng)網(wǎng)絡(luò)的原理與應(yīng)用有極大的幫助。
3.3 智能決策系統(tǒng)
??知識發(fā)現(xiàn)的最后一步是結(jié)果的表達和解釋,其實就是數(shù)據(jù)展示。
??對于小公司或者創(chuàng)業(yè)公司的初期,業(yè)務(wù)數(shù)據(jù)非常簡單,可以通過excel進行圖表展示,比如直方圖,餅圖等就能滿足需求了。對于中型公司,它們的數(shù)據(jù)量已經(jīng)大到了一定程度,就需要報表系統(tǒng)來進行數(shù)據(jù)的展示。那么對于阿里、騰訊這樣的互聯(lián)網(wǎng)巨頭呢?馬云思考的一定是那些戰(zhàn)略性的、趨勢性的問題,他所想要看的數(shù)據(jù)已經(jīng)不再是存儲在數(shù)據(jù)庫中的定量的、技術(shù)性的數(shù)據(jù)了,他需要一個智能決策系統(tǒng)。
??部署并實際操作體驗了以下兩個智能決策系統(tǒng):FineBI和Pentaho。
- FineBI
圖8 FineBI主界面
??FineBI是帆軟公司的產(chǎn)品,是一個初級的、易學易用的決策系統(tǒng),更準確的應(yīng)該說是加強版的智能報表系統(tǒng),更適合中小規(guī)模企業(yè)使用。
??總的來說,F(xiàn)ineBI是個入門級的決策系統(tǒng),基本做到了數(shù)據(jù)的展現(xiàn)與存儲的隔離,能支持多種數(shù)據(jù)源與數(shù)據(jù)格式。
2. Pentaho
??Pentaho是世界上最流行的開源商務(wù)智能軟件,以工作流為核心的,強調(diào)面向解決方案而非工具組件的,它包括一個web server平臺和幾個工具軟件:報表,分析,圖表,數(shù)據(jù)集成,數(shù)據(jù)挖掘等,可以說包括了商務(wù)智能的方方面面。它偏向于與業(yè)務(wù)流程相結(jié)合的BI解決方案,側(cè)重于大 中型企業(yè)應(yīng)用。它允許商業(yè)分析人員或開發(fā)人員創(chuàng)建報表,儀表盤,分析模型,商業(yè)規(guī)則和 BI 流程。
圖9 Pentaho BI組成
??開源BI或者說決策系統(tǒng)是越來越多IT公司的選擇,因為其不遜于商業(yè)BI的功能,以及天生的開放性和靈活性,當然Pentaho的部署和使用需要投入非常多的技術(shù)成本。
4 業(yè)務(wù)拓撲
??業(yè)務(wù)拓撲是一個實踐任務(wù),簡單的說就是主動探索環(huán)境中對象間的拓撲關(guān)系??梢允蔷W(wǎng)絡(luò)環(huán)境中的不同網(wǎng)絡(luò)節(jié)點間的關(guān)系,也可以是服務(wù)器中不同進程間的關(guān)系。建立業(yè)務(wù)拓撲,本質(zhì)上是要依靠“關(guān)系”去剖析“系統(tǒng)”,是個逆向分析與解構(gòu)的過程。
??關(guān)系具有這些特征:方向性、強度、頻度、成本、周期。
??可以根據(jù)采集的關(guān)系數(shù)據(jù),對網(wǎng)絡(luò)節(jié)點進行數(shù)據(jù)分析,如聚類、分類,或者關(guān)聯(lián)分析等。能夠建立一個初始的關(guān)系網(wǎng),然后再結(jié)合節(jié)點本身的信息,進一步的檢索、匹配業(yè)務(wù)信息,豐富關(guān)系網(wǎng)的屬性。
??第一階段,是發(fā)現(xiàn)服務(wù)器內(nèi)部進程間的關(guān)系。
??使用tcpdump,scapy,netstat,ps等系統(tǒng)工具采集所需的業(yè)務(wù)信息,以數(shù)據(jù)流信息為關(guān)系,通過graphviz工具對BTSO系統(tǒng)中進程進行拓撲。
圖10 進程間的業(yè)務(wù)關(guān)系圖
??業(yè)務(wù)拓撲的后續(xù)工作還沒有展開,如果是預(yù)研性質(zhì)的去探索可行性、做技術(shù)儲備和選型,可以繼續(xù)深入研究。但如果想結(jié)合業(yè)務(wù)場景進行開發(fā)、集成,可能還需要花更多的時間在業(yè)務(wù)需求的分析上。
5 總結(jié)
??智能化是件復(fù)雜的事兒,有些事情要想明白,說清楚,這樣討論和交流業(yè)務(wù)問題時才會有思想基礎(chǔ)和共鳴。
圖11 馮.諾伊曼結(jié)構(gòu)
??上圖是馮.諾依曼結(jié)構(gòu),該結(jié)構(gòu)指明了人工智能探索的方向。我們要進行運維智能化,我們的方向在哪里?我結(jié)合自己這半年的體會,開個腦洞,胡亂說說。
??1. 智能輸入系統(tǒng):我們要開發(fā)智能探針,snmp,wmi這些都太落伍了,智能指針能語音識別,能文字解析,能圖像識別,要能聯(lián)網(wǎng),能爬各種互聯(lián)網(wǎng)信息,要能監(jiān)控移動終端,比如智能手機、手環(huán)、手表等等。
??2. 智能存儲系統(tǒng):想要單純的基于pgsql/cassandra去做大數(shù)據(jù)分析,去做業(yè)務(wù)智能化,確實是有點浪漫,巧婦難為無米之炊啊!要智能化,怎么說也得分布式、集群之類的吧!首先把規(guī)模搞上去,橫向擴展起來,然后再縱向分層,讀寫分離,搞個智能化的數(shù)據(jù)倉庫之類的,這樣就比較有感覺了。
??3. 智能運算系統(tǒng):運算這一塊是技術(shù)活,搞個算法團隊,專門琢磨怎么去優(yōu)化決策樹,如何重構(gòu)卷積網(wǎng)絡(luò)模型。開源的、經(jīng)典的算法,組件,統(tǒng)統(tǒng)想辦法集成進來,就兩個字,準!快!
??4. 智能控制系統(tǒng):除了智能探針,再開發(fā)個智能幫手,專門負責實施。運算系統(tǒng)中出來的指令直接分發(fā)到智能幫手那里,有令必行,令行禁止。什么升級啊,更新啊,遠程配置,控制,全部能干,包省心!
??5. 智能展示:既然都智能了,語音識別是必須的吧,領(lǐng)導站在大屏幕前,說到哪里就展示到哪里。畫面就更不用說了,必須炫酷,有視覺沖擊力。等等等等吧。
??腦洞就開到這兒,書歸正傳,智能這件事兒,大了可以很大,小了也可以很小??照{(diào)連上網(wǎng)就變成智能家具了,電視連上網(wǎng)就變成智能電視了,本質(zhì)上他們只是增加了一種輸入方式而已。
|