天天看點

預測分析:R語言實作導讀

<b>前  言</b>

<b></b>

預測分析以及更一般意義上的資料科學目前正處于被追捧的熱潮中,因為像垃圾郵件過濾、單詞補全和推薦引擎這樣的預測性技術已經被廣泛運用于日常生活。這些技術現在不僅越來越被我們所熟悉,還赢得了我們的信任。在計算機處理能力和軟體方面(例如r語言及其大量專用的擴充包)的發展産生了這樣的局面:使用者經過教育訓練就可以使用這些工具,而無需具備統計學的進階學位,也不需要使用公司或大學實驗室專用的硬體。技術的成熟度和基礎軟硬體的可用性結合起來,讓很多該領域的從業者倍感興奮,他們感到可以為自己的領域和業務設計一些能産生重要影響的工具,事實也确實如此。

與此同時,很多新進入該領域的人士很快發現其中有很多陷阱需要克服。實際上,沒有哪個學位足以把一位學生或從業者訓練為成功的預測模組化者。該領域依賴于很多學科,例如計算機科學、數學和統計學。目前,進入該領域的人們不僅隻在其中的一門學科有比較強的背景,還往往會比較專精于其他學科。在給研究所學生和從業者們講授了有關本書材料的幾次課程之後,我發現學員們反複表達的兩個最大擔憂是對程式設計和數學的恐懼。有意思的是,對這兩者的表達幾乎總是互斥的。預測分析學實際上是一種實踐性的學科,但同時也是一種具備較強理論基礎的學科,這些理論基礎的知識對于從業者是很關鍵的。是以,掌握預測分析需要一系列不同的技能,從編寫良好的軟體到實作一種新技術或對資料進行預處理,再到了解某個模型的假設條件,如何有效地訓練該模型,如何對該模型出現的問題進行診斷,以及如何調整模型的參數以獲得更好的結果。

讨論到這裡,很自然地會反向思考預測分析學作為一個領域實際會覆寫的内容。事實上,該領域和機器學習、資料挖掘、商業分析學、資料科學等其他相關領域的邊界是比較模糊的。本書中會用到的定義非常寬泛。對于本書的主題而言,預測分析學是一個領域,它利用資料建立模型來預測未來我們感興趣問題的結果。當然,它和機器學習領域會有很大的重疊,機器學習更多地研究從資料中學習的程式和算法。這種重疊的情況對于資料挖掘(以從資料中提取知識和模式為目标)也同樣成立。資料科學正在迅速成為覆寫所有這些領域的綜合術語,它還包括了其他主題,例如呈現資料分析結果的資訊可視化,圍繞在實際環境中部署模型的業務概念,以及資料管理。本書會着重于機器學習,但我們不會覆寫學習可行性的理論探索,也不會講解着眼于從無特定預測目标的資料中尋找模式和聚類的無監督學習方法。取而代之,我們會探索像時間序列這樣的一些主題,通常在機器學習的教材裡不會講解它們。

