机器学习-Coursera-4逻辑回归

假设函数

对于监督学习,有线性回归和分类两种,对于分类来说所得的结果是离散的,但是我们可以忽略y是离散值的事实来处理分类问题,并使用我们的旧线性回归的算法来尝试预测给定的x。要解决y∈{0,1}时,取大于1或小于0的值的问题,我们可以改变假设函数的形式 也就是说,满足0\leqslant H_{\Theta }\left (\right x )\leqslant 1,通过插入logistic函数来完成。

我们使用“Sigmoid函数”,也称为“逻辑函数”:

 

h_{\Theta }\left ( x \right )= g\left ( \Theta ^{T}x \right )

z = \Theta ^{T}x

g\left ( z \right )=\frac{1}{1+e^{-z}}

下图显示sigmoid函数:

此处所示的函数g(z)将任何实数映射到(0,1)区间。

H_{\Theta }\left ( x \right )展示为我们输出为1的概率。例如,H_{\Theta }\left ( x \right )=0.7,即为输出为1的概率为70%,为0的概率为30%

小结:线性回归的假设函数展示的是拟合数据集的线,逻辑回归的假设函数展示的是将数据集分类的一条线。           

决策边界

为了得到离散的0,1分类,我们可以将假设函数的输出转换如下:

h_{\Theta }\left ( x \right )\geq 0.5\rightarrow y= 1

h_{\Theta }\left ( x \right )< 0.5\rightarrow y= 0

即如果

h(x)=g(z)>=0.5

z>=0

 \Theta ^{T}x>0

现在可以说

\Theta ^{T}x\geq 0\Rightarrow y= 1

\Theta ^{T}< 0\Rightarrow y=0(少了x)

提示:对于\Theta ^{T}x,不需要一定是xianxianx线性的,非线性依然可行。

eg.

 

\Theta = \begin{bmatrix} 5\\ -1\\ 0 \end{bmatrix}

y=5+(-1)x1+0x2>=0

x1<=5 的区域为y=1 其余为y=0

代价函数

我们不能使用与线性回归相同的成本函数,因为Logistic函数会导致输出波动,从而出现许多局部最优解,换句话说,他不是凸函数。

我们的逻辑回归成本函数如下:

J(\Theta )= \frac{1}{m}\sum_{i=1}^{m}Cost\left ( h_{\Theta }\left ( x^{\left ( i \right )} \right ),y^{\left ( i \right )} \right )

Cost\left ( h_{\Theta }\left ( x \right ),y \right )= -log\left (h _{\Theta }\left ( x \right ) \right )          if y = 1

Cost\left ( h_{\Theta }\left ( x \right ) ,y\right )= -log\left ( 1-h_{\Theta } \left ( x \right )\right )   if y = 0

当y=1,得到下图:

当y=0,得到下图:

总结:

Cost\left ( h_{\Theta }\left ( x \right ),y \right )=0 if h(x)=y

Cost\left ( h_{\Theta }\left ( x \right ),y \right )\rightarrow \propto if y=0 and h(x)->1

Cost\left ( h_{\Theta }\left ( x \right ),y \right )\rightarrow \propto if y=1 and h(x)->0

注意:这种方式编写成本函数可以保证逻辑回归是凸的。 

简化的成本函数:
J(\Theta )= -\frac{1}{m}\sum_{i=1}^{m}\left [ y^{\left ( i \right )}log(h_{\Theta }(x^{(i)}))+(1-y^{(i)})log(1-h_{\Theta }(x^{(i)})) \right ]

梯度下降

使用微积分的方式进行求导,只不过h(x)与xian线性回归表达式不同

\Theta := \Theta -\frac{\alpha }{m}X^{T}(g(X\Theta )-\vec{y})

高级优化

“共轭梯度”,“BFGS”,“L-BFGS”,是更快速的 优化theta的方法,可以代替梯度下降,

简单写一个函数返回这两个值:

function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

我们给函数“fminunc()”我们的成本函数,我们的θ值的初始向量,以及我们事先创建的“options”对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值