Mahout实战

Mahout实战

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
8.031 评价豆瓣读书
免费试读

作品简介

通过收集数据来学习和演进的计算机系统威力无穷。Mahout作为Apache的开源机器学习项目,把推荐系统、分类和聚类等领域的核心算法浓缩到了可扩展的现成的库中。使用Mahout,你可以立即在自己的项目中应用亚马逊、Netflix及其他互联网公司所采用的机器学习技术。

本书出自Mahout核心成员之手,得到Apache官方推荐,权威性毋庸置疑。作者凭借多年实战经验,为读者展现了丰富的应用案例,并细致地介绍了Mahout的解决之道。本书还重点讨论了可扩展性问题,介绍了如何利用Apache Hadoop框架应对大数据的挑战。

Sean Owen,现为大数据公司Cloudera数据产品总监,Myrrix创始人,曾任Apache Mahout项目管理委员会委员、谷歌高级软件工程师,是Mobile Web和Taste框架(现属于Mahout项目)的主力开发者。Owen拥有哈佛大学计算机科学专业学士学位。

Robin Anil,谷歌公司负责地图与广告方向的软件工程师,Apache Mahout项目管理委员会委员,为Mahout开发了贝叶斯分类器和频繁模式挖掘实现,曾经在雅虎公司任高级软件工程师。

Ted Dunning,MapR Technologies公司首席应用架构师,Apache Mahout和Zookeeper项目管理委员会成员,为Mahout聚类、分类、矩阵分解算法做出了贡献,曾任DeepDyve公司CTO及多家公司首席科学家。

Ellen Friedman,Apache Mahout项目代码提交者,生物化学博士学位,经验丰富的科技作家,作品涵盖计算机、分子生物学、医学和地球科学。

