1.分类问题
如判断一封电子邮件是否是垃圾邮件:答案只有两种 是或不是
函数的输出值可能远大于 1,或者远小于 0,不便于判断
引入逻辑回归:
算法的性质是:它的输出值永远在 0 到 1 之间
当ℎ() >= 0.5时,预测 = 1。
当ℎ() < 0.5时,预测 = 0 。
2.sigmod函数引入
为避免线性回归导致的问题,所以引入sigmod函数,它的输出值永远在 0 到 1 之间:
在此基础上引入一个新的模型,逻辑回归,该模型的输出变量范围始终在 0 和 1 之间。 逻辑回归模型的假设是:
ℎ() = ()
其中: 代表特征向量 代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function),公式为: g ( z ) = 1 1 + e − 2 g(z)=\frac{1}{1+e^{-2}} g(z)=1+e−21
ℎ() = ( = 1|; )
在逻辑回归中,预测:
当ℎ() >= 0.5时,预测 = 1。
当ℎ() < 0.5时,预测 = 0
故:
当 >= 0 时,预测 = 1
当 < 0 时,预测 = 0
3.决策界限:
通俗来说,就是分隔开不同类别,比如:
4.代价函数
相比于线性回归,逻辑回归中也有优化目标或者叫代价函数,
传统的代价函数(线性回归中的):
Linear regression: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 \text { Linear regression: } \quad J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \frac{1}{2}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} Linear regression: J(θ)=m1∑i=1m21(hθ(x(i))−y(i))2
cost函数:将是一个非凸函数,这意味着代价函数有许多局部最小值,不利于梯度下降法的求解。
Cost ( h θ ( x ( i ) ) , y ( i ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right)=\frac{1}{2}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} Cost(hθ(x(i)),y(i))=21(hθ(x(i))−y(i))2
重新定义的代价函数:
J ( θ ) = 1 m ∑ i = 1 m Cost ( h θ ( x ( i ) ) , y ( i ) ) J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right) J(θ)=m1∑i=1mCost(hθ(x(i)),y(i))
cost函数:
Cost ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) if y = 1 − log ( 1 − h θ ( x ) ) if y = 0 \operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned}-\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\-\log \left(1-h_{\theta}(x)\right) & \text { if } y=0\end{aligned}\right. Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
对应图像:
这样构建的 Cost ( h θ ( x ) , y ) \operatorname{Cost}\left(h_{\theta}(x), y\right) Cost(hθ(x),y) 函数的特点是: 当实际的 y=1 且 h θ ( x ) h_{\theta}(x) hθ(x) 也为 1 时误差为 0 , 当 y=1 但 h θ ( x ) h_{\theta}(x) hθ(x) 不为 1 时误差随着 h θ ( x ) h_{\theta}(x) hθ(x) 变小而变大; 当实际的 y=0 且 h θ ( x ) h_{\theta}(x) hθ(x) 也为 0 时 代价为 0 , 当 y=0 但 h θ ( x ) h_{\theta}(x) hθ(x) 不为 0 时误差随着 h θ ( x ) h_{\theta}(x) hθ(x) 的变大而变大。
将构建的 Cost ( h θ ( x ) , y ) \operatorname{Cost}\left(h_{\theta}(x), y\right) Cost(hθ(x),y) 简化如下:
Cost ( h θ ( x ) , y ) = − y × log ( h θ ( x ) ) − ( 1 − y ) × log ( 1 − h θ ( x ) ) \operatorname{Cost}\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right) Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
带入代价函数得到:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] 即: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] \\ \text { 即: } J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] J(θ)=m1∑i=1m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(x(i)))] 即: J(θ)=−m1∑i=1m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
5.梯度下降
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:
R e p e a t { θ j : = θ j − α ∂ ∂ θ j J ( θ ) ( s i m u l t a n e o u s l y u p d a t e a l l θ j ) Repeat \left\{\theta_{j}: = \theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)\right. (simultaneously update all \theta_{j} ) Repeat{θj:=θj−α∂θj∂J(θ)(simultaneouslyupdateallθj)
} \} }
求导后得到:
R e p e a t { θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ( s i m u l t a n e o u s l y u p d a t e a l l θ j ) Repeat \left\{\theta_{j}: = \theta_{j}-\alpha \frac{1}{m} \sum_{i = 1}^{m}\left(h_{\theta}\left(\mathrm{x}^{(i)}\right)-\mathrm{y}^{(i)}\right) \mathrm{x}_{j}^{(i)}\right. (simultaneously update all \theta_{j} ) Repeat{θj:=θj−αm1∑i=1m(hθ(x(i))−y(i))xj(i)(simultaneouslyupdateallθj)
} \} }
编程举例:
function [jVal, gradient]=costFunction(theta)
jVal=(theta(1)-5)^2+(theta(2)-5)^2;
gradient=zeros(2,1);
gradient(1)=2*(theta(1)-5);
gradient(2)=2*(theta(2)-5);
end
注:虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的ℎ() = ()与线性回归中不同,所以实际上是不一样的。另外,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。
6.高级算法
除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) ,fminunc 是 matlab 和 octave中都带的一个最小值优化函数。
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);
这个 options 变量作为一个数据结构可以存储你想要的 options,所以 GradObj 和 On,这里设置梯度目标参数为打开(on),这意味着你现在确实要给这个算法提供一个梯度,然后设置最大迭代次数,比方说 100,我们给出一个 的猜测初始值,它是一个 2×1 的向量,那么这个命令就调用 fminunc,这个@符号表示指向我们刚刚定义的costFunction 函数的指针。如果你调用它,它就会使用众多高级优化算法中的一个,当然你也可以把它当成梯度下降,只不过它能自动选择学习速率,你不需要自己来做。然后它会尝试使用这些高级的优化算法,就像加强版的梯度下降法,为你找到最佳的值。
7.推广到一对多问题
如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天,那么有3个分类。
为了能实现这样的转变, 我们将多个类中的一个类标记为正向类 (y=1) , 然后将其 他所有类都标记为负向类, 这个模型记作 h θ ( 1 ) ( x ) h_{\theta}^{(1)}(x) hθ(1)(x) 。接着, 类似地第我们选择另一个类标记为 正向类 (y=2) , 再将其它类都标记为负向类, 将这个模型记作 h θ ( 2 ) ( x ) h_{\theta}^{(2)}(x) hθ(2)(x) , 依此类推。 最后我们得到一系列的模型简记为: h θ ( i ) ( x ) = p ( y = i ∣ x ; θ ) 其 中 : i = ( 1 , 2 , 3 … k ) \quad h_{\theta}^{(i)}(x)=p(y=i \mid x ; \theta) 其中: i=(1,2,3 \ldots k) hθ(i)(x)=p(y=i∣x;θ)其中:i=(1,2,3…k)
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。