diff --git a/docs/15.大数据与MapReduce.md b/docs/15.大数据与MapReduce.md index 83e4cc5e..89236c50 100644 --- a/docs/15.大数据与MapReduce.md +++ b/docs/15.大数据与MapReduce.md @@ -121,7 +121,7 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver) 上述算法伪代码如下: ``` -将 w 初始化为0 +将 回归系数w 初始化为0 对每次批处理 随机选择 k 个样本点(向量) 对每个向量 @@ -141,6 +141,36 @@ Pegasos是指原始估计梯度求解器(Peimal Estimated sub-GrAdient Solver) 使用算法:本例不会展示一个完整的应用,但会展示如何在大数据集上训练SVM。该算法其中一个应用场景就是本文分类,通常在文本分类里可能有大量的文档和成千上万的特征。 ``` +> 收集数据 + +文本文件数据格式如下: + +```python +0.365032 2.465645 -1 +-2.494175 -0.292380 -1 +-3.039364 -0.123108 -1 +1.348150 0.255696 1 +2.768494 1.234954 1 +1.232328 -0.601198 1 +``` + +> 准备数据 + +```python +def loadDataSet(fileName): + dataMat = [] + labelMat = [] + fr = open(fileName) + for line in fr.readlines(): + lineArr = line.strip().split('\t') + # dataMat.append([float(lineArr[0]), float(lineArr[1]), float(lineArr[2])]) + dataMat.append([float(lineArr[0]), float(lineArr[1])]) + labelMat.append(float(lineArr[2])) + return dataMat, labelMat +``` + +> 分析数据: 无 + > 训练算法 ```python @@ -150,19 +180,19 @@ def batchPegasos(dataSet, labels, lam, T, k): Args: dataMat 特征集合 labels 分类结果集合 - lam 固定值,微调的空间 + lam 固定值 T 迭代次数 k 待处理列表大小 Returns: - w 权重向量 + w 回归系数 """ m, n = shape(dataSet) - w = zeros(n) + 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) @@ -170,7 +200,7 @@ def batchPegasos(dataSet, labels, lam, T, k): i = dataIndex[j] p = predict(w, dataSet[i, :]) # mapper 代码 - # 如果预测正确,并且预测结果的绝对值>=1, 认为没问题。 + # 如果预测正确,并且预测结果的绝对值>=1,因为最大间隔为1, 认为没问题。 # 否则算是预测错误, 通过预测错误的结果,来累计更新w. if labels[i]*p < 1: # mapper 代码 wDelta += labels[i]*dataSet[i, :].A # 累积变化 @@ -183,7 +213,7 @@ def batchPegasos(dataSet, labels, lam, T, k): [完整代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/pegasos.py): -[MR版本的代码位置](https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/mrSVM.py): +[MR版本的代码地址](https://github.com/apachecn/MachineLearning/blob/master/src/python/15.BigData_MapReduce/mrSVM.py): * * * diff --git a/src/python/15.BigData_MapReduce/pegasos.py b/src/python/15.BigData_MapReduce/pegasos.py index eaa05d49..115a0fee 100644 --- a/src/python/15.BigData_MapReduce/pegasos.py +++ b/src/python/15.BigData_MapReduce/pegasos.py @@ -46,19 +46,19 @@ def batchPegasos(dataSet, labels, lam, T, k): Args: dataMat 特征集合 labels 分类结果集合 - lam 固定值,微调的空间 + lam 固定值 T 迭代次数 k 待处理列表大小 Returns: - w 权重向量 + w 回归系数 """ m, n = shape(dataSet) - w = zeros(n) + 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) @@ -66,7 +66,7 @@ def batchPegasos(dataSet, labels, lam, T, k): i = dataIndex[j] p = predict(w, dataSet[i, :]) # mapper 代码 - # 如果预测正确,并且预测结果的绝对值>=1, 认为没问题。 + # 如果预测正确,并且预测结果的绝对值>=1,因为最大间隔为1, 认为没问题。 # 否则算是预测错误, 通过预测错误的结果,来累计更新w. if labels[i]*p < 1: # mapper 代码 wDelta += labels[i]*dataSet[i, :].A # 累积变化