更新 pegasos 算法代码部分

This commit is contained in:
jiangzhonglian
2017-09-15 17:03:11 +08:00
parent a104caadb9
commit fc272b1fb4
2 changed files with 41 additions and 6 deletions

View File

@@ -143,11 +143,46 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver)
> 训练算法
```python
def batchPegasos(dataSet, labels, lam, T, k):
"""batchPegasos()
Args:
dataMat 特征集合
labels 分类结果集合
lam 固定值,微调的空间
T 迭代次数
k 待处理列表大小
Returns:
w 权重向量
"""
m, n = shape(dataSet)
w = zeros(n)
dataIndex = range(m)
for t in range(1, T+1):
wDelta = mat(zeros(n)) # 重置 wDelta
# 它是学习率,代表了权重调整幅度的大小。(也可以理解为随机梯度的步长)
# 输入T和K分别设定了迭代次数和待处理列表的大小。在T次迭代过程中每次需要重新计算eta
eta = 1.0/(lam*t)
random.shuffle(dataIndex)
for j in range(k): # 全部的训练集 内循环中执行批处理,将分类错误的值全部做累加后更新权重向量
i = dataIndex[j]
p = predict(w, dataSet[i, :]) # mapper 代码
# 如果预测正确,并且预测结果的绝对值>=1, 认为没问题。
# 否则算是预测错误, 通过预测错误的结果来累计更新w.
if labels[i]*p < 1: # mapper 代码
wDelta += labels[i]*dataSet[i, :].A # 累积变化
# w通过不断的随机梯度的方式来优化
w = (1.0 - 1/t)*w + (eta/k)*wDelta # 在每个 T上应用更改
# print '-----', w
# print '++++++', w
return w
```
[完整代码地址](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 版本的代码实现。
* * *
* **作者:[片刻](http://cwiki.apachecn.org/display/~jiangzhonglian) [小瑶](http://cwiki.apachecn.org/display/~chenyao)**

View File

@@ -58,7 +58,7 @@ def batchPegasos(dataSet, labels, lam, T, k):
for t in range(1, T+1):
wDelta = mat(zeros(n)) # 重置 wDelta
# 它是学习率,代表了权重调整幅度的大小。
# 它是学习率,代表了权重调整幅度的大小。(也可以理解为随机梯度的步长)
# 输入T和K分别设定了迭代次数和待处理列表的大小。在T次迭代过程中每次需要重新计算eta
eta = 1.0/(lam*t)
random.shuffle(dataIndex)
@@ -72,8 +72,8 @@ def batchPegasos(dataSet, labels, lam, T, k):
wDelta += labels[i]*dataSet[i, :].A # 累积变化
# w通过不断的随机梯度的方式来优化
w = (1.0 - 1/t)*w + (eta/k)*wDelta # 在每个 T上应用更改
print '-----', w
print '++++++', w
# print '-----', w
# print '++++++', w
return w