1. 程式人生 > >機器學習對我們生活的改變

機器學習對我們生活的改變

1.1 背景

正如愛因斯坦所說:“從希臘哲學到現代物理學的整個科學史中,不斷有人試圖把表面上極為複雜的自然現象歸結為幾個簡單的基本概念和關係,這就是整個自然哲學的基本原理。”人類進化的發展史,從某種意義上來講就是不斷歸納經驗進而演繹的過程。從刀耕火種的新石器時代到近代的工業革命以及現代科技的發展,人類已經積累了大量的經驗。這些經驗既是“種瓜得瓜,種豆得豆”這樣的常識,也是例如相對論這樣的定理公式。人類文明正沿著時間這條座標軸不斷前進,如何利用過往的經驗來推動人類社會的再一次飛躍,人工智慧或許是我們需要的答案。

人工智慧的起源應該可以追溯到17世紀甚至更早,當時人們對於人工智慧的定義是基於推理的。人們暢想著如果兩個哲學家或者歷史學家的觀點出現矛盾,兩個人不必再進行無休止的爭吵,世界上的所有理論會抽象成類似於數學符號的語言,人們只需要拿出筆來計算就可以解決矛盾。這種抽象邏輯給了後人引導,如今,機器學習在行業上的應用也是將業務邏輯抽象成數字來進行計算,從而解決業務問題。但是在遠古時代,這些邏輯還只是科學家腦中的想法。實際上,直到有機器的出現,人工智慧才真正作為一門學科而受到廣泛關注。

談到近代人工智慧的起源就不得不提到一個名字——圖靈(見圖1-1)。

圖1-1 阿蘭•圖靈

隨著第二次世界大戰的爆發,越來越多的機械開始替代手工,人們開始幻想什麼時候機器能代替人類來進行思考。在20世紀40年代,關於人工智慧的討論開始興起。但是,機器做到什麼程度才算人工智慧,這需要一個標準來判定。圖靈用了最直白的話語描述了人工智慧,這就是圖靈測試(見圖1-2)。

圖1-2 圖靈測試

1950年,電腦科學和密碼學的先驅阿蘭 •麥席森•圖靈發表了一篇名為《計算機器與智慧》的論文,文中定義了人工智慧測試的方法,讓被測試人和一個聲稱自己有人類智力的機器在一起做一個實驗。測試時,測試人與被測試人是分開的,測試人只有通過一些裝置(如鍵盤)向被測試人問一些問題,隨便是什麼問題都可以。問過一些問題後,如果測試人能夠正確地分出誰是人、誰是機器,那機器就沒有通過圖靈測試,如果測試人沒有分出誰是機器、誰是人,那這個機器就是有人類智慧的。

人工智慧的另一個重要標誌是人工智慧這一學科的誕生,故事發生在1956年達特茅斯會議。會議上提出了這樣的理論:“學習或者智慧的任何其他特性都能被精確地描述,使得機器可以對其進行模擬。”這個論調很像機器學習演算法在今日的應用,我們需要提取可以表示業務的特徵,然後通過演算法來訓練模型,用這些模型對於未知結果的預測集進行預測。這次會議對於人工智慧在更廣闊的領域發展起到了推動作用。在之後的20年裡,人類在人工智慧,特別是相關的一些統計學演算法的研究上取得了突破進展,比較有代表性的如神經網路演算法,就是在這個時期誕生的。有了這些智慧演算法作支撐,更多的真實場景才可以在數學層面進行模擬,人類慢慢學會通過資料和演算法的結合來進行預測,從而實現某種程度上的智慧化應用。

人工智慧在發展過程中也遇到過非常多的挑戰。20世紀70年代,隨著理論演算法的逐步成熟,人工智慧的發展遇到了計算資源上的瓶頸。隨著計算複雜度的指數性增長,20世紀70年代的大型機器無法負擔這一切。同時,當時的網際網路還處於發展初期,在資料積累方面也才剛剛起步。科學家往往沒有足夠的資料去訓練模型,以影象印刷文字識別(Optical Character Recognition,OCR)為例。如果想針對某一場景訓練一套精度較高的OCR模型,需要千萬級的資料樣本,這樣的資料無論從資料獲取、儲存和計算成本來看,在當時都是不可能實現的。所以人工智慧在之後很長的一段時間內都受限於計算能力以及資料量的不足。

