mirror of
https://github.com/apachecn/ailearning.git
synced 2026-05-07 14:13:14 +08:00
更新 5 logistic回归 理论部分
This commit is contained in:
@@ -78,17 +78,13 @@ Sigmoid 函数的输入记为 z ,由下面公式得到:
|
||||
|
||||
梯度上升算法用来求函数的最大值,而梯度下降算法用来求函数的最小值。
|
||||
|
||||
**如果大家对上面的例子不理解,下面我们看一个比较容易理解的例子。**
|
||||
**局部最优现象**
|
||||
|
||||

|
||||
|
||||
上图表示参数 θ 与误差函数 J(θ) 的关系图,红色的部分是表示 J(θ) 有着比较高的取值,我们需要的是,能够让 J(θ) 的值尽量的低。也就是深蓝色的部分。θ0,θ1 表示 θ 向量的两个维度。
|
||||
|
||||
在上面提到梯度下降法的第一步是给 θ 给一个初值,假设随机给的初值是在图上的十字点。
|
||||
|
||||
然后我们将 θ 按照梯度下降的方向进行调整,就会使得 J(θ) 往更低的方向进行变化,如图所示,算法的结束将是在θ下降到无法继续下降为止。
|
||||
|
||||
当然,可能梯度下降的最终点并非是全局最小点,可能是一个局部最小点,如我们上图中的右边的梯度下降曲线,描述的是最终到达一个局部最小点,这是我们重新选择了一个初始点得到的。
|
||||
可能梯度下降的最终点并非是全局最小点,可能是一个局部最小点,如我们上图中的右边的梯度下降曲线,描述的是最终到达一个局部最小点,这是我们重新选择了一个初始点得到的。
|
||||
|
||||
看来我们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点。
|
||||
|
||||
@@ -100,7 +96,7 @@ Sigmoid 函数的输入记为 z ,由下面公式得到:
|
||||
每个回归系数初始化为 1
|
||||
重复 R 次:
|
||||
计算整个数据集的梯度
|
||||
使用 alpha x gradient 更新回归系数的向量
|
||||
使用 步长 x 梯度 更新回归系数的向量
|
||||
返回回归系数
|
||||
```
|
||||
|
||||
|
||||
@@ -199,9 +199,9 @@ def simpleTest():
|
||||
# 因为数组没有是复制n份, array的乘法就是乘法
|
||||
dataArr = array(dataMat)
|
||||
# print dataArr
|
||||
weights = gradAscent(dataArr, labelMat)
|
||||
# weights = gradAscent(dataArr, labelMat)
|
||||
# weights = stocGradAscent0(dataArr, labelMat)
|
||||
# weights = stocGradAscent1(dataArr, labelMat)
|
||||
weights = stocGradAscent1(dataArr, labelMat)
|
||||
# print '*'*30, weights
|
||||
|
||||
# 数据可视化
|
||||
@@ -278,5 +278,5 @@ def multiTest():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
simpleTest()
|
||||
# multiTest()
|
||||
# simpleTest()
|
||||
multiTest()
|
||||
|
||||
Reference in New Issue
Block a user