無論對于學習預測分析學還是解決實際環境中的問題,r語言都是一個優秀的平台。它是一個開源項目,有一個持續快速增長的使用者社群。在編寫本書時,它和python是全世界資料科學家最常用的兩種語言。它有很多适用于不同模組化技術和應用領域的擴充包,其中很多可以通過連接配接到comprehensive r archive network (cran)從r語言平台本身直接擷取。該語言還有很多線上資源,從教程到線上課程都包含在内。我們尤其要提到優秀的交叉驗證式論壇(http://stats.stackexchange.com/)以及r-bloggers 網站(http://www.r-bloggers.com/),該網站包含了大量來自不同部落格的關于r語言應用的文章。對于那些對r語言有點生疏的讀者,我們提供了一個免費線上教程章節,它是從我們在aueb學生的課程講義演化而來的。

本書的主要任務是在(強調直覺及實踐而不是理論的)低端入門教程和(專注于數學、細節和嚴謹性的)高端學術教材之間的鴻溝上架起橋梁。另一個同等重要的目标是給讀者灌輸一些良好的實踐經驗,比如學習如何适當地測試和評估一個模型。我們還要強調一些重要的概念,例如偏誤-方差權衡和過拟合,這些概念在預測模組化中是普遍存在的,并會在不同模型中以多種形式反複出現。

從程式設計的角度來說,雖然我們假定你已經熟悉r語言,不過還是會詳細解釋并讨論每個代碼示例,以便讀者提高他們的自信心,循序漸進。盡管如此,在學習的過程中,或者至少在轉到下一章之前,實際運作代碼的重要性是如何強調都不為過的。為了盡可能讓這個過程順利進行,我們已經為教材中的所有章節提供了代碼檔案,其中包含了教材中所有的代碼示例。此外,我們還在很多地方編寫了自己對于特定技術的簡單實作方法。典型的兩個示例是第4章裡的口袋感覺器算法和第7章的adaboost自适應增強方法。在某種程度上,這麼做是為了鼓勵使用者學習如何編寫他們自己的函數,而不是完全依賴于已有的實作方法,因為并不是所有方法都有現成的函數可用。

重制能力是資料分析的一項關鍵技能,而且它并不限于教育領域。是以,我們大量使用了可自由擷取的資料集并盡力在需要随機數生成器的地方運用特定的種子值。最後,我們盡可能嘗試利用相對小規模的資料集,以確定讀者在閱讀本書時運作代碼不需要等待太長的時間或被迫尋求更好的硬體。我們要提醒你,在真實世界裡,耐心是一種非常有益的美德,因為你感興趣的大部分資料集會比我們學習本書時用到的更大。

每章的結尾是兩個或多個實際的模組化案例,每章的開始則是一些了解新模型或技術所必需的理論和背景知識。雖然不避諱用數學解釋重要的細節,但是我們在這方面很慎重,相關的介紹适可而止,以確定讀者能了解相關的基本概念就可以了。這樣做符合本書的理念,即彌補入門教程和涉及更多細節的學術教材之間的差距。具備高中數學背景知識的讀者可以确信,他們能夠借助基本的數學知識完整地學習本書的所有内容。學習所需的關鍵技能是簡單微積分(例如簡單微分)、機率論的關鍵概念(例如均值、方差、相關系數),以及重要的機率分布(例如二項分布和正态分布)。雖然我們不提供這方面的教程,但在前面幾章我們的确是循序漸進的。為了照顧那些數學愛好者的需求,我們經常會以提示的形式提供額外的技術細節,并給出一些參考資料作為所讨論内容的自然延伸。

有時候,我們需要給出某個概念的直覺解釋,以節省篇幅,避免另辟一章專門讨論不必要的純理論。在這麼做的時候(例如對第4章裡的反向傳播算法),我們會確定前後的銜接性,讓讀者能具備堅實的基礎知識來進一步掌握更詳細的内容。同時,還會給出精心挑選的參考文獻,其中很多都是可讀性好而且可以免費擷取的文章、論文或線上教材。當然,我們會在任何必要的地方引用重要的教材。

本書沒有練習題,但是鼓勵你把好奇心發揮到極緻。好奇心對于預測模組化者來說是一種巨大的天賦。我們從中擷取了分析資料的很多網站上都有我們沒有研究到的其他大量資料集。我們偶爾還會講解如何建立人工資料來示範某個特定技術背後的概念驗證過程。很多用來建立和訓練模型的r語言函數都有一些其他調優參數是本書中沒有時間講解的。用到的擴充包也往往會包含和我們講解的函數相關的其他函數,正如用到的擴充包本身也往往會有其他替代包可用。所有這些都是進一步研究和實驗的途徑。要掌握預測分析學,認真學習和個人的探索及練習都是同等重要的。

學生在該領域的一個普遍訴求,是用額外的執行個體來模拟有經驗的模組化者針對資料集所遵循的實際過程。在現實中,可信的模拟過程從分析開始後可能會持續很多小時。這是因為花在預測模組化上的大部分時間都用來研究資料、嘗試新特征和預處理步驟,以及對結果試驗不同的模型。簡而言之,正如我們在第1章中将要看到的,探索、試驗和誤差是有效分析的關鍵組成部分。編寫一本講解關于每個資料集的錯誤或不成功方案的書是完全不現實的。相反,強烈推薦讀者将本書中的所有資料分析過程視為改進的起點,并自己延續這個過程。好的思路是嘗試把其他章節講解的技術運用于特定資料集,以便觀察其他方法是否有效。從簡單地給某個輸入特征運用不同的變換方式到采用另一章裡講解的完全不同的模型,任何嘗試都是可以的。

作為最後一個提示,我們要指出,建立美觀規範的圖來呈現資料分析結果是一項重要的技能,尤其是在職場中。雖然r語言的基礎繪圖能力覆寫了基本的需求,但它往往缺乏美觀性。是以,除了用分析代碼中的某些函數産生的特定圖形之外,我們會用ggplot2包繪圖。雖然我們不提供這方面的教程,但是本書中包括的所有産生繪圖的代碼都在配套的代碼檔案裡,希望使用者可以從中受益。ggplot2包的一個很有用的線上參考資料是“the cookbook for r”(http://www.cookbook-r.com/graphs)網站上有關圖形的章節。

本書内容

第1章會講解統計模型的通用語言和在對這些模型進行分類時所依據的一些重要差别,由此開啟我們的學習之旅。本章的亮點是對預測模組化過程的探索,我們會通過它展示第一個模型,即k近鄰(k nearest neighbor,knn)模型。

第2章會介紹預測數量值最簡單且最著名的方法。本章的重點是了解線性回歸的假設,以及一些可以用來評估訓練模型品質的診斷工具。此外,本章還會涉及正則化的重要概念,它可以用于避免預測模型常見的一種瑕疵—過拟合(over fitting)。

第3章會對前一章裡線性模型的思想進行擴充,方法是引入廣義線性模型的概念。雖然這類模型有很多示例,但本章的重點是邏輯回歸這樣一個針對分類問題的流行方法。我們還會探讨該模型擴充到針對多類别的情況,發現該方法對于二進制分類(binary classification)的效果最好。

第4章會講解能夠處理回歸及分類兩種任務的一種仿生模型。神經網絡有很多種,而本章會重點關注多層感覺網絡(multilayer perceptron network)。神經網絡是複雜的模型,本章的主要關注點是了解在訓練過程中起作用的一組不同的配置和優化參數。

第5章會通過學習支援向量機來掌握非線性模型的問題。在這部分,我們會通過利用最大邊緣分離(maximum margin separation)來嘗試以幾何方式拟合我們的訓練資料,以探索對分類問題進行思考的另一種方法。本章還會介紹交叉驗證(cross-validation)這一評估和優化模型的基本技術。

第6章講解決策樹(decision tree)這樣另一類已經成功運用于回歸和分類等問題的模型。決策樹的類型有很多種,本章會介紹一批不同的訓練算法,例如cart和c5.0。我們還可以看到,樹形方法具有獨特的優點,例如内建的特征選擇、支援缺失資料和類别變量,以及非常易于解釋的輸出。

第7章不同于以往章節,本章會采用一種迂回方式,不會講解新類型的模型,而是嘗試解答如何把不同模型有效地結合起來的問題。我們會講解裝袋(bagging)和增強(boosting)這兩種著名的技術,并會把随機森林(random forest)作為樹的裝袋的一種特例進行介紹。

第8章講解的是機器學習研究領域的一個活躍領域,即機率圖模型。這些模型通過一個圖結構把變量之間的條件性獨立關系(conditional independence relation)進行編碼,已經成功運用于從計算機視覺到醫療診斷等很多領域的問題中。本章會學習它的兩種主要表現形式,即樸素貝葉斯(na閱讀準備

運作本書代碼的唯一硬性要求就是安裝r。它可以從http://www.r-project.org/自由擷取,并可以在所有主流作業系統上運作。本書中的代碼已經在r的3.1.3版本上測試過。

所有的章節都至少會引入一個r基礎安裝包裡沒有預裝的新擴充包。我們不會在教材中專門講解安裝r包的過程,但是如果某個包目前沒有安裝在你的系統裡,或它需要更新,你就可以利用install.packages()函數來安裝它。例如,下面的指令會安裝tm包:

我們使用的所有包都可以在cran上擷取。下載下傳和安裝它們以及擷取我們在執行個體中使用的開源資料集都需要internet連接配接。最後,雖然不是絕對必需,但我們要推薦你養成利用內建開發環境(integrated development environment,ide)進行r語言程式設計的習慣。有個很棒的ide是rstudio (http://www.rstudio.com/),它是開源的。

讀者人群

本書是為預測模組化相關領域的從業者中的新秀和老手編寫的。本書大部分的内容已經在研究所學生、專業人士和r語言教育訓練的授課中使用過,是以它在策劃的時候就已經把這些學員的情況都考慮到了。讀者必須熟悉r語言,不過即便是那些從來沒有接觸過這種語言的人,也能夠通過閱讀線上教程的章節掌握必要的背景知識。不熟悉r語言的讀者至少要接觸過某些程式設計語言,例如python。那些具備matlab背景的人會發現切換到r語言相當容易。正如之前提到的,本書對數學的要求是非常适度的,隻需要中學數學的某些元素,例如均值和方差的概念及基礎的微分。

本書約定

在本書中,你會看到用來區分不同類型資訊的多種文本樣式。這裡是一些關于這些樣式的示例及其含義的解釋。

代碼段的樣式設定如下:

新術語和重要的關鍵字會用粗體顯示。

警告或重要的注解會出現在像這樣的一個方框内部。

提示和小技巧的樣式是這樣的。

下載下傳樣例代碼

你可以從http://www.packtpub.com通過個人賬号下載下傳你所購買的所有packt書籍的樣例代碼檔案。如果你從其他地方購買了本書,你可以通路http://www.packtpub.com/support并完成賬号注冊,以便直接通過電子郵件獲得相關檔案。

你也可以通路華章圖書官網http://www.hzbook.com/,通過注冊并登入個人賬号,下載下傳本書中的源代碼。

緻謝

每段偉大的探險背後都有一個精彩的故事,本書的寫作也不例外。正是因為有了很多人的貢獻本書才得以面世。我要感謝我在aueb教過的很多學生,他們的投入和支援簡直是鋪天蓋地的。可以确信的一點是,我從他們那裡學到的東西和他們從我這裡學到的一樣多,甚至更多。我還要感謝damianos chatziantoniou策劃在希臘開設領先的研究所學生資料科學課程。workable公司是一個大熔爐,在這裡我能和才華橫溢且激情澎湃的工程師們并肩工作,從事有益于全球商業的激動人心的資料科學項目。為此,我要感謝我的同僚們,特别是兩位點石成金的公司創始人nick和spyros。

我要感謝subho、govindan、edwin和packt出版社所有同仁的專業和耐心。我要對很多給予我鼓勵和激勵的朋友表達我永恒的感謝。我的家人和親友們在本項目中給予了我不可思議的支援。特别地,我要感謝我的父親libanio,他鼓勵我從事科學事業,還有我的母親marianthi,她對我的信心一直遠遠超過其他任何人。感謝我的妻子despoina耐心而堅定地站在我一邊,即使這本書讓我在她首次懷孕的時候難以陪伴在旁。最後也同樣重要的是,在本書寫作的收尾階段,我的小女兒在我身邊安睡并天真無邪地守望着我。她幫助我的方式是無法用語言描述的。

<b>目  錄</b>

第1章 準備預測模組化

<a href="https://yq.aliyun.com/articles/81950" target="_blank">1.1 模型</a>

<a href="https://yq.aliyun.com/articles/81968/" target="_blank">1.2 模型的類型</a>

<a href="https://yq.aliyun.com/articles/81979/" target="_blank">1.3 預測模組化的過程</a>

<a href="https://yq.aliyun.com/articles/81987" target="_blank">1.4  性能衡量名額</a>

<a href="https://yq.aliyun.com/articles/82000/" target="_blank">1.5 小結</a>

第2章 線性回歸

<a href="https://yq.aliyun.com/articles/82015/" target="_blank">2.1 線性回歸入門</a>

<a href="https://yq.aliyun.com/articles/82026/" target="_blank">2.2 簡單線性回歸</a>

<a href="https://yq.aliyun.com/articles/82030/" target="_blank">2.3 多元線性回歸</a>

<a href="https://yq.aliyun.com/articles/82036" target="_blank">2.4 評估線性回歸模型</a>

<a href="https://yq.aliyun.com/articles/82039/" target="_blank">2.5 線性回歸的問題</a>

<a href="https://yq.aliyun.com/articles/82042/" target="_blank">2.6 特征選擇</a>

<a href="https://yq.aliyun.com/articles/82045/" target="_blank">2.7    小結</a>

第3章 邏輯回歸61

3.1 利用線性回歸進行分類61

3.2 邏輯回歸入門63

3.2.1 廣義線性模型63

3.2.2 解釋邏輯回歸中的系數64

3.2.3 邏輯回歸的假設65

3.2.4 最大似然估計65

3.3 預測心髒病66

3.4 評估邏輯回歸模型69

3.4.1 模型的偏差70

3.4.2 測試集的性能73

3.5 利用lasso進行正則化73

3.6 分類名額74

3.7 二進制邏輯分類器的擴充76

3.7.1 多元邏輯回歸76

3.7.2 有序邏輯回歸80

3.8 小結83

第4章 神經網絡84

4.1 生物神經元84

4.2 人工神經元85

4.3 随機梯度下降86

4.3.1 梯度下降和局部極小值88

4.3.2 感覺器算法88

4.3.3 線性分離91

4.3.4 邏輯神經元92

4.4 多層感覺器網絡92

4.5 預測建築物的能源效率95

4.6 重新進行玻璃類型預測99

4.7 預測手寫數字102

4.8 小結106

第5章 支援向量機108

5.1 最大邊緣分類108

5.2 支援向量分類111

5.3 核和支援向量機113

5.4 預測化學品的生物降解115

5.5 交叉驗證118

5.6 預測信用評分120

5.7 用支援向量機進行多類别分類123

5.8 小結123

第6章 樹形方法124

6.1 樹形模型的直覺印象124

6.2 訓練決策樹的算法126

6.2.1 分類和回歸樹126

6.2.2 回歸模型樹131

6.2.3 cart分類樹131

6.2.4 c5.0133

6.3 在合成的二維資料上預測類别歸屬關系134

6.4 預測紙币的真實性136

6.5 預測複雜的技能學習138

6.5.1 在cart樹裡對模型參數進行調優140

6.5.2 樹模型中的變量重要性141

6.5.3 回歸模型樹實用示例142

6.6 小結143

第7章 內建方法144

7.1 裝袋144

7.1.1 邊緣和袋外觀測資料145

7.1.2 用裝袋預測複雜技能學習146

7.1.3 用裝袋預測心髒病146

7.1.4 裝袋的局限性150

7.2 增強151

7.3 預測大氣中伽馬射線的輻射152

7.4 利用增強算法預測複雜技能學習156

7.5 随機森林157

7.6 小結159

第8章 機率圖模型161

8.1 圖論入門161

8.2 貝葉斯定理163

8.3 條件性獨立163

8.4 貝葉斯網絡164

8.5 樸素貝葉斯分類器165

8.6 隐馬爾可夫模型172

8.7 預測啟動子基因序列174

8.8 預測英語單詞裡的字母特征179

8.9 小結182

第9章 時間序列分析184

9.1 時間序列的基本概念184

9.2 一些基本的時間序列185

9.2.1 白噪聲185

9.2.2 随機漫步187

9.3 平穩性188

9.4 平穩時間序列模型189

9.4.1 移動平均模型189

9.4.2 自回歸模型192

9.4.3 自回歸移動平均模型193

9.5 非平穩時間序列模型194

9.5.1 整合自回歸移動平均模型194

9.5.2 自回歸條件異方差模型195

9.5.3 廣義自回歸條件異方差模型195

9.6 預測強烈地震196

9.7 預測猞猁的誘捕199

9.8 預測外彙匯率200

9.9 其他時間序列模型202

9.10 小結203

第10章 主題模組化204

10.1 主題模組化概況204

10.2 隐含狄式分布205

10.2.1 狄式分布205

10.2.2 生成過程208

10.2.3 拟合lda模型209

10.3 對線上新聞報道的主題進行模組化210

10.3.1 模型穩定性215

10.3.2 找出主題數量216

10.3.3 主題分布217

10.3.4 單詞分布219

10.3.5 lda擴充模型220

10.4 小結220

第11章 推薦系統222

11.1 評分矩陣222

11.2 協同過濾225

11.2.1 基于使用者的協同過濾225

11.2.2 基于商品的協同過濾228

11.3 奇異值分解228

11.4 r語言和大資料231

11.5 預測電影和笑話的推薦232

11.6 加載和預處理資料233

11.7 對資料進行探索234

11.7.1 評估二進制的top-n推薦236

11.7.2 評估非二進制的top -n推薦239

11.7.3 評估每種預測方法241

11.8 推薦系統的其他方法242

11.9 小結243

繼續閱讀