雖然經歷了近20年的消沉時期,但是資料科學家對於人工智慧的探索從未停止過。在 21 世紀,隨著網際網路的井噴式發展,越來越多的影象和文字資料被分享到網頁上,停留在網際網路巨頭的伺服器中,隨之而來的是使用者在網上的瀏覽記錄和購物記錄的收集。網際網路已經變成了一個大資料倉庫,許多網路大咖們紛紛將注意力投向資料探勘領域,資料庫成為了一座座金礦,資料科學家們開始用一行行公式和程式碼挖掘資料背後的價值,越來越多的公司做起了資料買賣。這些程式碼和公式就是本書的主角——機器學習演算法。馬雲先生在很多年前的公開演講上就已經明確表示過“阿里巴巴是一家資料公司”。資料的積累就像是一塊塊肥沃的土地,需要機器學習演算法來在上面耕種,雲端計算就是揮舞在土地上的“鋤頭”。PB 級資料的積累使得人們不得不將單機計算遷移到多機,平行計算理論開始得到了廣泛的應用,這就催生了雲端計算的概念。雲端計算,就是分散式計算,簡單來講就是將一個很複雜的任務進行拆解,由成百上千的機器各自執行任務的一個小模組,然後將結果彙總。

以Hadoop 為代表的開源分散式計算架構為更多的企業提供了分散式計算的技術支援。隨著Caffe和Tensorflow等高效率的深度學習架構被開源,許多小型企業也具備了自主研發改進演算法模型的能力。人工智慧的應用開始普及,並且逐漸融入我們的生活當中。人們開始習慣了在 Google 上輸入一個詞條馬上就能返回上千萬條資訊,通過刷臉或者指紋識別來進行支付,在淘寶購物時獲得智慧商品推薦。影象識別、文字識別和語音識別的發展給我們的生活帶來了顛覆式的影響。2016年,Google關於人工智慧的一場秀將人工智慧產業帶到了一個新高度。機器智慧戰勝人類圍棋選手一直以來被認為是不可能實現的任務,但是AlphaGo成功地實現了這一點。AlphaGo的成功不僅僅驗證了深度學習和蒙特卡洛搜尋演算法的實踐性,更加再一次印證了這樣的事實,即人類不再是產生智慧的唯一載體。任何機器,只要能夠進行資訊的接收、儲存和分析,都是可以產生智慧的。而這裡面的關鍵因素是資訊的量級以及演算法的深度。

人工智慧的發展史,就是對於過往經驗的收集和分析方法不斷演繹的歷史。在機器出現之前,人類只能通過別人的分享和自己的實踐在很小的資訊量級上來對事物進行判斷,這種對於外界事物的認知受限於人的腦力和知識量。不同於人類的腦力,抽象意義上的機器可以被當成一個資訊黑洞,吸收所有的資訊,而且可以不分晝夜地對這些資料進行大維度的分析、歸納以及演繹,如果人類將這些機器學習後得到的認知進行分享,就形成了人工智慧。於是,隨著人類社會的發展,資料的積累以及演算法的迭代將進一步推動整個人工智慧的發展。

正如前面所提到的,人工智慧的發展體現在機器帶動人類進行經驗歸納以及思考,那麼人工智慧背後的引擎就是本書要介紹的重點——機器學習演算法。機器學習是一種多學科交織的研究型學科,涉及生物學、統計和計算機等多個學科。機器學習演算法發展到目前階段,做的事情主要是將生活中的場景抽象成為數學公式,並且依靠機器的超強計算能力,通過迭代和演繹生成模型,對於新的社會問題進行預測或者分類操作。人工智慧的發展史其實伴隨著機器學習演算法的進化史,正是隨著機器學習演算法的不斷髮展以及計算能力的提升,人工智慧產業才得到了發展,進而達到了目前這種火熱的局面。下面將對於機器學習演算法在目前階段所取得的一些成就進行一個介紹,方便大家瞭解機器學習演算法的用途。

