Skip to content

Commit ac35d7b

Browse files
更新 15章的项目案例
1 parent a901e7f commit ac35d7b

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

docs/15.大数据与MapReduce.md

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
121121
上述算法伪代码如下:
122122

123123
```
124-
w 初始化为0
124+
回归系数w 初始化为0
125125
对每次批处理
126126
随机选择 k 个样本点(向量)
127127
对每个向量
@@ -141,6 +141,36 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
141141
使用算法:本例不会展示一个完整的应用,但会展示如何在大数据集上训练SVM。该算法其中一个应用场景就是本文分类,通常在文本分类里可能有大量的文档和成千上万的特征。
142142
```
143143

144+
> 收集数据
145+
146+
文本文件数据格式如下:
147+
148+
```python
149+
0.365032 2.465645 -1
150+
-2.494175 -0.292380 -1
151+
-3.039364 -0.123108 -1
152+
1.348150 0.255696 1
153+
2.768494 1.234954 1
154+
1.232328 -0.601198 1
155+
```
156+
157+
> 准备数据
158+
159+
```python
160+
def loadDataSet(fileName):
161+
dataMat = []
162+
labelMat = []
163+
fr = open(fileName)
164+
for line in fr.readlines():
165+
lineArr = line.strip().split('\t')
166+
# dataMat.append([float(lineArr[0]), float(lineArr[1]), float(lineArr[2])])
167+
dataMat.append([float(lineArr[0]), float(lineArr[1])])
168+
labelMat.append(float(lineArr[2]))
169+
return dataMat, labelMat
170+
```
171+
172+
> 分析数据: 无
173+
144174
> 训练算法
145175
146176
```python
@@ -150,27 +180,27 @@ def batchPegasos(dataSet, labels, lam, T, k):
150180
Args:
151181
dataMat 特征集合
152182
labels 分类结果集合
153-
lam 固定值,微调的空间
183+
lam 固定值
154184
T 迭代次数
155185
k 待处理列表大小
156186
Returns:
157-
w 权重向量
187+
w 回归系数
158188
"""
159189
m, n = shape(dataSet)
160-
w = zeros(n)
190+
w = zeros(n) # 回归系数
161191
dataIndex = range(m)
162192
for t in range(1, T+1):
163193
wDelta = mat(zeros(n)) # 重置 wDelta
164194

165-
# 它是学习率,代表了权重调整幅度的大小。(也可以理解为随机梯度的步长)
195+
# 它是学习率,代表了权重调整幅度的大小。(也可以理解为随机梯度的步长,使它不断减小,便于拟合
166196
# 输入T和K分别设定了迭代次数和待处理列表的大小。在T次迭代过程中,每次需要重新计算eta
167197
eta = 1.0/(lam*t)
168198
random.shuffle(dataIndex)
169199
for j in range(k): # 全部的训练集 内循环中执行批处理,将分类错误的值全部做累加后更新权重向量
170200
i = dataIndex[j]
171201
p = predict(w, dataSet[i, :]) # mapper 代码
172202

173-
# 如果预测正确,并且预测结果的绝对值>=1, 认为没问题。
203+
# 如果预测正确,并且预测结果的绝对值>=1,因为最大间隔为1, 认为没问题。
174204
# 否则算是预测错误, 通过预测错误的结果,来累计更新w.
175205
if labels[i]*p < 1: # mapper 代码
176206
wDelta += labels[i]*dataSet[i, :].A # 累积变化
@@ -183,7 +213,7 @@ def batchPegasos(dataSet, labels, lam, T, k):
183213

184214
[完整代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/pegasos.py): <https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/pegasos.py>
185215

186-
[MR版本的代码位置](https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/mrSVM.py): <https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/mrSVM.py>
216+
[MR版本的代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/mrSVM.py): <https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/mrSVM.py>
187217

188218
* * *
189219

src/python/15.BigData_MapReduce/pegasos.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,27 +46,27 @@ def batchPegasos(dataSet, labels, lam, T, k):
4646
Args:
4747
dataMat 特征集合
4848
labels 分类结果集合
49-
lam 固定值,微调的空间
49+
lam 固定值
5050
T 迭代次数
5151
k 待处理列表大小
5252
Returns:
53-
w 权重向量
53+
w 回归系数
5454
"""
5555
m, n = shape(dataSet)
56-
w = zeros(n)
56+
w = zeros(n) # 回归系数
5757
dataIndex = range(m)
5858
for t in range(1, T+1):
5959
wDelta = mat(zeros(n)) # 重置 wDelta
6060

61-
# 它是学习率,代表了权重调整幅度的大小。(也可以理解为随机梯度的步长)
61+
# 它是学习率,代表了权重调整幅度的大小。(也可以理解为随机梯度的步长,使它不断减小,便于拟合
6262
# 输入T和K分别设定了迭代次数和待处理列表的大小。在T次迭代过程中,每次需要重新计算eta
6363
eta = 1.0/(lam*t)
6464
random.shuffle(dataIndex)
6565
for j in range(k): # 全部的训练集 内循环中执行批处理,将分类错误的值全部做累加后更新权重向量
6666
i = dataIndex[j]
6767
p = predict(w, dataSet[i, :]) # mapper 代码
6868

69-
# 如果预测正确,并且预测结果的绝对值>=1, 认为没问题。
69+
# 如果预测正确,并且预测结果的绝对值>=1,因为最大间隔为1, 认为没问题。
7070
# 否则算是预测错误, 通过预测错误的结果,来累计更新w.
7171
if labels[i]*p < 1: # mapper 代码
7272
wDelta += labels[i]*dataSet[i, :].A # 累积变化

0 commit comments

Comments
 (0)