作品目录

  1. 前言
  2. 致谢
  3. 关于本书
  4. 路线图
  5. 代码约定及下载
  6. 多媒体资料
  7. 作者在线
  8. 16个语音讲解
  9. 关于封面
  10. 第1章 初识Mahout
  11. 1.1 Mahout的故事
  12. 1.2 Mahout的机器学习主题
  13. 1.2.1 推荐引擎
  14. 1.2.2 聚类
  15. 1.2.3 分类
  16. 1.3 利用Mahout和Hadoop处理大规模数据
  17. 1.4 安装Mahout
  18. 1.4.1 Java和IDE
  19. 1.4.2 安装Maven
  20. 1.4.3 安装Mahout
  21. 1.4.4 安装Hadoop
  22. 1.5 小结
  23. 第一部分 推荐
  24. 第2章 推荐系统
  25. 2.1 推荐的定义
  26. 2.2 运行第一个推荐引擎
  27. 2.2.1 创建输入
  28. 2.2.2 创建一个推荐程序
  29. 2.2.3 分析输出
  30. 2.3 评估一个推荐程序
  31. 2.3.1 训练数据与评分
  32. 2.3.2 运行RecommenderEvaluator
  33. 2.3.3 评估结果
  34. 2.4 评估查准率与查全率
  35. 2.4.1 运行RecommenderIRStatsEvaluator
  36. 2.4.2 查准率和查全率的问题
  37. 2.5 评估GroupLens数据集
  38. 2.5.1 提取推荐程序的输入
  39. 2.5.2 体验其他推荐程序
  40. 2.6 小结
  41. 第3章 推荐数据的表示
  42. 3.1 偏好数据的表示
  43. 3.1.1 Preference对象
  44. 3.1.2 PreferenceArray及其实现
  45. 3.1.3 改善聚合的性能
  46. 3.1.4 FastByIDMap和FastIDSet
  47. 3.2 内存级DataModel
  48. 3.2.1 GenericDataModel
  49. 3.2.2 基于文件的数据
  50. 3.2.3 可刷新组件
  51. 3.2.4 更新文件
  52. 3.2.5 基于数据库的数据
  53. 3.2.6 JDBC和MySQL
  54. 3.2.7 通过JNDI进行配置
  55. 3.2.8 利用程序进行配置
  56. 3.3 无偏好值的处理
  57. 3.3.1 何时忽略值
  58. 3.3.2 无偏好值时的内存级表示
  59. 3.3.3 选择兼容的实现
  60. 3.4 小结
  61. 第4章 进行推荐
  62. 4.1 理解基于用户的推荐
  63. 4.1.1 推荐何时会出错
  64. 4.1.2 推荐何时是正确的
  65. 4.2 探索基于用户的推荐程序
  66. 4.2.1 算法
  67. 4.2.2 基于GenericUserBasedRecommender实现算法
  68. 4.2.3 尝试GroupLens数据集
  69. 4.2.4 探究用户邻域
  70. 4.2.5 固定大小的邻域
  71. 4.2.6 基于阈值的邻域
  72. 4.3 探索相似性度量
  73. 4.3.1 基于皮尔逊相关系数的相似度
  74. 4.3.2 皮尔逊相关系数存在的问题
  75. 4.3.3 引入权重
  76. 4.3.4 基于欧氏距离定义相似度
  77. 4.3.5 采用余弦相似性度量
  78. 4.3.6 采用斯皮尔曼相关系数基于相对排名定义相似度
  79. 4.3.7 忽略偏好值基于谷本系数计算相似度
  80. 4.3.8 基于对数似然比更好地计算相似度
  81. 4.3.9 推测偏好值
  82. 4.4 基于物品的推荐
  83. 4.4.1 算法
  84. 4.4.2 探究基于物品的推荐程序
  85. 4.5 Slope-one推荐算法
  86. 4.5.1 算法
  87. 4.5.2 slope-one实践
  88. 4.5.3 DiffStorage和内存考虑
  89. 4.5.4 离线计算量的分配
  90. 4.6 最新以及试验性质的推荐算法
  91. 4.6.1 基于奇异值分解的推荐算法
  92. 4.6.2 基于线性插值物品的推荐算法
  93. 4.6.3 基于聚类的推荐算法
  94. 4.7 对比其他推荐算法
  95. 4.7.1 为Mahout引入基于内容的技术
  96. 4.7.2 深入理解基于内容的推荐算法
  97. 4.8 对比基于模型的推荐算法
  98. 4.9 小结
  99. 第5章 让推荐程序实用化
  100. 5.1 分析来自约会网站的样本数据
  101. 5.2 找到一个有效的推荐程序
  102. 5.2.1 基于用户的推荐程序
  103. 5.2.2 基于物品的推荐程序
  104. 5.2.3 slope-one推荐程序
  105. 5.2.4 评估查准率和查全率
  106. 5.2.5 评估性能
  107. 5.3 引入特定域的信息
  108. 5.3.1 采用一个定制的物品相似性度量
  109. 5.3.2 基于内容进行推荐
  110. 5.3.3 利用IDRescorer修改推荐结果
  111. 5.3.4 在IDRescorer中引入性别
  112. 5.3.5 封装一个定制的推荐程序
  113. 5.4 为匿名用户做推荐
  114. 5.4.1 利用PlusAnonymousUserDataModel处理临时用户
  115. 5.4.2 聚合匿名用户
  116. 5.5 创建一个支持Web访问的推荐程序
  117. 5.5.1 封装WAR文件
  118. 5.5.2 测试部署
  119. 5.6 更新和监控推荐程序
  120. 5.7 小结
  121. 第6章 分布式推荐
  122. 6.1 分析Wikipedia数据集
  123. 6.1.1 挑战规模
  124. 6.1.2 分布式计算的优缺点
  125. 6.2 设计一个基于物品的分布式推荐算法
  126. 6.2.1 构建共现矩阵
  127. 6.2.2 计算用户向量
  128. 6.2.3 生成推荐结果
  129. 6.2.4 解读结果
  130. 6.2.5 分布式实现
  131. 6.3 基于MapReduce实现分布式算法
  132. 6.3.1 MapReduce简介
  133. 6.3.2 向MapReduce转换:生成用户向量
  134. 6.3.3 向MapReduce转换:计算共现关系
  135. 6.3.4 向MapRduce转换:重新思考矩阵乘
  136. 6.3.5 向MapReduce转换:通过部分乘积计算矩阵乘
  137. 6.3.6 向MapReduce转换:形成推荐
  138. 6.4 在Hadoop上运行MapReduce
  139. 6.4.1 安装Hadoop
  140. 6.4.2 在Hadoop上执行推荐
  141. 6.4.3 配置mapper和reducer
  142. 6.5 伪分布式推荐程序
  143. 6.6 深入理解推荐
  144. 6.6.1 在云上运行程序
  145. 6.6.2 考虑推荐的非传统用法
  146. 6.7 小结
  147. 第二部分 聚类
  148. 第7章 聚类介绍
  149. 7.1 聚类的基本概念
  150. 7.2 项目相似性度量
  151. 7.3 Hello World:运行一个简单的聚类示例
  152. 7.3.1 生成输入数据
  153. 7.3.2 使用Mahout聚类
  154. 7.3.3 分析输出结果
  155. 7.4 探究距离测度
  156. 7.4.1 欧氏距离测度
  157. 7.4.2 平方欧氏距离测度
  158. 7.4.3 曼哈顿距离测度
  159. 7.4.4 余弦距离测度
  160. 7.4.5 谷本距离测度
  161. 7.4.6 加权距离测度
  162. 7.5 在简单示例上使用各种距离测度
  163. 7.6 小结
  164. 第8章 聚类数据的表示
  165. 8.1 向量可视化
  166. 8.1.1 将数据转换为向量
  167. 8.1.2 准备Mahout所用的向量
  168. 8.2 将文本文档表示为向量
  169. 8.2.1 使用TF-IDF改进加权
  170. 8.2.2 通过n-gram搭配词考察单词的依赖性
  171. 8.3 从文档中生成向量
  172. 8.4 基于归一化改善向量的质量
  173. 8.5 小结
  174. 第9章 Mahout中的聚类算法
  175. 9.1 k-means聚类
  176. 9.1.1 关于k-means你需要了解的
  177. 9.1.2 运行k-means聚类
  178. 1. 理解k-means聚类的MapReduce作业
  179. 2. 使用随机种子生成器运行k-means作业
  180. 9.1.3 通过canopy聚类寻找最佳k值
  181. 1. 使用canopy生成算法来初始化k-means中心
  182. 2. 理解canopy生成算法
  183. 3. 运行canopy生成算法来选择k个中心
  184. 4. 使用canopy中心改进k-means聚类
  185. 9.1.4 案例学习:使用k-means对新闻聚类
  186. 9.2 超越k-means: 聚类技术概览
  187. 9.2.1 不同类型的聚类问题
  188. 1. 排他性聚类
  189. 2. 有重叠聚类
  190. 3. 层次聚类
  191. 4. 概率聚类
  192. 9.2.2 不同的聚类方法
  193. 1. 确定的中心个数
  194. 2. 自底向上的方法:通过组合,将点合并为簇
  195. 3. 自顶向下的方法:拆分大簇
  196. 4. 自顶向下和自底向上方法的优缺点
  197. 9.3 模糊k-means聚类
  198. 9.3.1 运行模糊k-means聚类
  199. 模糊k-means的MapReduce实现
  200. 9.3.2 多模糊会过度吗
  201. 9.3.3 案例学习:用模糊k-means对新闻进行聚类
  202. 9.4 基于模型的聚类
  203. 9.4.1 k-means的不足
  204. 1. 非对称正态分布
  205. 2. 对真实数据进行聚类所存在的问题
  206. 9.4.2 狄利克雷聚类
  207. 理解狄利克雷聚类算法
  208. 9.4.3 基于模型的聚类示例
  209. 1. 非对称正态分布
  210. 2. MapReduce版的狄利克雷聚类
  211. 9.5 用LDA进行话题建模
  212. 9.5.1 理解LDA
  213. 9.5.2 对比TF-IDF与LDA
  214. 9.5.3 LDA参数调优
  215. 9.5.4 案例学习:寻找新闻文档中的话题
  216. 9.5.5 话题模型的应用
  217. 9.6 小结
  218. 第10章 评估并改善聚类质量
  219. 10.1 检查聚类输出
  220. 10.2 分析聚类输出
  221. 10.2.1 距离测度与特征选择
  222. 对特征进行加权
  223. 10.2.2 簇间与簇内距离
  224. 1. 簇间距离
  225. 2. 簇内距离
  226. 10.2.3 簇的混合与重叠
  227. 10.3 改善聚类质量
  228. 10.3.1 改进文档向量生成过程
  229. 10.3.2 编写自定义距离测度
  230. 10.4 小结
  231. 第11章 将聚类用于生产环境
  232. 11.1 Hadoop下运行聚类算法的快速入门
  233. 11.1.1 在本地Hadoop集群上运行聚类算法
  234. 11.1.2 定制Hadoop配置
  235. 使用Mahout启动脚本在Hadoop集群下执行作业
  236. 11.2 聚类性能调优
  237. 11.2.1 在计算密集型操作中避免性能缺陷
  238. 1. 采用合适的向量表示
  239. 2. 使用更快的距离测度方法
  240. 3. 根据距离计算使用 SparseVector 类型
  241. 11.2.2 在I/O密集型操作中避免性能缺陷
  242. 1. 使用合适的向量表示
  243. 2. 使用HDFS副本
  244. 3. 减少簇的数目
  245. 11.3 批聚类及在线聚类
  246. 11.3.1 案例分析:在线新闻聚类
  247. 11.3.2 案例分析:对维基百科文章聚类
  248. 在亚马逊弹性MapReduce下运行维基百科聚类
  249. 11.4 小结
  250. 第12章 聚类的实际应用
  251. 12.1 发现Twitter上的相似用户
  252. 12.1.1 数据预处理及特征加权
  253. 12.1.2 避免特征选择中的常见陷阱
  254. 12.2 为Last.fm上的艺术家推荐标签
  255. 12.2.1 利用共现信息进行标签推荐
  256. 12.2.2 构建Last.fm艺术家词典
  257. 12.2.3 将Last.fm标签转换成以艺术家为特征的向量
  258. 12.2.4 在Last.fm数据上运行k-means算法
  259. 12.3 分析Stack Overflow数据集
  260. 12.3.1 解析Stack Overflow数据集
  261. 12.3.2 在Stack Overflow中发现聚类问题
  262. 1. 对发帖进行聚类以发现相关问题
  263. 2. 对用户数据进行聚类以发现相似用户
  264. 12.4 小结
  265. 第三部分 分类
  266. 第13章 分类
  267. 13.1 为什么用Mahout做分类
  268. 13.2 分类系统基础
  269. 13.2.1 分类、推荐和聚类的区别
  270. 13.2.2 分类的应用
  271. 13.3 分类的工作原理
  272. 13.3.1 模型
  273. 13.3.2 训练、测试与生产
  274. 13.3.3 预测变量与目标变量
  275. 13.3.4 记录、字段和值
  276. 13.3.5 预测变量值的4种类型
  277. 13.3.6 有监督学习与无监督学习
  278. 13.4 典型分类项目的工作流
  279. 13.4.1 第一阶段工作流:训练分类模型
  280. 1. 定义目标变量的类别
  281. 2. 搜集历史数据
  282. 3. 定义预测变量
  283. 4. 例1:将位置用作预测变量
  284. 5. 例2:不同的数据需要不同的预测变量
  285. 6. 选择一个学习算法来训练模型
  286. 7. 使用学习算法训练模型
  287. 13.4.2 第二阶段工作流:评估分类模型
  288. 13.4.3 第三阶段工作流:在生产中使用模型
  289. 13.5 循序渐进的简单分类示例
  290. 13.5.1 数据和挑战
  291. 13.5.2 训练一个模型来寻找填充颜色:初步设想
  292. 13.5.3 选择一个学习算法来训练模型
  293. 1. 开始运行Mahout
  294. 2. 查看Mahout的内建数据
  295. 3. 使用Mahout构建模型
  296. 13.5.4 改进填充颜色分类器的性能
  297. 1. 模型评估
  298. 2. 构建一个更有趣的模型
  299. 3. 再次测试
  300. 4. 用新数据进行测试
  301. 5. 尝试其他模型
  302. 13.6 小结
  303. 第14章 训练分类器
  304. 14.1 提取特征以构建分类器
  305. 14.2 原始数据的预处理
  306. 14.2.1 原始数据的转换
  307. 14.2.2 一个计算营销的例子
  308. 14.3 将可分类数据转换为向量
  309. 14.3.1 用向量表示数据
  310. 1. 每个词一个分量
  311. 2. 将向量作为词袋
  312. 3. 特征散列
  313. 14.3.2 用Mahout API做特征散列
  314. 1. 对连续型特征编码
  315. 2. 对类别型和单词型特征编码
  316. 3. 对文本型特征编码
  317. 4. 特征冲突
  318. 14.4 用SGD对20 Newsgroups数据集进行分类
  319. 14.4.1 开始:数据集预览
  320. 14.4.2 20 Newsgroups数据特征的解析和词条化
  321. 14.4.3 20 Newsgroups数据的训练代码
  322. Logistic回归分类器一览
  323. 1. 建立向量编码器
  324. 2. 配置学习算法
  325. 3. 访问数据文件
  326. 4. 数据词条化前的预备工作
  327. 5. 读取数据并进行词条化处理
  328. 6. 数据的向量化
  329. 7. 评估当前进度
  330. 8. 用编码数据训练SGD模型
  331. 14.5 选择训练分类器的算法
  332. 14.5.1 非并行但仍很强大的算法:SGD和SVM
  333. 1. SGD算法
  334. 2. SVM算法
  335. 14.5.2 朴素分类器的力量:朴素贝叶斯及补充朴素贝叶斯
  336. 14.5.3 精密结构的力量:随机森林算法
  337. 14.6 用朴素贝叶斯对20 Newsgroups数据分类
  338. 14.6.1 开始:为朴素贝叶斯提取数据
  339. 14.6.2 训练朴素贝叶斯分类器
  340. 14.6.3 测试朴素贝叶斯模型
  341. 14.7 小结
  342. 第15章 分类器评估及调优
  343. 15.1 Mahout中的分类器评估
  344. 15.1.1 获取即时反馈
  345. 15.1.2 确定分类“好”的含义
  346. 15.1.3 认识不同的错误代价
  347. 15.2 分类器评估API
  348. 15.2.1 计算AUC
  349. 15.2.2 计算混淆矩阵和熵矩阵
  350. 15.2.3 计算平均对数似然
  351. 15.2.4 模型剖析
  352. 15.2.5 20 Newsgroups语料上SGD分类器的性能指标计算
  353. 15.3 分类器性能下降时的处理
  354. 15.3.1 目标泄漏
  355. 15.3.2 特征提取崩溃
  356. 15.4 分类器性能调优
  357. 15.4.1 问题调整
  358. 1. 剔除无价值的变量
  359. 2. 增加新的变量、交互和导出值
  360. 15.4.2 分类器调优
  361. 1. 尝试其他算法
  362. 2. 调整学习算法
  363. 15.5 小结
  364. 第16章 分类器部署
  365. 16.1 巨型分类系统的部署过程
  366. 16.1.1 理解问题
  367. 16.1.2 根据需要优化特征提取过程
  368. 16.1.3 根据需要优化向量编码
  369. 16.1.4 部署可扩展的分类器服务
  370. 16.2 确定规模和速度需求
  371. 16.2.1 多大才算大
  372. 1. 训练样本数的含义
  373. 2. 分类批处理的规模
  374. 3. 最长响应时间和所需吞吐率
  375. 16.2.2 在规模和速度之间折中
  376. 1. 训练
  377. 2. 分类
  378. 16.3 对大型系统构建训练流水线
  379. 16.3.1 获取并保留大规模数据
  380. 1. 获取数据
  381. 2. 分割并存储数据
  382. 3. 增量式处理
  383. 16.3.2 非规范化及下采样
  384. 1. 首先联结目标变量
  385. 2. 内存中联结
  386. 3. 合并联结
  387. 4. 全Reduce联结
  388. 16.3.3 训练中的陷阱
  389. 1. 目标泄漏或目标泄漏
  390. 2. 数据表示中的语义失配
  391. 16.3.4 快速读取数据并对其进行编码
  392. 1. 分割字节,而非字符
  393. 2. 直接的数值编码器的接口
  394. 16.4 集成Mahout分类器
  395. 16.4.1 提前计划:集成中的关键问题
  396. 1. 职责分解
  397. 2. 实时特征是不同的
  398. 3. 记录分类请求
  399. 4. 速度上的设计
  400. 5. 模型协同更新
  401. 16.4.2 模型序列化
  402. 对SGD模型使用 ModelSerializer 类
  403. 16.5 案例:一个基于Thrift的分类服务器
  404. 16.5.1 运行分类服务器
  405. 16.5.2 访问分类器服务
  406. 16.6 小结
  407. 第17章 案例分析—Shop It To Me
  408. 17.1 Shop It To Me选择Mahout的原因
  409. 17.1.1 Shop It To Me公司简介
  410. 17.1.2  Shop It To Me需要分类系统的原因
  411. 17.1.3 对Mahout向外扩展
  412. 17.2 邮件交易系统的一般结构
  413. 17.3 训练模型
  414. 17.3.1 定义分类项目的目标
  415. 17.3.2 按时间划分
  416. 17.3.3 避免目标泄漏
  417. 17.3.4 调整学习算法
  418. 1. 基于每个用户的AUC进行优化
  419. 2. 将排序和评分混合学习
  420. 17.3.5 特征向量编码
  421. 17.4 加速分类过程
  422. 17.4.1 特征向量的线性组合
  423. 17.4.2 模型得分的线性扩展
  424. 17.5 小结
  425. 附录A JVM调优
  426. 附录B Mahout数学基础
  427. B.1 向量
  428. B.1.1 向量实现
  429. B.1.2 向量操作
  430. B.1.3 高级的向量方法
  431. B.2 矩阵
  432. 矩阵操作
  433. B.3 Mahout math和Hadoop
  434. 附录C 相关资源
  435. 相关资源
载入中

喜欢这本书的人也喜欢