1.2 發展現狀

上一節中回顧了人工智慧的發展歷程,不考慮計算能力等硬體條件的限制,當今世界的人工智慧可以總結為資料和智慧演算法的結合。通過對過往經驗的分析得到實驗模型,並且利用這種模型指導實際的業務。把人工智慧看作一個人類大腦的話,裡面的血液就是資料,而大腦裡面的血管承載著資料的流轉,可以看作是相關的機器學習演算法。所以在介紹機器學習演算法之前,大家不得不先了解一下大資料時代的特性,然後再針對當前資料爆炸的這種情況介紹機器學習演算法的一些用途。

1.2.1 資料現狀

21世紀註定是屬於網際網路的,在這個數字時代產生了很多新名詞,這裡邊有云計算、電子商務和有共享經濟。大資料也是網際網路時代的產物,出現在報紙中、電視上、網頁裡。“大資料”已經成為資訊時代的代名詞,乃至於好多人還來不及認識它,就已經開始被它支配。什麼是資料?客觀世界存在的那一刻開始,資料就已經出現了,從宇宙中天體運動的速度、角度及天體的質量,到人類文明的產生、更迭和演進。資料無處不在,但是資料的價值在於如何採集和利用。

正是受到網際網路的驅動,人類開始採集和利用資料。對於大資料時代,我最深切的感觸是大資料未來的版圖清晰又模糊。清晰的是人們已經開始意識到資料是有價值的,並且已經開始採集資料,看看人們都做了什麼?根據儲存市場調研的最新報告,目前世界全年的資料儲存量約合 50EB,這些資料來源於網際網路、醫療健康、通訊、公共安全以及軍工等行業。接下來,我們來看看這些資料是如何產生的。

以全球最大的SNS服務商Facebook為例。Facebook現在的使用者數達到9.5億,這些使用者的每一個行為,包括每一次通知、頁面訪問、檢視朋友的頁面,都會被Facebook的伺服器追蹤,並且產生歷史行為資料。而全世界9.5億使用者平均每個月在Facebook上花費的時間超過6.5個小時,產生的資料量大小超出人們的想象。Facebook上每天可以產生500TB左右的資料量,我們來看看這些資料具體包括什麼。人們每天分享 25 億個內容條目,包括狀態更新、牆上的帖子、圖片、視訊和評論,每天有27億個“ like”操作,人們每天上傳3億張圖片。

雖然諸如Facebook、Google和Alibaba這樣的國際網際網路巨頭已經開始積累資料,並且將資料進行分析來反哺業務。但是截止到今天,全世界每年儲存下來的資料只佔到資料產生總量的百分之一不到,其中可以被標記並且分析的資料更是連百分之十都不到。這種現狀造成了兩方面的瓶頸,一方面是資料產生和資料收集的瓶頸,另一方面是採集到的資料和能被分析的資料之間的瓶頸。

針對資料產生和資料採集的瓶頸,其原因一方面是硬體儲存成本的限制,但是隨著硬碟技術的發展和產能的提升,這方面的缺陷正逐漸弱化。筆者認為,造成目前資料採集與資料生成失衡的主要原因是資料的採集缺乏標準。雖然,網際網路公司對資料採集和標準制定方面已經形成了一套成熟的體系,如網站的點選行為、日誌的收集等。但是對於更多行業,特別是傳統行業來說,資料的採集方式還處於摸索當中,而且從目前來看,這樣的摸索還將持續相當長的時間。儘管現在提倡網際網路思維以及世界萬物聯網的思想,但是網際網路對於採集資料的經驗恐怕很難複製到傳統行業。因為網際網路行業對於資料採集存在天然的優勢,網際網路的資料都是託管在資料庫裡,以二進位制的方式記錄在硬碟中,只要稍作處理就可以形成一份質量較高的結構化資料。但是在傳統行業,以建築行業為例,資料產生於工地上一磚一瓦的堆砌,產生於工地的施工建設,這樣的資料如何轉成二進位制來儲存需要由新的標準來指定,而這種標準更多地受限於技術手段。如果我們的影象識別做得足夠智慧,拍一張照片就可以將工地的資料量化,這樣可能就可以解決這種問題。對於傳統行業的資料智慧化程序可能還需要耐心的等待。

