Preface 前 言
世界各地的統計學家和分析師正面臨著處理許多復雜統計分析項目的迫切問題。由于人們對數據分析領域的興趣日益增加,所以R語言提供了一個免費且開源的環境,非常適合學習和有效地利用現實世界中的預測建模方案。隨著R語言社區的不斷發展及其大量程序包的不斷增加,它具備了解決眾多實際問題的強大功能。
R編程語言誕生已經有數十年了,它已經變得非常知名,不但被社區的科學家而且被更廣泛的開發者社區所熟知。它已經成長為一個強大的工具,可以幫助開發者在執行數據相關任務時生成有效且一致的源代碼。由于R語言開發團隊和獨立貢獻者已經創建了良好的文檔,所以使用R語言編程并不困難。
進而,你可以使用來自R語言官方網站的程序包。如果你想不斷提高自己的專業水平,那么你可能需要閱讀在過去幾年中已經出版的書籍。你應該始終銘記:創建高水平、安全且國際兼容的代碼比初始創建的第一個應用程序更加復雜。
本書的目的是幫助你處理在復雜的統計項目中遇到的一系列可能比較困難的問題。本書的主題包括:學習在運行R語言程序時,如何使用R代碼段處理數據,挖掘頻繁模式、關聯規則和相關規則。本書還為那些具有R語言基礎的讀者提供了成功創建和自定義最常用數據挖掘算法的技能和知識。這將有助于克服困難,并確保在運用R語言公開可用的豐富程序包開發數據挖掘算法時,R編程語言能夠得到最有效的使用。
本書的每一章是獨立存在的,因此你可以自由地跳轉到任何一章,學習你覺得自己需要對某個特定的話題進行更加深入了解的章節。如果你覺得自己遺漏了一些重要的知識,你可以回顧前面的章節。本書的組織方式有助于逐步拓展你的知識框架。
你需要了解如何編寫不同的預測模型、流數據和時間序列數據的代碼,同時你還會接觸到基于MapReduce算法(一種編程模型)的解決方案。學完本書,你將會為自己所具備的能力(知道哪種數據挖掘算法應用于哪種情況)而感到自信。
我喜歡使用R編程語言進行多用途數據挖掘任務的開發與研究,我非常高興能與大家分享我的熱情和專業知識,幫助大家更有效地使用R語言,更舒適地使用數據挖掘算法的發展成果與應用。
本書主要內容第1章闡述數據挖掘的概要知識,數據挖掘與機器學習、統計學的關系,介紹數據挖掘基本術語,如數據定義和預處理等。
第2章包含使用R語言編程時,學習挖掘頻繁模式、關聯規則和相關規則所需的高級且有趣的算法。
第3章幫助你學習使用R語言編寫經典分類算法,涵蓋了應用于不同類型數據集的多種分類算法。
第4章講述更多的分類算法,如貝葉斯信念網絡、支持向量機(SVM)和k近鄰算法。
第5章講述如何使用流行與經典的算法進行聚類,如k均值、CLARA和譜算法。
第6章介紹與當前行業熱點話題相關的高級聚類算法的實現,如EM、CLIQUE和DBSCAN等。
第7章介紹如何應用經典和流行算法來檢測現實世界案例中的異常值。
第8章運用最流行、最經典以及一流的算法來講解流數據、時間序列和序列數據挖掘這3個熱點話題。
第9章介紹圖挖掘和社交挖掘算法的概要及其他有趣的話題。
第10章介紹應用領域中最流行算法的有趣應用。
附錄包含算法和數據結構的列表以便幫助你學習數據挖掘。
學習本書的準備知識任何一臺裝有Windows、Linux或者Mac OS系統的個人計算機都可以運行本書給出的代碼示例。本書所使用的軟件都是開源的,可以從http://www.r-project.org/上免費獲取。
讀者對象本書適合對R語言和統計學具有基本知識的數據科學家、定量分析師和軟件工程師。本書假定讀者只熟悉非常基本的R語言知識,如主要的數據類型、簡單的函數和如何來回移動數據。不需要先前熟悉數據挖掘軟件包。但是,你應該對數據挖掘的概念和過程有基本的認知。
即使你對于數據挖掘完全是一個新人,你也能夠同時掌握基本和高級的數據挖掘算法的實現。你將學習如何從各種數據挖掘算法中選擇合適的算法,將這些算法應用于現實世界可用的大多數數據集中的某些特定數據集中。
約定本書中,你將發現多種文字印刷格式,它們用于對不同類型的信息進行區分。下面是關于這些格式的一些例子以及它們的含義。
文本中的代碼、數據庫表名、文件夾名、文件名、文件擴展名、路徑名、虛擬URL、用戶輸入和Twitter ID如下所示:“我們可以通過使用include指令來包含其他的上下文。”
新的術語和重要詞用粗體標示。例如,在屏幕上、菜單中或者對話框中看到的詞將這樣出現在文本中:“單擊Next按鈕進入下一個界面。”
警告或者重要的說明將會出現在這樣的圖標后面。
提示或技巧將會出現在這樣的圖標后面。
讀者反饋讀者的反饋始終是受歡迎的。讓我們知道你如何看待本書——你喜歡哪些內容或者你可能不喜歡哪些內容。讀者的反饋對于我們制定使讀者真正獲得最大效用的主題是十分重要的。
可以通過發送電子郵件至郵箱feedback@packtpub.com,并在電子郵件的主題中提及書名來給我們提供意見。
如果你對于某個主題有專長,或者你有興趣編寫一本書或協助完成一本書,可以到網站www.packtpub.com/authors看一看我們的撰稿指南。
客戶支持既然你現在自豪地擁有了一本Packt書,那么我們可以做很多事來幫助你充分利用你購買的書籍。
下載示例代碼你可以從你在http://www.packtpub.com網站的賬戶上下載所有你已經購買的Packt書的示例代碼。如果你在其他地方購買本書,你可以訪問http://www.packtpub.com/support網站并注冊,我們將通過電子郵件直接給你發送文件。你也可以在網站https://github.com/batermj/learning-data-mining-with-r找到本書的代碼文件。
勘誤表雖然我們已經盡力確保書中內容的準確性,但錯誤難免會發生。如果你在我們的某一本書中發現錯誤(可能是文本或者代碼中的錯誤)并向我們報告錯誤,我們將不勝感激。由此,你可以使其他讀者免于困惑并幫助我們改進該書的后續版本。如果你發現任何錯誤,請通過訪問http://www.packtpub.com/submit-errata網站,選擇相應圖書,單擊errata submission form(勘誤提交表單)的鏈接,并輸入錯誤的詳細信息以便報告給我們。一旦你的錯誤得到驗證,你的提交將被接受并上傳到我們的網站,或者添加到現有的勘誤表中,列于該標題下的勘誤表部分。任何現有的勘誤表均可從http://www.packtpub.com/support網站上選擇你所需要的標題進行查看。
盜版行為因特網上版權材料的盜版行為是所有媒介一直存在的問題。在Packt,我們非常重視對版權和許可證的保護。如果你在網絡上遇到任何形式非法復制我們著作的行為,請立刻向我們提供位置地址或者網站名稱以便我們能夠尋找補救方法。
我們的聯系方式是copyright@packtpub.com,請一并附上關于涉嫌盜版材料的鏈接。
我們非常感謝你對我們的作者以及我們為你帶來有價值內容的能力的保護。
問題如果你對本書有任何方面的問題,可以聯系我們(questions@packtpub.com),我們將竭盡所能幫助你解決。
Acknowledgements致 謝
感謝我的妻子Zurypa Dawletkan和兒子Bakhtiyar。他們支持我利用多個周末和夜晚使得本書得以出版。
我也要感謝Luke Presland,給予我機會來撰寫這本書。十分感謝Rebecca Pedley和Govindan K,你們對本書的貢獻是巨大的。感謝Jalasha D’costa和其他技術編輯及團隊為該書出版付出的努力,使得本書看起來還不錯。同時,感謝組稿編輯和技術審校者。
我也要謝謝我的兄弟Bolat Makhabel博士(LinkedIn: BOLATMJ),他給我提供了本書英文版封面的照片,他具有醫學背景。照片中的植物名為Echinops(植物學的拉丁名字),哈薩克語稱為Lahsa,在中國稱為藍刺頭。這種植物用于傳統的哈薩克醫藥,也是我兄弟研究的一部分。
盡管我的專業知識來源于不斷的實踐,但它也來源于我的母校(清華大學)和戴梅萼教授、趙雁南教授、王家欽教授、Ju Yuma教授以及其他眾多老師為我打下的堅實基礎。他們的精神鼓勵我在計算機科學和技術領域繼續努力。我要感謝我的岳父母Dawletkan Kobegen和Burux Takay,感謝他們照顧我的兒子。
最后,我要對我的姐姐Aynur Makhabel和姐夫Akimjan Xaymardan表達我最大的敬意。
譯 者 序
隨著互聯網中文檔的快速積累,在網絡中獲取一些有用的信息變得愈發困難。本書收集了數據挖掘的一些最常用算法,首先對這些算法進行簡單描述,然后給出了這些算法的常見應用背景,以方便數據挖掘用戶學習和參考。對于關聯規則、分類、聚類分析、異常值檢測、數據流挖掘、時間序列、圖形挖掘、網絡分析、文本挖掘和網絡分析等流行的數據挖掘算法,給出了較為詳盡的介紹,并且給出了這些算法的偽代碼和R語言實現。
本書提供了應用最流行的數據挖掘算法解決預測模型問題的可行策略,讀者可以從中更好地理解主流的預測模型,也可以學習數據挖掘的實際經驗。
本書第1章介紹數據挖掘、機器學習和數據預處理的基本概念;第2章介紹頻繁模式挖掘、關聯規則和相關性;第3章和第4章分別介紹分類和高級分類技術;第5章和第6章分別介紹聚類分析算法和高級聚類分析算法;第7章討論異常值檢測;第8章介紹流數據、時間序列數據及序列數據挖掘;第9章討論圖挖掘和網絡分析;第10章介紹文本和網絡數據挖掘。
讀者可以從書中給出的偽代碼出發,構建適合自己需要的算法;或者直接應用隨書提供的R語言實現的算法。本書適合對數據挖掘感興趣的各類人士,不管你是數據挖掘算法的研究人員,還是數據挖掘工程師,本書都可以提供相應的幫助。
本書的翻譯得到了廣西高校數據分析與計算重點實驗室的資助。在本書的翻譯過程中,得到了王春華編輯的大力支持和幫助。本書責任編輯盛思源老師具有豐富的經驗,為本書的出版付出了大量的勞動,這里對她們的支持和幫助表示衷心的感謝。
由于時間和水平所限,難免會有不當之處,希望同行和讀者多加指正。
譯者
作者簡介 About the AuthorBater Makhabel(LinkedIn: BATERMJ和GitHub: BATERMJ)為系統構架師,生活在中國北京、上海和烏魯木齊等地。他于1995至2002年之間在清華大學學習,并獲得計算機科學和技術的學士和博士學位。他在機器學習、數據挖掘、自然語言處理(NLP)、分布系統、嵌入系統、網絡、移動平臺、算法、應用數學和統計領域有豐富的經驗。他服務過的客戶包括CA Technologies、META4ALL和EDA(DFR的一家子公司)。同時,他也擁有在中國創辦公司的經歷。
Bater的生活開創性地在計算機科學和人文科學之間取得了平衡。在過去的12年中,他在應用多種先進計算機技術于文化創作方面獲得了經驗,其中一項是人機界面,通過哈薩克語與計算機系統進行交互。他一直和他工作領域中的其他作家有合作,但是本書是他的正式作品。
About the Reviewers 審校者簡介Jason H.D. Cho在伊利諾伊大學香檳分校獲得計算機碩士學位,現在在攻讀博士。他對應用自然語言處理和大數據解決醫學信息問題特別感興趣。尤其是,他希望能在社交媒體上找到病人關心的健康需求。他曾帶領一個學員小組在美國一項主要的保健競賽(CIMIT)中躋身前10名。Jason也為自然語言處理和大數據研究領域的文章進行審稿。
Gururaghav Gopal現在在Paterson證券公司工作,其職位是量化分析員、開發人員、交易員和分析師。以前,他是一個和電商行業相關的數據科學咨詢師。他曾經在印度韋洛爾的韋洛爾理工大學教授大學生和研究生模式識別課程。他曾經在一些研究機構做過研究助理,包括IFMR和NAL。
Gururaghav獲得了電子工程的學士學位、計算機科學和工程的碩士學位,并在IFMR輔修金融工程和風險管理方面的課程。之后,他便在金融相關領域工作。他獲得過多個獎項并以他的名字發表過多篇文章。他對編程、教學和咨詢感興趣。在閑暇時間,他會聽音樂。
Vibhav Kamath獲得了位于孟買的印度理工學院工業工程和運籌學的碩士學位,并具有位于浦那的工學院的電子工程學士學位。大四期間,他對算法和數學模型產生了興趣,從此便進入分析領域。Vibhav現在在班加羅爾的一家IT服務公司工作,其工作的一部分內容是應用R編程語言基于優化和線性回歸技術來開發統計和數學模型。他曾經審閱過Packt出版社出版的兩本R語言圖書:R Graphs Cookbook, Second Edition和Social Media Mining with R,他曾經應用SAS、SQL和Excel/VBA做過數據可視化,為一家銀行開發過儀表盤程序。
過去,Vibhav從事過離散時間仿真和語言處理(均基于MATLAB)等方面的學術工作。他涉獵過機器人領域,建立了一個瀏覽魔方的機器人Micromouse。除了分析和編程之外,Vibhav喜歡閱讀小說類讀物。空閑時,他打乒乓球、板球和網球,實在無聊時就玩田字格游戲(數獨和數謎)。可以通過郵件vibhav.kamath@hotmail.com或者領英in.linkedin.com/in/vibhavkamath與他聯系。
Hasan Kurban于2012年在布盧明頓的印度大學獲得計算機碩士學位,現在在該校的信息與計算機學院攻讀博士學位,專業為計算機科學同時輔修統計學。他的研究方向為數據挖掘、機器學習和統計學。
譯者序
作者簡介
審校者簡介
前言
致謝
第1章 預備知識 1
1.1 大數據 2
1.2 數據源 3
1.3 數據挖掘 4
1.3.1 特征提取 4
1.3.2 總結 4
1.3.3 數據挖掘過程 5
1.4 社交網絡挖掘 7
1.5 文本挖掘 9
1.5.1 信息檢索和文本挖掘 10
1.5.2 文本挖掘預測 10
1.6 網絡數據挖掘 10
1.7 為什么選擇R 12
1.8 統計學 12
1.8.1 統計學與數據挖掘 13
1.8.2 統計學與機器學習 13
1.8.3 統計學與R語言 13
1.8.4 數據挖掘中統計學的局限性 13
1.9 機器學習 13
1.9.1 機器學習方法 14
1.9.2 機器學習架構 14
1.10 數據屬性與描述 15
1.10.1 數值屬性 16
1.10.2 分類屬性 16
1.10.3 數據描述 16
1.10.4 數據測量 17
1.11 數據清洗 18
1.11.1 缺失值 18
1.11.2 垃圾數據、噪聲數據或異常值 19
1.12 數據集成 19
1.13 數據降維 20
1.13.1 特征值和特征向量 20
1.13.2 主成分分析 20
1.13.3 奇異值分解 20
1.13.4 CUR分解 21
1.14 數據變換與離散化 21
1.14.1 數據變換 21
1.14.2 標準化數據的變換方法 22
1.14.3 數據離散化 22
1.15 結果可視化 23
1.16 練習 24
1.17 總結 24
第2章 頻繁模式、關聯規則和相關規則挖掘 25
2.1 關聯規則和關聯模式概述 26
2.1.1 模式和模式發現 26
2.1.2 關系或規則發現 29
2.2 購物籃分析 30
2.2.1 購物籃模型 31
2.2.2 Apriori算法 31
2.2.3 Eclat算法 35
2.2.4 FP-growth算法 37
2.2.5 基于最大頻繁項集的GenMax算法 41
2.2.6 基于頻繁閉項集的Charm算法 43
2.2.7 關聯規則生成算法 44
2.3 混合關聯規則挖掘 46
2.3.1 多層次和多維度關聯規則挖掘 46
2.3.2 基于約束的頻繁模式挖掘 47
2.4 序列數據集挖掘 48
2.4.1 序列數據集 48
2.4.2 GSP算法 48
2.5 R語言實現 50
2.5.1 SPADE算法 51
2.5.2 從序列模式中生成規則 52
2.6 高性能算法 52
2.7 練習 53
2.8 總結 53
第3章 分類 54
3.1 分類 55
3.2 通用決策樹歸納法 56
3.2.1 屬性選擇度量 58
3.2.2 決策樹剪枝 59
3.2.3 決策樹生成的一般算法 59
3.2.4 R語言實現 61
3.3 使用ID3算法對高額度信用卡用戶分類 61
3.3.1 ID3算法 62
3.3.2 R語言實現 64
3.3.3 網絡攻擊檢測 64
3.3.4 高額度信用卡用戶分類 66
3.4 使用C4.5算法進行網絡垃圾頁面檢測 66
3.4.1 C4.5算法 67
3.4.2 R語言實現 68
3.4.3 基于MapReduce的并行版本 69
3.4.4 網絡垃圾頁面檢測 70
3.5 使用CART算法判斷網絡關鍵資源頁面 72
3.5.1 CART算法 73
3.5.2 R語言實現 74
3.5.3 網絡關鍵資源頁面判斷 74
3.6 木馬程序流量識別方法和貝葉斯分類 75
3.6.1 估計 75
3.6.2 貝葉斯分類 76
3.6.3 R語言實現 77
3.6.4 木馬流量識別方法 77
3.7 垃圾郵件識別和樸素貝葉斯分類 79
3.7.1 樸素貝葉斯分類 79
3.7.2 R語言實現 80
3.7.3 垃圾郵件識別 80
3.8 基于規則的計算機游戲玩家類型分類和基于規則的分類 81
3.8.1 從決策樹變換為決策規則 82
3.8.2 基于規則的分類 82
3.8.3 序列覆蓋算法 83
3.8.4 RIPPER算法 83
3.8.5 計算機游戲玩家類型的基于規則的分類 85
3.9 練習 86
3.10 總結 86
第4章 高級分類算法 87
4.1 集成方法 87
4.1.1 Bagging算法 88
4.1.2 Boosting和AdaBoost算法 89
4.1.3 隨機森林算法 91
4.1.4 R語言實現 91
4.1.5 基于MapReduce的并行版本 92
4.2 生物學特征和貝葉斯信念網絡 92
4.2.1 貝葉斯信念網絡算法 93
4.2.2 R語言實現 94
4.2.3 生物學特征 94
4.3 蛋白質分類和k近鄰算法 94
4.3.1 kNN算法 95
4.3.2 R語言實現 95
4.4 文檔檢索和支持向量機 95
4.4.1 支持向量機算法 97
4.4.2 R語言實現 99
4.4.3 基于MapReduce的并行版本 99
4.4.4 文檔檢索 100
4.5 基于頻繁模式的分類 100
4.5.1 關聯分類 100
4.5.2 基于判別頻繁模式的分類 101
4.5.3 R語言實現 101
4.5.4 基于序列頻繁項集的文本分類 102
4.6 基于反向傳播算法的分類 102
4.6.1 BP算法 104
4.6.2 R語言實現 105
4.6.3 基于MapReduce的并行版本 105
4.7 練習 106
4.8 總結 107
第5章 聚類分析 108
5.1 搜索引擎和k均值算法 110
5.1.1 k均值聚類算法 111
5.1.2 核k均值聚類算法 112
5.1.3 k模式聚類算法 112
5.1.4 R語言實現 113
5.1.5 基于MapReduce的并行版本 113
5.1.6 搜索引擎和網頁聚類 114
5.2 自動提取文檔文本和k中心點算法 116
5.2.1 PAM算法 117
5.2.2 R語言實現 117
5.2.3 自動提取和總結文檔文本 117
5.3 CLARA算法及實現 118
5.3.1 CLARA算法 119
5.3.2 R語言實現 119
5.4 CLARANS算法及實現 119
5.4.1 CLARANS算法 120
5.4.2 R語言實現 120
5.5 無監督的圖像分類和仿射傳播聚