Merge remote-tracking branch 'upstream/master'

This commit is contained in:
chenyyx
2017-09-14 17:11:06 +08:00
8 changed files with 88 additions and 366 deletions

View File

@@ -10,14 +10,14 @@
## 大数据 场景
```
假如你为一家网络购物商店工作,很多拥护访问该网站,其中有些人会购买商品,有些人则随意浏览后就离开。
假如你为一家网络购物商店工作,很多用户访问该网站,其中有些人会购买商品,有些人则随意浏览后就离开。
对于你来说,可能很想识别那些有购物意愿的用户。
那么问题就来了,数据集可能会非常大,在单机上训练要运行好几天。
接下来:我们讲讲 Hadoop 如何来解决这样的问题
接下来:我们讲讲 MapRedece 如何来解决这样的问题
```
## MapReduce
## MapRedece
### Hadoop 概述
@@ -79,21 +79,21 @@ cat input/15.BigData_MapReduce/inputFile.txt | python src/python/15.BigData_MapR
#### Mahout in Action
1. 简单贝叶斯:
2. k-近邻算法:
1. 简单贝叶斯:它属于为数不多的可以很自然的使用MapReduce的算法。通过统计在某个类别下某特征的概率。
2. k-近邻算法:高维数据下(如文本、图像和视频)流行的近邻查找方法是局部敏感哈希算法。
3. 支持向量机(SVM)使用随机梯度下降算法求解如Pegasos算法。
4. 奇异值分解Lanczos算法是一个有效的求解近似特征值的算法。
5. k-均值聚类canopy算法初始化k个簇然后再运行K-均值求解结果。
#### 使用 mrjob 库将 MapReduce 自动化
### 使用 mrjob 库将 MapReduce 自动化
> 理论简介
* MapReduce作业流自动化的框架Cascading 和 Oozie.
* mrjob是一个不错的学习工具与2010年底实现了开源来之于Yelp(一个餐厅点评网站).
* MapReduce 作业流自动化的框架Cascading 和 Oozie.
* mrjob 是一个不错的学习工具与2010年底实现了开源来之于 Yelp(一个餐厅点评网站).
```Shell
python mrMean.py < inputFile.txt > myOut.txt
python src/python/15.BigData_MapReduce/mrMean.py < input/15.BigData_MapReduce/inputFile.txt > input/15.BigData_MapReduce/myOut.txt
```
> 实战脚本
@@ -106,11 +106,11 @@ python mrMean.py < inputFile.txt > myOut.txt
python src/python/15.BigData_MapReduce/mrMean.py < input/15.BigData_MapReduce/inputFile.txt
```
#### 利用 Pegasos 算法并行训练支持向量机
### 项目案例:分布式 SVM 的 Pegasos 算法
Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
> Pegasos 工作原理
#### Pegasos 工作原理
1. 从训练集中随机挑选一些样本点添加到带处理列表中
2. 按序判断每个样本点是否被正确分类
@@ -130,7 +130,7 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
累加对 w 的更新
```
> 开发流程
#### 开发流程
```
收集数据:数据按文本格式存放。
@@ -141,6 +141,11 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
使用算法本例不会展示一个完整的应用但会展示如何在大数据集上训练SVM。该算法其中一个应用场景就是本文分类通常在文本分类里可能有大量的文档和成千上万的特征。
```
> 训练算法
[完整代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/2.KNN/kNN.py): <https://github.com/apachecn/MachineLearning/blob/master/src/python/2.KNN/kNN.py>
我们继续看 Python 版本的代码实现。
* * *

View File

@@ -78,17 +78,13 @@ Sigmoid 函数的输入记为 z ,由下面公式得到:
梯度上升算法用来求函数的最大值,而梯度下降算法用来求函数的最小值。
**如果大家对上面的例子不理解,下面我们看一个比较容易理解的例子。**
**局部最优现象**
![梯度下降图_4](../images/5.Logistic/LR_20.png)
上图表示参数 θ 与误差函数 J(θ) 的关系图,红色的部分是表示 J(θ) 有着比较高的取值,我们需要的是,能够让 J(θ) 的值尽量的低。也就是深蓝色的部分。θ0θ1 表示 θ 向量的两个维度。
在上面提到梯度下降法的第一步是给 θ 给一个初值,假设随机给的初值是在图上的十字点
然后我们将 θ 按照梯度下降的方向进行调整,就会使得 J(θ) 往更低的方向进行变化,如图所示,算法的结束将是在θ下降到无法继续下降为止。
当然,可能梯度下降的最终点并非是全局最小点,可能是一个局部最小点,如我们上图中的右边的梯度下降曲线,描述的是最终到达一个局部最小点,这是我们重新选择了一个初始点得到的。
可能梯度下降的最终点并非是全局最小点,可能是一个局部最小点,如我们上图中的右边的梯度下降曲线,描述的是最终到达一个局部最小点,这是我们重新选择了一个初始点得到的
看来我们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点。
@@ -100,7 +96,7 @@ Sigmoid 函数的输入记为 z ,由下面公式得到:
每个回归系数初始化为 1
重复 R 次:
计算整个数据集的梯度
使用 alpha x gradient 更新回归系数的向量
使用 步长 x 梯度 更新回归系数的向量
返回回归系数
```