資料採集方面還需要制定更多的標準以及技術的支援,但是資料的應用方面也存在不小的缺陷。如果目前世界上採集到的資料能被充分利用是足夠顛覆生活的,可惜的是目前可以供分析的資料還只佔很小的比例。造成這樣的困境主要有兩方面因素,一個是目前比較主流的機器學習演算法都是監督學習演算法,監督學習需要的資料來源是打標過的資料,打標資料很多時候是依賴於人工標記。比如我們需要一份資料來訓練模型進行電影推薦,除了已知的電影的特徵資料以外,還需要一份打標的資料來表示電影的好看程度,有點像豆瓣的電影分數,這種資料很難通過計算機的計算直接生成,需要依賴於人工打標。人工打標的影響就是,一方面很難生成大量的標本(上千萬樣本的資料),設想一下1000萬人坐到一個地方一起看一部電影再進行評分是多麼浩大的一項工程。另一方面,人工打標的成本太高,目前有很多負責打標的第三方公司,打標服務往往在市場上可以賣到很高的價格。

另一個導致可分析資料比例較低的因素是對於非結構化的資料處理能力較低。非結構化資料指的是文字或者圖片、語音、視訊這樣的資料。這部分資料來自於使用者在貼吧的評論、社交軟體上的頭像、直播平臺上的視訊展現等。雖然目前的科技水平已經具備了文字和影象方面的分析能力,但是在大批量處理和特徵提取方面依然處於相對基礎的階段。以影象識別為例,目前比較成熟的包括人臉識別和指紋識別等,影象識別的特點是每種事物的識別需要訓練相對應的模型,而這種模型需要大量的訓練樣本來提高精確率,一個成熟的模型通常需要千萬級別的訓練樣例。人臉的資料是比較容易獲取的,所以相應的模型比較容易訓練,但是假如我們需要訓練一個模型來識別某一款杯子,針對這一款杯子的訓練資料是很難達到理想量級的,這也提高了特定場景下影象識別的門檻。

網際網路在不斷髮展,資料的生成也不會停下腳步。目前被廣泛引用的網際網路資料中心(International Data Corporation,IDC)和EMC聯合釋出的“2020年的數字宇宙”報告顯示,到2020年全球數字宇宙將會膨脹到40000EB,均攤每個人身上是5200GB以上,這個資料量的資料將會如何被有效儲存和應用,目前我們還不敢想象。不過可以肯定的是,資料會成為重要的資源,就像是水電煤一樣,在大資料時代,特別是未來的資料爆發時代,資料一定會展現出更大的潛能,人類社會也會進入資料處理技術(Data Technology,DT)時代。

1.2.2 機器學習演算法現狀

之前講了大資料,這裡再講機器學習就變得容易理解了。傳統的機器工作模式是程式設計師向機器輸入一連串的指令,可以理解為是程式碼,然後機器按照這些指令一步一步執行下去,結果通常是我們可以事先預料的。這種邏輯在機器學習裡是走不通的,機器學習是指我們向機器(更準確地說是機器學習演算法)中輸入資料,然後機器會根據資料返回結果,這些結果是通過資料自我學習得到的,學習的過程通過演算法來完成。我們可以這樣來定義,機器學習方法是計算機利用已有的資料(經驗)得出了某種模型,並利用這些模型預測未來的一種方法。這個過程其實與人的學習過程極為相似,只不過機器是一個可以進行大維度資料分析而且可以不知疲倦地學習的“怪獸”而已(見圖1-3)。

