Skip to content

Commit a104caa

Browse files
pagasos python版本的注释更新
1 parent 1bbd40e commit a104caa

1 file changed

Lines changed: 26 additions & 6 deletions

File tree

src/python/15.BigData_MapReduce/pegasos.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,43 @@ def seqPegasos(dataSet, labels, lam, T):
3737

3838

3939
def predict(w, x):
40-
return w*x.T
40+
return w*x.T # 就是预测 y 的值
4141

4242

4343
def batchPegasos(dataSet, labels, lam, T, k):
44+
"""batchPegasos()
45+
46+
Args:
47+
dataMat 特征集合
48+
labels 分类结果集合
49+
lam 固定值,微调的空间
50+
T 迭代次数
51+
k 待处理列表大小
52+
Returns:
53+
w 权重向量
54+
"""
4455
m, n = shape(dataSet)
4556
w = zeros(n)
4657
dataIndex = range(m)
4758
for t in range(1, T+1):
4859
wDelta = mat(zeros(n)) # 重置 wDelta
60+
61+
# 它是学习率,代表了权重调整幅度的大小。
62+
# 输入T和K分别设定了迭代次数和待处理列表的大小。在T次迭代过程中,每次需要重新计算eta
4963
eta = 1.0/(lam*t)
5064
random.shuffle(dataIndex)
51-
for j in range(k): # 全部的训练集
65+
for j in range(k): # 全部的训练集 内循环中执行批处理,将分类错误的值全部做累加后更新权重向量
5266
i = dataIndex[j]
53-
p = predict(w, dataSet[i, :]) # mapper 代码
54-
if labels[i]*p < 1: # mapper 代码
55-
wDelta += labels[i]*dataSet[i, :].A # 累积变化
56-
w = (1.0 - 1/t)*w + (eta/k)*wDelta # 在每个 T上应用更改
67+
p = predict(w, dataSet[i, :]) # mapper 代码
68+
69+
# 如果预测正确,并且预测结果的绝对值>=1, 认为没问题。
70+
# 否则算是预测错误, 通过预测错误的结果,来累计更新w.
71+
if labels[i]*p < 1: # mapper 代码
72+
wDelta += labels[i]*dataSet[i, :].A # 累积变化
73+
# w通过不断的随机梯度的方式来优化
74+
w = (1.0 - 1/t)*w + (eta/k)*wDelta # 在每个 T上应用更改
75+
print '-----', w
76+
print '++++++', w
5777
return w
5878

5979

0 commit comments

Comments
 (0)