Merge pull request #94 from jiangzhonglian/master

更新13\14\15章的md的信息
This commit is contained in:
片刻
2017-06-20 21:51:14 +08:00
committed by GitHub
25 changed files with 344 additions and 136 deletions

19
bin/15_test.sh Normal file
View File

@@ -0,0 +1,19 @@
#!/bin/bash
# # 测试 Mapper
# # Linux
# cat input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapReduce/mrMeanMapper.py
# # # Window
# # python src/python/15.BigData_MapReduce/mrMeanMapper.py < input/15.BigData_MapReduce/inputFile.txt
# # 测试 Reducer
# # Linux
# cat input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapReduce/mrMeanMapper.py | python src/python/15.BigData_MapReduce/mrMeanReducer.py
# # # Window
# # python src/python/15.BigData_MapReduce/mrMeanMapper.py < input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapReduce/mrMeanReducer.py
# 测试 mrjob的案例
# 先测试一下mapper方法
# python src/python/15.BigData_MapReduce/mrMean.py --mapper < input/15.BigData_MapReduce/inputFile.txt
# 运行整个程序,移除 --mapper 就行
python src/python/15.BigData_MapReduce/mrMean.py < input/15.BigData_MapReduce/inputFile.txt

View File

@@ -111,5 +111,4 @@ http://baike.baidu.com/link?url=76P-uA4EBrC3G-I__P1tqeO7eoDS709Kp4wYuHxc7GNkz_xn
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [1988](http://www.apache.wiki/display/~lihuisong)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* [原文链接](https://github.com/apachecn/MachineLearning/blob/master/docs/1.%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80.md): <https://github.com/apachecn/MachineLearning/blob/master/docs/1.%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80.md>
* **版权声明: 内容由[ApacheCN(apache中文网)](http://www.apache.wiki)更新维护,欢迎转载学习-记得标注信息来源,谢谢**
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -43,3 +43,9 @@
* 如下图:
* ![所有可能的项集组合](/images/11.Apriori/所有可能的项集组合.png)
* 最后: 每次增加频繁项集的大小Apriori算法都会重新扫描整个数据集是否有优化空间呢 下一章FP-growth算法等着你的到来
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -26,3 +26,9 @@
## 项目实战
* 1.从Twitter文本流中挖掘常用词。
* 2.从网民页面浏览行为中挖掘常见模式。
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -1,4 +1,4 @@
# 13) 利用PCA来简化数据
# 13 利用PCA来简化数据
![利用PCA简化数据_首页](/images/13.PCA/利用PCA简化数据_首页.jpg)
@@ -9,7 +9,7 @@
* 人们实时的将显示器上的百万像素转换成为一个三维图像,该图像就给出运动场上球的位置。
* 在这个过程中,人们已经将数据从一百万维降至了三维。这就被称为`降维(dimensionality reduction)`
## 1.降维技术
## 降维技术
> 数据显示并非大规模特征下的唯一难题,对数据进行简化还有如下一系列的原因:
@@ -48,7 +48,7 @@
* 假设数据为多个数据源的混合观察结果这些数据源之间在统计上是相互独立的而在PCA中只假设数据是不相关的。
* 同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。
## 2.主成分分析(PCA)
## 主成分分析(PCA)
> PCA的优缺点
@@ -66,7 +66,7 @@
* 例如下图:
* ![应用PCA降维](/images/13.PCA/应用PCA降维.png)
## 3.对半导体数据进行降维处理
## 对半导体数据进行降维处理
```
半导体是在一些极为先进的工厂中制造出来的。设备的生命早期有限,并且话费极其巨大。
@@ -79,7 +79,7 @@
目前该章节处理的方案是将缺失值NaN(Not a Number缩写),全部用平均值来替代(如果用0来处理的策略就太差劲了)。
```
## 4.本章小节
## 本章小节
```
降维技术使得数据变的更易使用,并且它们往往能够去除数据中的噪音,使得其他机器学习任务更加精确。
@@ -90,3 +90,9 @@
如果使用在线PCA分析的方法你可以参考一篇优秀的论文 "Incremental Eigenanalysis for Classification"。
下一章要讨论的奇异值分解方法也可以用于特征值分析。
```
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -1,85 +1,125 @@
# 章节内容:
* SVD矩阵分解
* 推荐引擎
* 利用SVD提示推荐引擎的性能
# 第14章 利用SVD简化数据
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
# 1. SVD 的应用隐性语义索引LSI和推荐系统。
* 奇异值分解SVD提取信息的方法。可以把SVD看成是从噪声数据中抽取相关特征。
* 优点:简化数据,去除噪声,提高算法的结果。
* 缺点:数据的转换可能难以理解。
* 使用的数据类型:数值型数据。
![利用SVD简化数据首页](/images/14.SVD/svd_headPage.jpg "利用SVD简化数据首页")
# 补充:降维
* 降维dimensionality reduction
* 如果样本数据的特征维度很大,会使得难以分析和理解。我们可以通过降维技术减少维度
* 降维技术并不是将影响少的特征去掉,而是将样本数据集转换成一个低维度的数据集。
```
奇异值分解SVD, Singular Value Decomposition:
提取信息的一种方法可以把SVD看成是从噪声数据中抽取相关特征。从生物信息学到金融学SVD是提出信息的强大工具
# 1.1 隐性语义索引:矩阵 = 文档 + 词语
* 优点:简化数据,去除噪声,提高算法的结果
* 缺点:数据的转换可能难以理解
* 使用的数据类型:数值型数据
```
## SVD的应用
> 信息检索-隐形语义检索Lstent Semantic Indexing, LSI或 隐形语义分析Latent Semantic Analysis, LSA
隐性语义索引:矩阵 = 文档 + 词语
* 是最早的SVD应用之一。我们称利用SVD的方法为隐性语义索引LSI或隐性语义分析LSA
* ![LSA举例](/images/14.SVD/使用SVD简化数据-LSI举例.png)
# 2. 矩阵分解
* SVD 是矩阵分解的一种类型,而矩阵分解是将数据矩阵分解为多个独立部分的过程。
* 矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式时两个或多个矩阵的乘积。(类似代数中的因数分解)
> 推荐引擎
1. 利用SVD从数据中构建一个主题空间。
2. 再在该空间下计算其相似度。(从高维-低维空间的转化在低维空间来计算相似度SVD提升了推荐引擎的效率。)
* ![主题空间案例1](/images/14.SVD/SVD_推荐系统_主题空间案例1.jpg)
* 上图右边标注的为一组共同特征表示美式BBQ 空间;另一组在上图右边未标注的为日式食品 空间。
> 图像压缩
例如:`32*32=1024 => 32*2+2*1+32*2=130`(2*1表示去掉了除对角线的0), 几乎获得了10倍的压缩比。
## SVD矩阵分解
> 矩阵分解
* 矩阵分解是将数据矩阵分解为多个独立部分的过程。
* 矩阵分解可以将原始矩阵表示成新的易于处理的形式,这种新形式时两个或多个矩阵的乘积。(类似代数中的因数分解)
* 举例如何将12分解成两个数的乘积1122634都是合理的答案。
# SVD 矩阵最常见的分解技术。
* SVD将原始的数据集矩阵Data分解成三个矩阵U、∑、VT。
* 举例如果原始矩阵Data是m行n列那么U、∑、VT 就分别是m行m列、m行n列和n行n列。
> SVD 矩阵分解的一种类型,也是矩阵分解最常见的技术。
* SVD 将原始的数据集矩阵Data分解成三个矩阵U、∑、\\(V^T\\)
* 举例:如果原始矩阵 \\(Data_{m*n}\\) 是m行n列
* \\(U_{m*m}\\) 表示m行m列
* \\(∑_{m*n}\\) 表示m行n列
* \\(V^T_{n*n}\\) 表示n行n列。
* ![SVD公式](/images/14.SVD/使用SVD简化数据-SVD公式.png)
* 上述分解中会构建出一个矩阵∑该矩阵只有对角元素其他元素均为0。另一个惯例就是∑的对角元素是从大到小排列的。这些对角元素称为奇异值它们对应原始矩阵Data的奇异值。
* 奇异值与特征值是有关系的。这里的奇异值就是矩阵 Data * DateT 特征值的平方根。
* 上述分解中会构建出一个矩阵∑该矩阵只有对角元素其他元素均为0(近似于0)。另一个惯例就是∑的对角元素是从大到小排列的。这些对角元素称为奇异值它们对应原始矩阵Data的奇异值。
* 奇异值与特征值(PCA数据中重要特征)是有关系的。这里的奇异值就是矩阵 \\(Data * Date^T\\) 特征值的平方根。
* 普遍的事实:在某个奇异值的数目(r个=>奇异值的平方和累加到总值的90%以上)之后其他的奇异值都置为0(近似于0)。这意味着数据集中仅有r个重要特征而其余特征则都是噪声或冗余特征。
* 一个普遍的事实在某个奇异值的数目r 个之后其他的奇异值都置为0。这意味着数据集中仅有r个重要特征而其余特征则都是噪声或冗余特征。
## 推荐引擎
# 3. 利用Python 实现SVD
* Numpy 有一个称为linalg的线性代数工具箱。
> 基于协同过滤(collaborative filtering)的推荐引擎
# 4. 基于协同过滤的推荐引擎
* 利用Python 实现SVD(Numpy 有一个称为linalg的线性代数工具箱)
* 协同过滤:是通过将用户和其他用户的数据进行对比来实现推荐的。
* 当知道了两个用户或两个物品之间的相似度,我们就可以利用已有的数据来预测未知用户的喜好。
# 4.1 相似度计算
* 我们不利用专家所给出的重要属性来描述物品从而计算它们之间的相似度,而是利用用户对它们的意见来计算相似度。
> 相似度计算
* 1欧氏距离指在m维空间中两个点之间的真实距离或者向量的自然长度即改点到原点的距离。二维或三维中的欧氏距离就是两点之间的实际距离。
* 相似度= 1/(1+距离)
* 物品对越相似,它们的相似度值就越大。
* inA, inB 对于的为列向量
1. 欧氏距离指在m维空间中两个点之间的真实距离或者向量的自然长度即改点到原点的距离。二维或三维中的欧氏距离就是两点之间的实际距离。
* 相似度= 1/(1+欧式距离)
* `相似度= 1.0/(1.0 + la.norm(inA - inB))`
* 物品对越相似,它们的相似度值就越大。
2. 皮尔逊相关系数:度量的是两个向量之间的相似度。
* 相似度= 0.5 + 0.5*corrcoef() 【皮尔逊相关系数的取值范围从 -1 到 +1通过函数0.5 + 0.5\*corrcoef()这个函数计算把值归一化到0到1之间】
* `相似度= 0.5 + 0.5 * corrcoef(inA, inB, rowvar = 0)[0][1]`
* 相对欧氏距离的优势:它对用户评级的量级并不敏感。
3. 余弦相似度:计算的是两个向量夹角的余弦值。
* 余弦值 = (A·B)/(||A||·||B||) 【余弦值的取值范围也在-1到+1之间】
* 相似度= 0.5 + 0.5*余弦值
* `相似度= 0.5 + 0.5*( float(inA.T*inB) / la.norm(inA)*la.norm(inB))`
* 如果夹角为90度则相似度为0如果两个向量的方向相同则相似度为1.0。
* 2皮尔逊相关系数度量的是两个向量之间的相似度。
* 相对欧氏距离的优势:它对用户评级的量级并不敏感。
* 皮尔逊相关系数的取值范围从 -1 到 +1通过函数0.5 + 0.5*corrcoef()这个函数计算把值归一化到0到1之间。
> 基于物品的相似度和基于用户的相似度:物品比较少则选择物品相似度,用户比较少则选择用户相似度。【矩阵还是小一点好计算】
* 3余弦相似度:计算的是两个向量夹角的余弦值。
* 如果夹角为90度则相似度为0如果两个向量的方向相同则相似度为1.0。
* 余弦相似度的取值范围也在-1到+1之间。
* ![SVD公式](/images/14.SVD/使用SVD简化数据-余弦相似度.png)
# 4.2 基于物品的相似度和基于用户的相似度:物品比较多则选择物品相似度,用户比较多则选择用户相似度。
* 基于物品的相似度:计算物品之间的距离的方法。
* 基于物品相似度计算的时间会随物品数量的增加而增加。
* 基于物品的相似度:计算物品之间的距离。【耗时会随物品数量的增加而增加】
* ![SVD公式](/images/14.SVD/使用SVD简化数据-基于物品相似度.png)
* 基于用户的相似度:计算用户距离的方法。
* 基于用户的相似度计算的时间则会随着用户数量的增加而增加。
* 基于用户的相似度:计算用户之间的距离。【耗时会随用户数量的增加而增加】
* ![SVD公式](/images/14.SVD/使用SVD简化数据-基于用户相似度.png)
# 4.3 推荐引擎的评价
* 最小均方根误差(RMSE):推荐引擎评价的指标,先计算均方误差然后取其平方根。
> 推荐引擎的评价
* 采用交叉测试的方法。【就是将某些已知的评分值去掉,然后进行预测,最后计算预测值和真实值之间的差异】
* 推荐引擎评价的指标: 最小均方根误差(Root mean squared error, RMSE),也称标准误差(Standard error),就是计算均方误差的平均值然后取其平方根。
* 如果RMSE=1, 表示相差1个星级如果RMSE=2.5, 表示相差2.5个星级。
# 5. 示例:(看代码)
# 5.1 推荐未尝过的菜肴
* 1寻找用户没有评级的菜肴即在用户-物品矩阵中的0值
* 2在用户没有评级的所有物品中对每个物品预计一个可能的评级分数。这就是说我们认为用户可能会对物品的打分这个就是相似度计算的初衷
* 3对这些物品的评分从高到低进行排序返回前N个物品。
> 餐馆菜肴推荐引擎-案例
# 5.2 利用SVD提高推荐效果
* 将矩阵降维
* 推荐系统的工作过程给定一个用户系统会为此用户返回N个最好的推荐菜。
* 实现流程大致如下:
1. 寻找用户没有评级的菜肴,即在用户-物品矩阵中的0值。
2. 在用户没有评级的所有物品中,对每个物品预计一个可能的评级分数。这就是说:我们认为用户可能会对物品的打分(这就是相似度计算的初衷)。
3. 对这些物品的评分从高到低进行排序返回前N个物品。
* 现在我们来观测代码实现。
# 5.3 构建推荐引擎面临的挑战
> 补充:基于内容(content-based)的推荐
1. 通过各种标签来标记菜肴
2. 将这些属性作为相似度计算所需要的数据
3. 这就是:基于内容的推荐。
> 构建推荐引擎面临的挑战
* 问题
* 1在大规模的数据集上SVD分解会降低程序的速度
* 2存在其他很多规模扩展性的挑战性问题比如矩阵的表示方法和计算相似度得分消耗资源。
* 3如何在缺乏数据时给出好的推荐(冷启动问题,解决方案就是将推荐看成是搜索问题)
* 3如何在缺乏数据时给出好的推荐-称为冷启动【简单说:用户不会喜欢一个无效的物品,而用户不喜欢的物品又无效。】
* 建议
* 1在大型系统中SVD分解(可以在程序调入时运行一次)每天运行一次或者其频率更低,并且还要离线运行。
* 2在实际中另一个普遍的做法就是离线计算并保存相似度得分。(物品相似度可能被用户重复的调用)
* 3冷启动问题解决方案就是将推荐看成是搜索问题通过各种标签属性特征进行`基于内容的推荐`
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [1988](http://www.apache.wiki/display/~lihuisong)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -1,22 +1,21 @@
# 大数据与MapReduce
> 本章内容
![大数据与MapReduce首页](/images/15.BigData_MapReduce/mr_headPage.jpg "大数据与MapReduce首页")
* MapReduce
* Python中Hadoop流的使用
* 使用mrjob库将MapReduce自动化
* 利用Pegasos算法并行训练支持向量机
`大数据: 收集到的数据已经远远超出了我们的处理能力。`
## MapReduce:分布式计算的框架
## MapReduce
```
优点:可在短时间内完成大量工作
缺点:算法必须经过重写,需要对系统工程有一定的理解
适用数据类型:数值型和标称型数据
Hadoop 是 MapRedece框架的一个免费开源实现
MapReduce: 分布式的计算框架,可以将单个计算作业分配给多台计算机执行
优点: 使程序以并行的方式执行,可在短时间内完成大量工作
缺点: 算法必须经过重写,需要对系统工程有一定的理解。
适用数据类型: 数值型和标称型数据。
```
* MapReduce集群的示意图
![MapReduce集群的示意图](/images/15.BigData_MapReduce/MR_1_cluster.jpg)
* MapReduce框架的示意图
* ![MapReduce框架的示意图](/images/15.BigData_MapReduce/mr_1_cluster.jpg)
> 关于MapRduce的学习要点
@@ -27,16 +26,104 @@
* 数据被重复存放在不同的机器上,以防止某个机器实效
* mapper和reducer传输的数据形式为key/value对
## Hadoop流
## Python中Hadoop流的使用
## 在Amazon网络服务商运行Hadoop程序
> 理论简介
例如: Hadoop流可以像Linux命令一样执行
```Shell
cat inputFile.txt | python mapper.py | sort | python reducer.py > outputFile.txt
```
类似的Hadoop流就可以在多台机器上分布式执行用户可以通过Linux命令来测试Python语言编写的MapReduce脚本。
> 实战脚本
```
# 测试 Mapper
# Linux
cat input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapReduce/mrMeanMapper.py
# # Window
# python src/python/15.BigData_MapReduce/mrMeanMapper.py < input/15.BigData_MapReduce/inputFile.txt
# 测试 Reducer
# Linux
cat input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapReduce/mrMeanMapper.py | python src/python/15.BigData_MapReduce/mrMeanReducer.py
# # Window
# python src/python/15.BigData_MapReduce/mrMeanMapper.py < input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapReduce/mrMeanReducer.py
```
## MapReduce上的机器学习
## 在Python中使用mrjob来自动化MapReduce
> Mahout in Action
## 示例分布式SVM的Pegasos算法
1. 简单贝叶斯:
2. k-近邻算法:
3. 支持向量机(SVM)使用随机梯度下降算法求解如Pegasos算法。
4. 奇异值分解Lanczos算法是一个有效的求解近似特征值的算法。
5. k-均值聚类canopy算法初始化k个簇然后再运行K-均值求解结果。
## 你真的需要MapReduce吗?
## 使用mrjob库将MapReduce自动化
## 本章小节
> 理论简介
* MapReduce作业流自动化的框架Cascading 和 Oozie.
* mrjob是一个不错的学习工具与2010年底实现了开源来之于Yelp(一个餐厅点评网站).
```Shell
python mrMean.py < inputFile.txt > myOut.txt
```
> 实战脚本
```
# 测试 mrjob的案例
# 先测试一下mapper方法
# python src/python/15.BigData_MapReduce/mrMean.py --mapper < input/15.BigData_MapReduce/inputFile.txt
# 运行整个程序,移除 --mapper 就行
python src/python/15.BigData_MapReduce/mrMean.py < input/15.BigData_MapReduce/inputFile.txt
```
## 利用Pegasos算法并行训练支持向量机
> 在MapReduce框架上使用SVM的一般方法
```
收集数据:数据按文本格式存放。
准备数据输入数据已经是可用的格式所以不需任何准备工作。如果你需要解析一个大规模的数据集建议使用map作业来完成从而达到并行处理的目的。
分析数据:无。
训练算法与普通的SVM一样在分类器训练上仍需花费大量的时间。
测试算法:在二维空间上可视化之后,观察超平面,判断算法是否有效。
使用算法本例不会展示一个完整的应用但会展示如何在大数据集上训练SVM。该算法其中一个应用场景就是本文分类通常在文本分类里可能有大量的文档和成千上万的特征。
```
> Pegasos 算法
Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)。
Pegasos算法工作流程是
1. 从训练集中随机挑选一些样本点添加到带处理列表中
2. 按序判断每个样本点是否被正确分类
* 如果是则忽略
* 如果不是则将其加入到待更新集合。
3. 批处理完毕后,权重向量按照这些错分的样本进行更新。
上述算法伪代码如下:
```
将w初始化为0
对每次批处理
随机选择k个样本点(向量)
对每个向量
如果该向量被错分:
更新权重向量w
累加对w的更新
```
我们继续看Python版本的代码实现。
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [小瑶](http://www.apache.wiki/display/~chenyao)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -17,7 +17,11 @@
![基于知识的推荐](/images/16.RecommendedSystem/基于知识的推荐.jpg)
* * *
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**
> 摘录的原文地址:

View File

@@ -133,8 +133,8 @@ $$\sqrt{(0-67)^2 + (20000-32000)^2 + (1.1-0.1)^2 }$$
* 阅读本章之前建议阅读一下numpy的文档
* [numpy英文文档](https://docs.scipy.org/doc/numpy-dev/user/quickstart.html "NumPy英文文档")
* [numpy中文文档](http://old.sebug.net/paper/books/scipydoc/numpy_intro.html "NumPy中文文档")
* * *
* * *
* **作者:[羊三](http://www.apache.wiki/display/~xuxin) [小瑶](http://www.apache.wiki/display/~chenyao)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>

View File

@@ -105,6 +105,7 @@
* 简单来说:就是从一个数据集中随机选取子项,度量其被错误分类到其他分组里的概率。
* 流程介绍图
* ![决策树流程介绍图](/images/3.DecisionTree/决策树流程介绍图.jpg)
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [小瑶](http://www.apache.wiki/display/~chenyao)**

View File

@@ -131,9 +131,10 @@ p(ci|x,y) = p(x,y|ci)·p(ci)/p(x,y)
* 总结
* 这一块代码比较乱,最好先把公式理一理再看
* 可以参考一下[阮一峰的博客](http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html)
* * *
* **作者:[羊三](http://www.apache.wiki/display/~xuxin) [小瑶](http://www.apache.wiki/users/viewmyprofile.action)**
* **作者:[羊三](http://www.apache.wiki/display/~xuxin) [小瑶](http://www.apache.wiki/display/~chenyao)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -116,8 +116,9 @@
* 5.4 代价函数
* 5.5 简化的成本函数和梯度下降
* 5.6 高级优化
* * *
* **作者:[羊三](http://www.apache.wiki/display/~xuxin) [小瑶](http://www.apache.wiki/users/viewmyprofile.action)**
* **作者:[羊三](http://www.apache.wiki/display/~xuxin) [小瑶](http://www.apache.wiki/display/~chenyao)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -170,3 +170,9 @@ SMO伪代码大致如下
* 核函数并不仅仅应用于支持向量机,很多其他的机器学习算法也都用到核函数。最流行的核函数:径向基函数(radial basis function)
* 径向基函数的高斯版本,其具体的公式为:
* ![径向基函数的高斯版本](/images/6.SVM/SVM_6_radial-basis-function.jpg)
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [geekidentity](http://www.apache.wiki/display/~houfachao)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -47,3 +47,9 @@
* 欠抽样(undersampling)或者过抽样(oversampling)
* 欠抽样: 意味着删除样例
* 过抽样: 意味着复制样例(重复使用)
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -30,3 +30,9 @@
> 随机森林-流程图
![随机森林-流程图](/images/7.RandomForest/RandomForest_Flow.jpg)
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -164,8 +164,9 @@
这时可以考虑使用岭回归因为当x^Tx的逆不能计算时它仍保证能求得回归系数。
岭回归是缩减法的一种相当于对回归系数的大小施加了限制。另一种很好的缩减法是lasso。Lasso难以理解但可以使用计算简便的逐步线性回归方法来求得近似结果。
缩减法还可以看做是对一个模型增加偏差的同时减少方差。偏差方差折中是一个重要的概念,可以帮助我们理解现有模型并做出改进,从而得到最好的模型。
* * *
* **作者:[小瑶](http://www.apache.wiki/users/viewmyprofile.action) [片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* **作者:[小瑶](http://www.apache.wiki/display/~chenyao) [片刻](http://www.apache.wiki/display/~jiangzhonglian)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

View File

@@ -156,8 +156,9 @@
构建完毕再进行剪枝),预剪枝更有效但需要用户定义一些参数。
Tkinter 是 Python 的一个 GUI 工具包。虽然并不是唯一的包,但它最常用。利用 Tkinter ,我们可以轻轻松松绘制各种部件并安排它们的位置。另外,可以为
Tkinter 构造一个特殊的部件来显示 Matplotlib 绘出的图。所以Matplotlib 和 Tkinter 的集成可以构建出更强大的 GUI ,用户可以以更自然的方式来探索机器学习算法的奥妙。
* * *
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [小瑶](http://www.apache.wiki/users/viewmyprofile.action)**
* **作者:[片刻](http://www.apache.wiki/display/~jiangzhonglian) [小瑶](http://www.apache.wiki/display/~chenyao)**
* [GitHub地址](https://github.com/apachecn/MachineLearning): <https://github.com/apachecn/MachineLearning>
* **版权声明:欢迎转载学习 => 请标注信息来源于 [ApacheCN](http://www.apache.wiki)**

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

View File

@@ -3,7 +3,7 @@
'''
Created on Mar 8, 2011
Update on 2017-05-18
@author: Peter Harrington/山上有课树
@author: Peter Harrington/山上有课树/片刻
《机器学习实战》更新地址https://github.com/apachecn/MachineLearning
'''
from numpy import linalg as la

View File

@@ -1,45 +1,58 @@
#!/usr/bin/python
# coding:utf8
'''
Created on 2017-04-07
@author: Peter/ApacheCN-xy
Update on 2017-06-20
@author: Peter/ApacheCN-xy/片刻
《机器学习实战》更新地址https://github.com/apachecn/MachineLearning
'''
from mrjob.job import MRJob
class MRmean(MRJob):
def __init__(self, *args, **kwargs): # 对数据初始化
def __init__(self, *args, **kwargs): # 对数据初始化
super(MRmean, self).__init__(*args, **kwargs)
self.inCount = 0
self.inSum = 0
self.inSqSum = 0
def map(self, key, val): # 需要 2 个参数,求数据的和与平方和
if False: yield
# 接受输入数据流
def map(self, key, val): # 需要 2 个参数,求数据的和与平方和
if False:
yield
inVal = float(val)
self.inCount += 1
self.inSum += inVal
self.inSqSum += inVal*inVal
def map_final(self): # 计算数据的平均值,平方的均值,并返回
# 所有输入到达后开始处理
def map_final(self): # 计算数据的平均值,平方的均值,并返回
mn = self.inSum/self.inCount
mnSq = self.inSqSum/self.inCount
yield (1, [self.inCount, mn, mnSq])
def reduce(self, key, packedValues):
cumVal=0.0; cumSumSq=0.0; cumN=0.0
for valArr in packedValues: # 从输入流中获取值
cumN, cumVal, cumSumSq = 0.0, 0.0, 0.0
for valArr in packedValues: # 从输入流中获取值
nj = float(valArr[0])
cumN += nj
cumVal += nj*float(valArr[1])
cumSumSq += nj*float(valArr[2])
mean = cumVal/cumN
var = (cumSumSq - 2*mean*cumVal + cumN*mean*mean)/cumN
yield (mean, var) # 发出平均值和方差
yield (mean, var) # 发出平均值和方差
def steps(self):
"""
step方法定义执行的步骤。
执行顺序不必完全遵循map-reduce模式。
例如:
1. map-reduce-reduce-reduce
2. map-reduce-map-reduce-map-reduce
在step方法里需要为mrjob指定mapper和reducer的名称。如果没有它将默认调用mapper和reducer方法。
在mapper 和 mapper_final中还可以共享状态mapper 或 mapper_final 不能 reducer之间共享状态。
"""
return ([self.mr(mapper=self.map, mapper_final=self.map_final, reducer=self.reduce,)])

View File

@@ -2,34 +2,39 @@
# coding:utf8
'''
Created on 2017-04-06
Update on 2017-06-20
Machine Learning in Action Chapter 18
Map Reduce Job for Hadoop Streaming
@author: Peter Harrington/ApacheCn-xy
'''
'''
这个mapper文件按行读取所有的输入并创建一组对应的浮点数然后得到数组的长度并创建NumPy矩阵。
再对所有的值进行平方,最后将均值和平方后的均值发送出去。这些值将用来计算全局的均值和方差。
Args
file 输入数据
Return
Map Reduce Job for Hadoop Streaming
@author: Peter/ApacheCN-xy/片刻
《机器学习实战》更新地址https://github.com/apachecn/MachineLearning
'''
import sys
from numpy import mat, mean, power
'''
这个mapper文件按行读取所有的输入并创建一组对应的浮点数然后得到数组的长度并创建NumPy矩阵。
再对所有的值进行平方,最后将均值和平方后的均值发送出去。这些值将用来计算全局的均值和方差。
Args
file 输入数据
Return
'''
def read_input(file):
for line in file:
yield line.rstrip() # 返回值中包含输入文件的每一行的数据的一个大的List
input = read_input(sys.stdin) # 创建一个输入的数据行的列表list
input = [float(line) for line in input] # 将得到的数据转化为 float 类型
numInputs = len(input) # 获取数据的个数,即输入文件的数据的行数
input = mat(input) # 将 List 转换为矩阵
sqInput = power(input,2) # 将矩阵的数据分别求 平方,即 2次方
yield line.rstrip() # 返回一个 yield 迭代器,每次获取下一个值,节约内存。
input = read_input(sys.stdin) # 创建一个输入的数据行的列表list
input = [float(line) for line in input] # 将得到的数据转化为 float 类型
numInputs = len(input) # 获取数据的个数,即输入文件的数据的行数
input = mat(input) # 将 List 转换为矩阵
sqInput = power(input, 2) # 将矩阵的数据分别求 平方,即 2次方
# 输出 数据的个数n个数据的均值n个数据平方之后的均值
print ("%d\t%f\t%f" % (numInputs, mean(input), mean(sqInput))) #计算均值
print >> sys.stderr, "report: still alive"
# 第一行是标准输出也就是reducer的输出
# 第二行识标准错误输出,即对主节点作出的响应报告,表明本节点工作正常。
# 【这不就是面试的装逼重点吗如何设计监听架构细节】注意一个好的习惯是想标准错误输出发送报告。如果某任务10分钟内没有报告输出则将被Hadoop中止。
print("%d\t%f\t%f" % (numInputs, mean(input), mean(sqInput))) # 计算均值
print >> sys.stderr, "map report: still alive"

View File

@@ -3,44 +3,44 @@
'''
Created on 2017-04-06
Update on 2017-06-20
Machine Learning in Action Chapter 18
Map Reduce Job for Hadoop Streaming
@author: Peter Harrington/ApacheCn-xy
Map Reduce Job for Hadoop Streaming
@author: Peter/ApacheCN-xy/片刻
《机器学习实战》更新地址https://github.com/apachecn/MachineLearning
'''
import sys
'''
mapper 接受原始的输入并产生中间值传递给 reducer。
很多的mapper是并行执行的所以需要将这些mapper的输出合并成一个值。
即:将中间的 key/value 对进行组合。
'''
import sys
from numpy import mat, mean, power
def read_input(file):
for line in file:
yield line.rstrip() # 返回值中包含输入文件的每一行的数据的一个大的List
input = read_input(sys.stdin) # 创建一个输入的数据行的列表list
# 将输入行分割成单独的项目并存储在列表的列表中
mapperOut = [line.split('\t') for line in input]
# 输入 数据的个数n个数据的均值n个数据平方之后的均值
print (mapperOut)
# 累计样本总和,总和 和 总和 sq
cumVal=0.0
cumSumSq=0.0
cumN=0.0
# 累计样本总和,总和 和 平分和的总和
cumN, cumVal, cumSumSq = 0.0, 0.0, 0.0
for instance in mapperOut:
nj = float(instance[0])
cumN += nj
cumVal += nj*float(instance[1])
cumSumSq += nj*float(instance[2])
#计算均值
mean = cumVal/cumN
meanSq = cumSumSq/cumN
#输出 数据总量,均值,平方的均值(方差)
print ("%d\t%f\t%f" % (cumN, mean, meanSq))
print >> sys.stderr, "report: still alive"
# 计算均值( varSum是计算方差的展开形式 )
mean_ = cumVal/cumN
varSum = (cumSumSq - 2*mean_*cumVal + cumN*mean_*mean_)/cumN
# 输出 数据总量,均值,平方的均值(方差)
print ("数据总量:%d\t均值:%f\t方差:%f" % (cumN, mean_, varSum))
print >> sys.stderr, "reduce report: still alive"