Logistic回归

Logistic回归和线性回归虽然都带有回归,梯度下降,损失函数,求取预测值的方法虽然很相似,但是它却是一个实打实的分类算法。

因为是分类算法,所以逻辑斯特回归预测的是样本为某一分类的概率,所以预测值的范围为0<=hθ(x)<=1;

分布函数如下图

由此得出逻辑斯特的预测函数

在逻辑斯特回归中,我们预测:

当hθ(x)>=0.5时,预测y=1,这时z>=0;

当hθ(x)<0.5是,预测y=0,这时z<0;

 

线性回归的代价函数并不适用与逻辑斯特回归,因为我们将hθ(x)带入进去的时候,得到的是一个非凸函数,这意味着我们的代价函数有着愈多的局部最优解,会影响梯度下降算法找到全局的最优解。

所以我们从新定义逻辑斯特回归的代价函数为:,其中

ℎ 𝜃 (x)与Cost(ℎ 𝜃 (x),y)之间的关系如下图所示

这个代价函数的意思是这样的当你的原值为0而预测值为1时,这时候这个概率是很小的,换言之,你想让0变成一所需要的代价是无穷大的。当原值为1时同样。

在这里我们可以将Cost函数整合成一个更简单的函数

带入到代价函数中得到:

在这里,我们最小化代价函数的方法还是使用梯度下降法,至于具体的流程,他和线性回归里的梯度下降是一样的,读这篇博客的博友可以去我之前写的线性回归中看,我在此就不重复写了。同时,特征缩放在逻辑斯特回归中也是可以使用的。

 

逻辑斯特回归不止适用于两类分类问题,还适用于多类分类问题。

在面对多分类问题时,我们可以将此转化为一对多的问题,并且拟合多个分类器。

(i)(x),其中的i对应每一个可能的分类y=i,最后,为了做出预测,我们给出输入一个新的x值,用这个做预测。我们要做的就是在我们多个分类器里面输入x,然后我们选择一个让hθ(i)(x)最大的i。

在最后,贴出一个代价函数J(θ)的python实现代码

import numpy as np

def cost(theta,X,y):
    theta=np.matrix(theta)#根据theta创建出一个矩阵
    X=np.matrix(X)
    y=np.matrix(y)
    first=np.multiply(-y,np.log(sigmoid(X*theta.T)))#multiply数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致
    second=np.multiplyy((1-y),np.log(1-sigmoid(X*theta.T)))
    return np.sum(first-second)/(len(X))

 

posted @ 2018-12-03 14:23  fromzore  阅读(279)  评论(0编辑  收藏  举报