mirror of
https://github.com/apachecn/ailearning.git
synced 2026-05-07 14:13:14 +08:00
更新 pegasos 算法代码部分
This commit is contained in:
@@ -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)**
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user