第1章 初識Mahout 1
1.1 Mahout的故事 1
1.2 Mahout的機器學習主題 2
1.2.1 推薦引擎 2
1.2.2 聚類 3
1.2.3 分類 4
1.3 利用Mahout和Hadoop處理大規模數據 4
1.4 安裝Mahout 6
1.4.1 Java和IDE 6
1.4.2 安裝Maven 7
1.4.3 安裝Mahout 7
1.4.4 安裝Hadoop 8
1.5 小結 8
第一部分 推薦
第2章 推薦係統 10
2.1 推薦的定義 10
2.2 運行第一個推薦引擎 11
2.2.1 創建輸入 11
2.2.2 創建一個推薦程序 13
2.2.3 分析輸齣 14
2.3 評估一個推薦程序 14
2.3.1 訓練數據與評分 15
2.3.2 運行RecommenderEvaluator 15
2.3.3 評估結果 16
2.4 評估查準率與查全率 17
2.4.1 運行RecommenderIRStats-Evaluator 17
2.4.2 查準率和查全率的問題 19
2.5 評估GroupLens數據集 19
2.5.1 提取推薦程序的輸入 19
2.5.2 體驗其他推薦程序 20
2.6 小結 20
第3章 推薦數據的錶示 21
3.1 偏好數據的錶示 21
3.1.1 Preference對象 21
3.1.2 PreferenceArray及其實現 22
3.1.3 改善聚閤的性能 23
3.1.4 FastByIDMap和FastIDSet 23
3.2 內存級DataModel 24
3.2.1 GenericDataModel 24
3.2.2 基於文件的數據 25
3.2.3 可刷新組件 25
3.2.4 更新文件 26
3.2.5 基於數據庫的數據 26
3.2.6 JDBC和MySQL 27
3.2.7 通過JNDI進行配置 27
3.2.8 利用程序進行配置 28
3.3 無偏好值的處理 29
3.3.1 何時忽略值 29
3.3.2 無偏好值時的內存級錶示 30
3.3.3 選擇兼容的實現 31
3.4 小結 33
第4章 進行推薦 34
4.1 理解基於用戶的推薦 34
4.1.1 推薦何時會齣錯 34
4.1.2 推薦何時是正確的 35
4.2 探索基於用戶的推薦程序 36
4.2.1 算法 36
4.2.2 基於GenericUserBased-Recommender實現算法 36
4.2.3 嘗試GroupLens數據集 37
4.2.4 探究用戶鄰域 38
4.2.5 固定大小的鄰域 39
4.2.6 基於閾值的鄰域 39
4.3 探索相似性度量 40
4.3.1 基於皮爾遜相關係數的相似度 40
4.3.2 皮爾遜相關係數存在的問題 42
4.3.3 引入權重 42
4.3.4 基於歐氏距離定義相似度 43
4.3.5 采用餘弦相似性度量 43
4.3.6 采用斯皮爾曼相關係數基於相對排名定義相似度 44
4.3.7 忽略偏好值基於榖本係數計算相似度 45
4.3.8 基於對數似然比更好地計算相似度 46
4.3.9 推測偏好值 47
4.4 基於物品的推薦 47
4.4.1 算法 48
4.4.2 探究基於物品的推薦程序 49
4.5 Slope-one推薦算法 50
4.5.1 算法 50
4.5.2 Slope-one實踐 51
4.5.3 DiffStorage和內存考慮 52
4.5.4 離綫計算量的分配 53
4.6 最新以及試驗性質的推薦算法 53
4.6.1 基於奇異值分解的推薦算法 53
4.6.2 基於綫性插值物品的推薦算法 54
4.6.3 基於聚類的推薦算法 55
4.7 對比其他推薦算法 56
4.7.1 為Mahout引入基於內容的技術 56
4.7.2 深入理解基於內容的推薦算法 57
4.8 對比基於模型的推薦算法 57
4.9 小結 57
第5章 讓推薦程序實用化 59
5.1 分析來自約會網站的樣本數據 59
5.2 找到一個有效的推薦程序 61
5.2.1 基於用戶的推薦程序 61
5.2.2 基於物品的推薦程序 62
5.2.3 slope-one推薦程序 63
5.2.4 評估查準率和查全率 63
5.2.5 評估性能 64
5.3 引入特定域的信息 65
5.3.1 采用一個定製的物品相似性度量 65
5.3.2 基於內容進行推薦 66
5.3.3 利用IDRescorer修改推薦結果 66
5.3.4 在IDRescorer中引入性彆 67
5.3.5 封裝一個定製的推薦程序 69
5.4 為匿名用戶做推薦 71
5.4.1 利用PlusAnonymousUser-DataModel處理臨時用戶 71
5.4.2 聚閤匿名用戶 73
5.5 創建一個支持Web訪問的推薦程序 73
5.5.1 封裝WAR文件 74
5.5.2 測試部署 74
5.6 更新和監控推薦程序 75
5.7 小結 76
第6章 分布式推薦 78
6.1 分析Wikipedia數據集 78
6.1.1 挑戰規模 79
6.1.2 分布式計算的優缺點 80
6.2 設計一個基於物品的分布式推薦算法 81
6.2.1 構建共現矩陣 81
6.2.2 計算用戶嚮量 82
6.2.3 生成推薦結果 82
6.2.4 解讀結果 83
6.2.5 分布式實現 83
6.3 基於MapReduce實現分布式算法 83
6.3.1 MapReduce簡介 84
6.3.2 嚮MapReduce轉換:生成用戶嚮量 84
6.3.3 嚮MapReduce轉換:計算共現關係 85
6.3.4 嚮MapReduce轉換:重新思考矩陣乘 87
6.3.5 嚮MapReduce轉換:通過部分乘積計算矩陣乘 87
6.3.6 嚮MapReduce轉換:形成推薦 90
6.4 在Hadoop上運行MapReduce 91
6.4.1 安裝Hadoop 92
6.4.2 在Hadoop上執行推薦 92
6.4.3 配置mapper和reducer 94
6.5 僞分布式推薦程序 94
6.6 深入理解推薦 95
6.6.1 在雲上運行程序 95
6.6.2 考慮推薦的非傳統用法 97
6.7 小結 97
第二部分 聚類
第7章 聚類介紹 100
7.1 聚類的基本概念 100
7.2 項目相似性度量 102
7.3 Hello World:運行一個簡單的聚類示例 103
7.3.1 生成輸入數據 103
7.3.2 使用Mahout聚類 104
7.3.3 分析輸齣結果 107
7.4 探究距離測度 108
7.4.1 歐氏距離測度 108
7.4.2 平方歐氏距離測度 108
7.4.3 曼哈頓距離測度 108
7.4.4 餘弦距離測度 109
7.4.5 榖本距離測度 110
7.4.6 加權距離測度 110
7.5 在簡單示例上使用各種距離測度 111
7.6 小結 111
第8章 聚類數據的錶示 112
8.1 嚮量可視化 113
8.1.1 將數據轉換為嚮量 113
8.1.2 準備Mahout所用的嚮量 115
8.2 將文本文檔錶示為嚮量 116
8.2.1 使用TF-IDF改進加權 117
8.2.2 通過n-gram搭配詞考察單詞的依賴性 118
8.3 從文檔中生成嚮量 119
8.4 基於歸一化改善嚮量的質量 123
8.5 小結 124
第9章 Mahout中的聚類算法 125
9.1 k-means聚類 125
9.1.1 關於k-means你需要瞭解的 126
9.1.2 運行k-means聚類 127
9.1.3 通過canopy聚類尋找最佳k值 134
9.1.4 案例學習:使用k-means對新聞聚類 138
9.2 超越k-means: 聚類技術概覽 141
9.2.1 不同類型的聚類問題 141
9.2.2 不同的聚類方法 143
9.3 模糊k-means聚類 145
9.3.1 運行模糊k-means聚類 145
9.3.2 多模糊會過度嗎 147
9.3.3 案例學習:用模糊k-means對新聞進行聚類 148
9.4 基於模型的聚類 149
9.4.1 k-means的不足 149
9.4.2 狄利剋雷聚類 150
9.4.3 基於模型的聚類示例 151
9.5 用LDA進行話題建模 154
9.5.1 理解LDA 155
9.5.2 對比TF-IDF與LDA 156
9.5.3 LDA參數調優 156
9.5.4 案例學習:尋找新聞文檔中的話題 156
9.5.5 話題模型的應用 158
9.6 小結 158
第10章 評估並改善聚類質量 160
10.1 檢查聚類輸齣 160
10.2 分析聚類輸齣 162
10.2.1 距離測度與特徵選擇 163
10.2.2 簇間與簇內距離 163
10.2.3 簇的混閤與重疊 166
10.3 改善聚類質量 166
10.3.1 改進文檔嚮量生成過程 166
10.3.2 編寫自定義距離測度 169
10.4 小結 171
第11章 將聚類用於生産環境 172
11.1 Hadoop下運行聚類算法的快速入門 172
11.1.1 在本地Hadoop集群上運行聚類算法 173
11.1.2 定製Hadoop配置 174
11.2 聚類性能調優 176
11.2.1 在計算密集型操作中避免性能缺陷 176
11.2.2 在I/O密集型操作中避免性能缺陷 178
11.3 批聚類及在綫聚類 178
11.3.1 案例分析:在綫新聞聚類 179
11.3.2 案例分析:對維基百科文章聚類 180
11.4 小結 181
第12章 聚類的實際應用 182
12.1 發現Twitter上的相似用戶 182
12.1.1 數據預處理及特徵加權 183
12.1.2 避免特徵選擇中的常見陷阱 184
12.2 為Last.fm上的藝術傢推薦標簽 187
12.2.1 利用共現信息進行標簽推薦 187
12.2.2 構建Last.fm藝術傢詞典 188
12.2.3 將Last.fm標簽轉換成以藝術傢為特徵的嚮量 190
12.2.4 在Last.fm數據上運行k-means算法 191
12.3 分析Stack Overflow數據集 193
12.3.1 解析Stack Overflow數據集 193
12.3.2 在Stack Overflow中發現聚類問題 193
12.4 小結 194
第三部分 分類
第13章 分類 198
13.1 為什麼用Mahout做分類 198
13.2 分類係統基礎 199
13.2.1 分類、推薦和聚類的區彆 201
13.2.2 分類的應用 201
13.3 分類的工作原理 202
13.3.1 模型 203
13.3.2 訓練、測試與生産 203
13.3.3 預測變量與目標變量 204
13.3.4 記錄、字段和值 205
13.3.5 預測變量值的4種類型 205
13.3.6 有監督學習與無監督學習 207
13.4 典型分類項目的工作流 207
13.4.1 第一階段工作流:訓練分類模型 208
13.4.2 第二階段工作流:評估分類模型 212
13.4.3 第三階段工作流:在生産中使用模型 212
13.5 循序漸進的簡單分類示例 213
13.5.1 數據和挑戰 213
13.5.2 訓練一個模型來尋找顔色填充:初步設想 214
13.5.3 選擇一個學習算法來訓練模型 215
13.5.4 改進填充顔色分類器的性能 217
13.6 小結 221
第14章 訓練分類器 222
14.1 提取特徵以構建分類器 222
14.2 原始數據的預處理 224
14.2.1 原始數據的轉換 224
14.2.2 一個計算營銷的例子 225
14.3 將可分類數據轉換為嚮量 226
14.3.1 用嚮量錶示數據 226
14.3.2 用Mahout API做特徵散列 228
14.4 用SGD對20 Newsgroups數據集進行分類 231
14.4.1 開始:數據集預覽 231
14.4.2 20 Newsgroups數據特徵的解析和詞條化 234
14.4.3 20 Newsgroups數據的訓練代碼 234
14.5 選擇訓練分類器的算法 238
14.5.1 非並行但仍很強大的算法:SGD和SVM 239
14.5.2 樸素分類器的力量:樸素貝葉斯及補充樸素貝葉斯 239
14.5.3 精密結構的力量:隨機森林算法 240
14.6 用樸素貝葉斯對20 Newsgroups數據分類 241
14.6.1 開始:為樸素貝葉斯提取數據 241
14.6.2 訓練樸素貝葉斯分類器 242
14.6.3 測試樸素貝葉斯模型 242
14.7 小結 244
第15章 分類器評估及調優 245
15.1 Mahout中的分類器評估 245
15.1.1 獲取即時反饋 246
15.1.2 確定分類“好”的含義 246
15.1.3 認識不同的錯誤代價 247
15.2 分類器評估API 247
15.2.1 計算AUC 248
15.2.2 計算混淆矩陣和熵矩陣 250
15.2.3 計算平均對數似然 252
15.2.4 模型剖析 253
15.2.5 20 Newsgroups語料上SGD分類器的性能指標計算 254
15.3 分類器性能下降時的處理 257
15.3.1 目標泄漏 258
15.3.2 特徵提取崩潰 260
15.4 分類器性能調優 262
15.4.1 問題調整 262
15.4.2 分類器調優 265
15.5 小結 267
第16章 分類器部署 268
16.1 巨型分類係統的部署過程 268
16.1.1 理解問題 269
16.1.2 根據需要優化特徵提取過程 269
16.1.3 根據需要優化嚮量編碼 269
16.1.4 部署可擴展的分類器服務 270
16.2 確定規模和速度需求 270
16.2.1 多大纔算大 270
16.2.2 在規模和速度之間摺中 272
16.3 對大型係統構建訓練流水綫 273
16.3.1 獲取並保留大規模數據 274
16.3.2 非規範化及下采樣 275
16.3.3 訓練中的陷阱 276
16.3.4 快速讀取數據並對其進行編碼 278
16.4 集成Mahout分類器 282
16.4.1 提前計劃:集成中的關鍵問題 283
16.4.2 模型序列化 287
16.5 案例:一個基於Thrift的分類服務器 288
16.5.1 運行分類服務器 292
16.5.2 訪問分類器服務 294
16.6 小結 296
第17章 案例分析——Shop It To Me 297
17.1 Shop It To Me選擇Mahout的原因 297
17.1.1 Shop It To Me公司簡介 298
17.1.2 Shop It To Me需要分類係統的原因 298
17.1.3 對Mahout嚮外擴展 298
17.2 郵件交易係統的一般結構 299
17.3 訓練模型 301
17.3.1 定義分類項目的目標 301
17.3.2 按時間劃分 303
17.3.3 避免目標泄漏 303
17.3.4 調整學習算法 303
17.3.5 特徵嚮量編碼 304
17.4 加速分類過程 306
17.4.1 特徵嚮量的綫性組閤 307
17.4.2 模型得分的綫性擴展 308
17.5 小結 310
附錄A JVM調優 311
附錄B Mahout數學基礎 313
附錄C 相關資源 318
索引 320
· · · · · · (
收起)