logistic回归二分类

参考:https://www.cnblogs.com/earendil/p/8268757.html

关键步骤:

  1. 找到合适的预测分类函数,一般使用sigmoid函数,输入数据得到一个(0,1)区间的值,即为分为1类的概率。
  2. 构建损失函数Cost。表示预测结果与真实结果之间的偏差。综合考虑所有训练数据的损失,将Cost求和取平均,记为\jmath \left ( \theta \right )
  3. 找到使\jmath \left ( \theta \right )最小的\theta值。\jmath \left ( \theta \right )越小说明预测结果越准确。使用梯度下降或梯度上升法。

具体过程:

1.预测

使用sigmoid函数作为预测分类函数:

f(x)=\frac{1}{1+e^{^{-x}}}

当x=0时,sigmoid函数为0.5,x>0时,sigmoid函数逐渐靠近1,x<0时,sigmoid函数靠近0.输入一个训练数据,得到(0,1)区间的数值,若>0.5,则为1类,<0.5,则为0类。

训练数据若有n个特征(x1,x2,…,xn)

具有线性边界和非线性边界情况分别如下:

现在我们只考虑线性边界情况。

z=\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}+...+\theta _{n}x_{n}=\theta ^{T}X

预测函数为:

f(z)=\frac{1}{1+e^{^{-z}}}=\frac{1}{1+e^{^{-\theta ^{T}X}}}

f(z)表示结果取1的概率为f(z),则取0的概率为1-f(z)

2.构建损失函数

预测概率

p(y|X,\theta^{_{T}} )=f(\theta^{_{T}}X)^{y}(1-f(\theta^{_{T}}X))^{1-y}

综合所有训练数据构建函数:

L(\theta )=\prod p(y^{i}|X^{i},\theta^{_{T}} )=\prod f(\theta^{_{T}}X^{i})^{y^{i}}(1-f(\theta^{_{T}}X^{i}))^{1-y^{i}}

取对数:

\small l (\theta )=logL(\theta )=log(\prod p(y^{i}|X^{i},\theta^{_{T}} ))=log(\prod f(\theta^{_{T}}X^{i})^{y^{i}}(1-f(\theta^{_{T}}X^{i}))^{1-y^{i}}) =\sum log(f(\theta^{_{T}}X^{i})^{y^{i}}(1-f(\theta^{_{T}}X^{i}))^{1-y^{i}}) =\sum y^{i} log(f(\theta^{_{T}}X^{i}))+(1-y^{i})log(1-f(\theta^{_{T}}X^{i}))

l \left ( \theta \right )越大说明,正确的概率越大。

\jmath \left ( \theta \right )=-\frac{1}{m}l(\theta )

\jmath \left ( \theta \right )越小越好。

3.梯度下降法使\jmath \left ( \theta \right )的最小/越来越小

\theta _{j}=\theta _{j}-\alpha \frac{\partial \jmath (\theta )}{\partial \theta _{j}},j=(0,1,2,...,n)

\frac{\partial \jmath (\theta )}{\partial \theta _{j}}=-\frac{1}{m}\sum (y^{i}\frac{1}{f(\theta ^{T}X^{i})}\frac{\partial f(\theta ^{T}X^{i})}{\partial \theta _{j}}-(1-y^{i})\frac{1}{1-f(\theta ^{T}X^{i})}\frac{\partial f(\theta ^{T}X^{i})}{\partial \theta _{j}})

=-\frac{1}{m}\sum (y^{i}\frac{1}{f(\theta ^{T}X^{i})}-(1-y^{i})\frac{1}{1-f(\theta ^{T}X^{i})})\frac{\partial f(\theta ^{T}X^{i})}{\partial \theta _{j}}

=-\frac{1}{m}\sum (y^{i}\frac{1}{f(\theta ^{T}X^{i})}-(1-y^{i})\frac{1}{1-f(\theta ^{T}X^{i})})\frac{\partial \frac{1}{1+e^{-\theta ^{T}X}}}{\partial \theta _{j}}

=-\frac{1}{m}\sum (y^{i}\frac{1}{f(\theta ^{T}X^{i})}-(1-y^{i})\frac{1}{1-f(\theta ^{T}X^{i})})\frac{1}{(1+e^{-\theta ^{T}X})^{2}}e^{-\theta ^{T}X}\cdot \frac{\partial (\theta ^{T}X)}{\partial \theta _{j}}

=-\frac{1}{m}\sum (y^{i}\frac{1}{f(\theta ^{T}X^{i})}-(1-y^{i})\frac{1}{1-f(\theta ^{T}X^{i})})\frac{1}{(1+e^{-\theta ^{T}X})^{2}}e^{-\theta ^{T}X}\cdot x_{j}

=-\frac{1}{m}\sum (y^{i}\frac{1}{f(\theta ^{T}X^{i})}-(1-y^{i})\frac{1}{1-f(\theta ^{T}X^{i})})f(\theta ^{T}X^{i})(1-f(\theta ^{T}X^{i}))\cdot x_{j}

=-\frac{1}{m}\sum (y^{i}(1-f(\theta ^{T}X^{i}))-(1-y^{i})f(\theta ^{T}X^{i}))\cdot x_{j}

=-\frac{1}{m}\sum (y^{i}-f(\theta ^{T}X^{i}))\cdot x_{j}

=\frac{1}{m}\sum (f(\theta ^{T}X^{i})-y^{i})\cdot x_{j}

则梯度下降可以写成:

\theta _{j}=\theta _{j}-\alpha \frac{1}{m}\sum (f(\theta ^{T}X^{i})-y^{i})\cdot x_{j},j=(0,1,2,...,n)

α本身为一个常量,因此1/m可以省略。

最终:

\theta _{j}=\theta _{j}-\alpha\sum (f(\theta ^{T}X^{i})-y^{i})\cdot x_{j},j=(0,1,2,...,n)

梯度上升法最终结果为:

\theta _{j}=\theta _{j}+\alpha\sum (y^{i}-f(\theta ^{T}X^{i}))\cdot x_{j},j=(0,1,2,...,n)

可以看出两式最后的结果是相同的。

4.向量化

相关代码如下:

def sigmoid(inX):
    return 1.0/(1+exp(-inX))
def gradAscent(dataMatIn,classLabels):
    dataMarix=mat(dataMatIn)
    labelMat=mat(classLabels).transpose()
    m,n=shape(dataMarix)
    w=ones((n,1))#w=array([1,1,1])
    maxr=500
    alpha=0.001
    for i in range(maxr):
        h=sigmoid(dataMarix*w)
        error=labelMat-h
        w=w+alpha*dataMarix.transpose()*error
    return w

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值