圖1-3 機器學習與人的不同

機器學習跟模式識別、統計學習、資料探勘、計算機視覺、語音識別和自然語言處理等領域都有著很深的聯絡。如今生活在這樣的DT時代,隨時隨地都是機器學習的影子,通過機器對大資料進行分析而帶來的人工智慧應用,正在一點一點地改變人們的生活方式和思維方式。看到這裡很多人都會發問:機器學習究竟能做什麼?其實機器學習已經服務了我們生活的各個方面,下面以一個簡單的購物場景來介紹機器學習是如何應用在我們的日常生活中的。

現在是 2016 年,如果你還沒有嘗試過網上購物,那真的是落伍了。網上購物目前已經成了人們的生活方式。下面就簡單地聊聊機器學習演算法在購物行為中的應用。假設我們在餐廳吃飯,看到一個人的短袖體恤很漂亮,我們想買同款,但是又不好意思開口去問。那麼我們可以先偷拍一張這個人的T恤的照片,然後拍立淘(見圖1-4)就會顯示出這件衣服的同款。

圖1-4 拍立淘

這裡就用到了機器學習中的影象識別技術。但是往往與這件衣服相近的款式又非常的多,因此我們需要把這些款式按照一定的規則進行排序,這就涉及了機器學習演算法模型的訓練,通過這個模型,我們把所有的類似款式進行一個排名,最後就得出了最終的展示順序。

當然,更多的時候我們是通過鍵盤的輸入來搜尋商品的,但是如果犯懶,還可以選擇通過語音的方式輸入內容,這就是語音轉文字的運用。在我們搜尋一款產品之後,網頁的邊欄上會出現一些推薦列表,而且每個使用者的推薦列表都是不同的,這就是所謂的千人千面。這個場景的實現依賴的是推薦系統後臺的使用者畫像,而使用者畫像就是大資料和機器學習演算法的典型應用,通過挖掘使用者的特徵,如性別、年齡、收入情況和愛好等特徵,推薦使用者可能購買的商品,做到個性化推薦。

到了這一步,我們終於把商品放到了購物車裡,開始下單。下單之前我們發現網銀賬戶中的錢不夠用了,想申請一些貸款。這個時候,我們發現有一個貸款額度,這個額度是如何計算的呢?這裡面涉及金融風控的問題,而金融風控也是根據機器學習的演算法來訓練模型並且計算出來的。

下單之後我們的商品就被安排配送了,目前除了少數邊遠地區,基本上5天之內就可以收到商品。這段時間包含了商品的包裝、從庫存發貨到中轉庫存、從低階倉庫到高階倉庫配送、向下分發。這麼多工序之所以能夠在短時間內完成,是因為倉儲在庫存方面已經提前做了需求量預測,提前在可能的需求地附近備貨,這套預測演算法也是建立在機器學習演算法基礎之上的。

我們的快遞員拿到貨物,開啟地圖導航,系統已經為他設計了配送的路徑,這個路徑避免了擁堵而且儘量把路線設計到最短距離,這也是通過機器學習演算法來計算的。快遞員走進門,我們拿到貨物後,發現衣服的尺碼不合適怎麼辦?開啟客服,輸入問題,然後我們發現可以瞬間得到回覆,因為這名客服人員可能並不是真的“客服人員”,只是一個客服機器人而已。智慧客服系統利用文字的語意分析演算法,可以精準地確定使用者的問題,並且給予相應問題的解答。同時,智慧客服還可以對使用者問題的語境進行分析,如果問題很嚴重需要賠償,如:“你的產品害我壞肚子了”這樣的問題會由客服機器人通過情感分析挑出來,交給專人處理。

