1.sigmoid函数应用
- logistics回归是用来分类的,并且属于监督学习,分类也是仅限于二分类,就是结果非0即1 (这种函数通常称作跃阶函数)
- 这个时候就出现问题了 01之间的分界点怎么处理?
- 引入sigmoid函数 图像见下图
2.算法中的数学思想
举个引例:求 函数y = -x^2+3x+1 的最大值
很简单 求得导数 y’ = -2x+3
当且仅当x=1.5时函数y取得最大值
然而并不是所有的函数都可以这么一下求出来
所以 就利用了梯度上升的方法来求极值(最大值)
# y = -x^2+3x+1
# y'= -2x+3
def fun(inx):
return (-2*inx+3)
if __name__ == '__main__':
xNew = 2
xOld = 0
eps = 0.00001
alpha = 0.01
while abs(xOld - xNew) > eps: # 梯度上升 步长*'方向'
xOld = xNew
xNew = xNew + alpha * fun(xNew)
print xNew
- 拓展到矩阵 就有了不一样的表达式 解释logistic中的梯度上升
- 求出最佳回归系数的目的是为了带入到sigmoid函数
- 每个数据点都乘上一个回归系数 带入sigmoid函数 得到0-1之间的值 实现分类目的
3.算法伪代码–梯度上升算法
每个回归系数置为1
for 0-loopNum
带入sigmoid计算估计值
更新回归系数的向量
返回系数矩阵
4.缺点不足
要想得到好的结果时间花费大
容易欠拟合 精度不太高
5.改进算法-随机梯度上升算法
- 随机选取样本来更新回归系数
- 步长时刻改变
- 减少了运算复杂程度
6.伪代码-随机梯度上升算法
每个回归系数置为1
for 0-loopNum
for 0-n所有的点
更新步长
随机选取数据点带入sigmoid计算估计值
更新回归系数的向量
标记已经随机使用的点
返回系数矩阵
# -*- coding:utf-8 -*-
from numpy import *
def classify(inX, theta): # 分类器0/1二分类
res = sigm(sum(theta * inX))
if res > 0.5:
return