@@ -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
0 commit comments