如上所述,筆者簡單列舉了機器學習在網上購物中的幾大應用,這裡面涉及了很多智慧演算法,包括模型的訓練和預測、語義分析、文字情感分析、影象識別技術以及語音識別技術。我們可以看到,在網購這種最常見的場景下,機器學習演算法幾乎貫穿了全部流程。

當然,我們還可以列舉出非常多諸如上述例子,因為場景實在太多了,沒有辦法全部窮舉出來,這裡通過場景來切分把機器學習的一些高頻場景列舉如下。

  • 聚類場景:人群劃分和產品種類劃分等。
  • 分類場景:廣告投放預測和網站使用者點選預測等。
  • 迴歸場景:降雨量預測、商品購買量預測和股票成交額預測等。
  • 文字分析場景:新聞的標籤提取、文字自動分類和文字關鍵資訊抽取等。
  • 關係圖演算法:社交網路關係(Social Network Site,SNS)網路關係挖掘和金融風險控制等。
  • 模式識別:語音識別、影象識別和手寫字識別等。

上面列舉的應用只是機器學習演算法應用場景中的一小部分,其實隨著資料的積累,機器學習演算法是可以滲透到各行各業當中,並且在行業中發生巨大的作用。隨著資料智慧、資料驅動等思想的傳播,機器學習演算法正在成為一種普世的基礎能力向外輸出。我們可以預見未來隨著演算法和計算能力的發展,機器學習應該會在金融、醫療、教育、安全等各個領域有更深層次的應用。筆者特別期待機器學習演算法在破解基因密碼以及癌症攻破方面可以取得突破,同時無人車、增強現實(Augmented Reality,AR)等新概念、新技術的發展也需要依賴於機器學習演算法的發展。相信未來,機器學習演算法會真正做到顛覆生活改變人類命運。

1.3 機器學習基本概念

在開始機器學習的演算法流程介紹之前,因為機器學習是一個多學科交叉的學科,有很多類似於統計學的概念,但是在叫法上與傳統的統計學又有一定的區別,我們需要了解一些機器學習相關的基本概念,因為如果不明確這些概念的話,對於一些文獻的閱讀和理解會構成障礙。下面通過這一節的介紹幫助大家對於基礎的機器學習名詞和概念進行了解,首先介紹一下機器學習的基本流程,然後針對機器學習涉及的資料、演算法和評估這3個方面用到的基礎概念進行介紹。

1.3.1 機器學習流程

機器學習的過程就是一個數據流轉、分析以及得到結果的過程,在使用的過程中很多人花了很多時間在演算法的選擇或者調優上,但其實機器學習的每一個步驟都是至關重要的,介紹演算法的具體實現的資料已經比較豐富了,筆者希望花更多的篇幅來介紹資料的處理和整個機器學習流程的串聯。

機器學習的整個流程大致可以分為6個步驟,整個流程按照資料流自上而下的順序排列,分別是場景解析、資料預處理、特徵工程、模型訓練、模型評估、離線/線上服務(見圖1-5),下面來逐一介紹下這些步驟的基本功能。

圖1-5 資料探勘流程

(1)場景解析。場景解析就是先把整個業務邏輯想清楚,把自己的業務場景進行一個抽象,例如我們做一個廣告點選預測,其實是判斷一個使用者看到廣告是點選還是不點選,這就可以抽象成二分類問題。然後我們根據是不是監督學習以及二分類場景,就可以進行演算法的選擇。總的來說,場景抽象就是把業務邏輯和演算法進行匹配。

(2)資料預處理。資料預處理主要進行資料的清洗工作,針對資料矩陣中的空值和亂碼進行處理,同時也可以對整體資料進行拆分和取樣等操作,也可以對單欄位或者多欄位進行歸一化或者標準化的處理。資料預處理階段的主要目標就是減少量綱和噪音資料對於訓練資料集的影響。

