1717
1818# 解析数据
1919def loadDataSet (file_name ):
20+ '''
21+ Desc:
22+ 加载并解析数据
23+ Args:
24+ file_name -- 文件名称,要解析的文件所在磁盘位置
25+ Returns:
26+ dataMat -- 原始数据的特征
27+ labelMat -- 原始数据的标签,也就是每条样本对应的类别
28+ '''
2029 # dataMat为原始数据, labelMat为原始数据的标签
2130 dataMat = []; labelMat = []
2231 fr = open (file_name )
@@ -36,6 +45,16 @@ def sigmoid(inX):
3645# 两个参数:第一个参数==> dataMatIn 是一个2维NumPy数组,每列分别代表每个不同的特征,每行则代表每个训练样本。
3746# 第二个参数==> classLabels 是类别标签,它是一个 1*100 的行向量。为了便于矩阵计算,需要将该行向量转换为列向量,做法是将原向量转置,再将它赋值给labelMat。
3847def gradAscent (dataMatIn , classLabels ):
48+ '''
49+ Desc:
50+ 正常的梯度上升法
51+ Args:
52+ dataMatIn -- 输入的 数据的特征 List
53+ classLabels -- 输入的数据的类别标签
54+ Returns:
55+ array(weights) -- 得到的最佳回归系数
56+ '''
57+
3958 # 转化为矩阵[[1,1,2],[1,1,2]....]
4059 dataMatrix = mat (dataMatIn ) # 转换为 NumPy 矩阵
4160 # 转化为矩阵[[0,1,0,1,0,1.....]],并转制[[0],[1],[0].....]
@@ -72,6 +91,15 @@ def gradAscent(dataMatIn, classLabels):
7291# 梯度上升优化算法在每次更新数据集时都需要遍历整个数据集,计算复杂都较高
7392# 随机梯度上升一次只用一个样本点来更新回归系数
7493def stocGradAscent0 (dataMatrix , classLabels ):
94+ '''
95+ Desc:
96+ 随机梯度上升,只使用一个样本点来更新回归系数
97+ Args:
98+ dataMatrix -- 输入数据的数据特征(除去最后一列)
99+ classLabels -- 输入数据的类别标签(最后一列数据)
100+ Returns:
101+ weights -- 得到的最佳回归系数
102+ '''
75103 m ,n = shape (dataMatrix )
76104 alpha = 0.01
77105 # n*1的矩阵
@@ -91,6 +119,16 @@ def stocGradAscent0(dataMatrix, classLabels):
91119
92120# 随机梯度上升算法(随机化)
93121def stocGradAscent1 (dataMatrix , classLabels , numIter = 150 ):
122+ '''
123+ Desc:
124+ 改进版的随机梯度上升,使用随机的一个样本来更新回归系数
125+ Args:
126+ dataMatrix -- 输入数据的数据特征(除去最后一列数据)
127+ classLabels -- 输入数据的类别标签(最后一列数据)
128+ numIter=150 -- 迭代次数
129+ Returns:
130+ weights -- 得到的最佳回归系数
131+ '''
94132 m ,n = shape (dataMatrix )
95133 weights = ones (n ) # 创建与列数相同的矩阵的系数矩阵,所有的元素都是1
96134 # 随机梯度, 循环150,观察是否收敛
0 commit comments