(3)特徵工程。特徵工程是機器學習中最重要的一個步驟,這句話一點都沒有錯。特別是目前隨著開源演算法庫的普及以及演算法的不斷成熟,演算法質量並不一定是決定結果的最關鍵因素,特徵工程的效果從某種意義上決定了最終模型的優劣。通過一個例子說明一下特徵工程的作用,2014 年某網際網路巨頭舉辦了一場大資料競賽,參賽隊伍在 1000 個以上,到最後,這裡面幾乎所有的參賽隊伍都用了相同的一套演算法,因為演算法的優劣是比較容易評判的,不同演算法的特性是不一樣的,而且可供選擇的演算法種類是有限的。但是特徵的選取和衍生卻有極大的不定性,100 個人眼中可能有 100 種不同的特徵,所以這種大賽到了後期,往往大家比拼的就是特徵選取的好壞。在演算法相對固定的情況下,可以說好特徵決定了好結果。

(4)模型訓練。如圖1-6所示的“邏輯迴歸二分類”元件表示的是演算法訓練過程,訓練資料經過了資料預處理和特徵工程之後進入演算法訓練模組,並且生成模型。在“預測”元件中,讀取模型和預測集資料進行計算,生成預測結果。

圖1-6 模型訓練

(5)模型評估。機器學習演算法的計算結果一般是一個模型,模型的質量直接影響接下來的資料業務。對於模型的成熟度的評估,其實就是對於整套機器學習流程的評估。

(6)離線/線上服務。在實際的業務運用過程中,機器學習通常需要配合排程系統來使用。具體的案例場景如下:每天使用者將當日的增量資料流入資料庫表裡,通過排程系統啟動機器學習的離線訓練服務,生成最新的離線模型,然後通過線上預測服務(通常通過Restful API,傳送資料到伺服器的演算法模型進行計算,然後返回結果)進行實時的預測。具體架構如圖1-7所示。

圖1-7 機器學習服務架構

利用這種架構就實現了離線訓練和線上預測的結合,串聯了從離線到線上的整個業務邏輯。

1.3.2 資料來源結構

前面已經介紹了機器學習的基本流程,下面將針對機器學習的資料結構進行介紹。如果把機器學習演算法比作一個數據加工場,那麼進入工廠的資料就是被演算法用來加工的原材料,機器學習演算法需要的資料是什麼樣結構的呢?如果經常關注大資料相關的文章,基本會聽說過“結構化資料”和“非結構化資料”這兩個詞,當然這裡面還能衍生出“半結構化資料”,下面分別介紹一下這幾種資料的結構。

(1)結構化資料。結構化資料是指我們在日常資料庫處理中經常看到的日誌類資料結構,是以矩陣結構儲存在資料庫中的資料,可以通過二維表結構來顯示,如圖1-8所示。

圖1-8 結構化資料示例

結構化資料主要由兩個部分組成,一個部分是每個欄位的含義,也就是圖1-8中的age、sex、cp等欄位頭,另一個部分是每個欄位的具體數值。通常來講,機器學習演算法處理的資料都是結構化的資料,因為機器學習需要把資料帶入矩陣去做一些數學運算,結構化資料原生是以矩陣形態儲存的,所以機器學習演算法通常是隻支援結構化資料的。

結構化資料中還有兩個非常重要的概念需要介紹一下,即特徵(Feature)和目標列(Label)。這是機器學習演算法中最常出現的兩個名詞,其中特徵表示的是資料所描述物件的屬性,如用一組資料來形容人,那麼這個人的身高、體重、性別和年齡都是特徵。在結構化資料的資料集中,每一列資料通常就對應一個特徵。

目標列表示的是每一份資料的打標結果,因為前面也介紹過,機器學習的原理其實是從歷史資料中來學習經驗,目標列表示的是這一組資料的結果。例如,我們想通過一份體檢資料來預測物件是否有心臟病,需要先通過成千上萬份的訓練資料來生成模型,這成千上萬份的訓練資料需要打標,也就是說機器要事先知道什麼樣體檢指標的人患病了,什麼樣的人沒有患病,這樣才能學習出預測模型。通過一個例子來說明,如圖1-9所示為一份心臟病預測需要的資料結果,其中框起來的欄位表示的是物件是否患病,這一列是目標列。其他3個欄位age、sex和cp描述的是物件的特徵,是特徵列。

(2)半結構化資料。半結構化資料是指按照一定的結構儲存,但不是二維的資料庫行儲存形態的資料。比較典型的半結構化資料就是XML副檔名的儲存資料,如圖1-10所示。

圖1-9 目標列說明



圖1-10 半結構化資料

另一種半結構化資料就是在資料表中,某些欄位是文字型的,某些欄位是數值型的。見表1-1。

表1-1 半結構化資料

圖1-10 半結構化資料

另一種半結構化資料就是在資料表中,某些欄位是文字型的,某些欄位是數值型的。見表1-1。

表1-1 半結構化資料




ID

Occupation

Income

小李

老師

241

小王

廚師

521

小劉

司機

421

小方

運動員

23636

半結構化資料常用於一些資料的傳遞,但是在機器學習演算法相關的應用方面還有一定距離,需要做資料轉換把半結構化資料轉為結構化資料來進行操作。

(3)非結構化資料。非結構化資料的資料探勘一直以來是機器學習領域的熱點話題,特別是隨著深度學習的發展,目前對於非結構化資料的處理似乎找到了方向。典型的非結構化資料就是影象、文字或者是語音檔案。這些資料不能以矩陣的結構儲存,目前的做法也是通過把非結構化資料轉為二進位制儲存格式,然後通過演算法來挖掘其中的資訊。第6章和第7章將詳細介紹如何使用深度學習演算法實現非結構化資料的處理。

圖1-10 半結構化資料

另一種半結構化資料就是在資料表中,某些欄位是文字型的,某些欄位是數值型的。見表1-1。

表1-1 半結構化資料


ID

Occupation

Income

小李

老師

241

小王

廚師

521

小劉

司機

421

小方

運動員

23636

半結構化資料常用於一些資料的傳遞,但是在機器學習演算法相關的應用方面還有一定距離,需要做資料轉換把半結構化資料轉為結構化資料來進行操作。

(3)非結構化資料。非結構化資料的資料探勘一直以來是機器學習領域的熱點話題,特別是隨著深度學習的發展,目前對於非結構化資料的處理似乎找到了方向。典型的非結構化資料就是影象、文字或者是語音檔案。這些資料不能以矩陣的結構儲存,目前的做法也是通過把非結構化資料轉為二進位制儲存格式,然後通過演算法來挖掘其中的資訊。第6章和第7章將詳細介紹如何使用深度學習演算法實現非結構化資料的處理。


以上就是對於真實業務場景下需要處理的3類資料結構的介紹。機器學習演算法對於結構化資料的支援是比較好的,對於半結構化資料和非結構化資料,在真實的業務場景下,通常是先把這兩類資料做轉化,然後才通過演算法來進行資料探勘。關於非結構化資料轉為結構化資料的方法在第4章也有相關介紹。

1.3.3 演算法分類

上面對於機器學習的流程和資料來源結構都進行了介紹,下面對於演算法的分類進行一個簡單的說明。機器學習演算法包含了聚類、迴歸、分類和文字分析等幾十種場景的演算法,常用的演算法種類為 30 種左右,而且還有很多的變形,我們將機器學習分為 4 種,分別是監督學習、無監督學習、半監督學習和增強學習。

(1)監督學習。監督學習(Supervised Learning),是指每個進入演算法的訓練資料樣本都有對應的期望值也就是目標值,進行機器學習的過程實際上就是特徵值和目標佇列對映的過程。例如,我們已知一隻股票的歷史走勢以及它的一些公司盈利、公司人數等資訊,想要預測這隻股票未來的走勢。那麼在訓練演算法模型的過程中,就是希望通過計算得到一個公式,可以反映公司盈利、公司人數這些資訊對於股票走勢的影響。通過過往的一些資料的特徵以及最終結果來進行訓練的方式就是監督學習法。監督學習演算法的訓練資料