1.分类问题(Logistic Regression)
应用场景:预测的变量y是离散的值
应用举例:是否垃圾邮件;肿瘤分类;
2.假说表示
问题:例如在肿瘤判断的模型中,出现一个尺寸较大的肿瘤的情况,如下图,就容易出现误判
解决方法:
模型定义:
引入s型(sigmoid)函数:
python定义方法:
import numpy as np
def sigmoid(z):
return 1/(1+np.exp(-z))
模型图像:
3.判定边界
3.1逻辑回归里面:如上图
当时,预测 𝑦 = 1
当5时,预测 𝑦 = 0
根据上面绘制出的 S 形函数图像,我们知道
当 𝑧 = 0 时 𝑔(𝑧) = 0.5 ,𝑧 > 0 时 𝑔(𝑧) > 0.5 ,𝑧 < 0 时 𝑔(𝑧) < 0.5
又 ,即: 时,预测 𝑦 = 1 ,时,预测 𝑦 = 0
3.2若模型为
若 拟合结果是theta=[-3 1 1],则当时,模型预测为1
可以绘制直线,作为判断边界,此时图形的边界拟合为
3.3这一类的假设,若判断边界为圆形
4.代价函数
问题:当我们采用传统的线性回归代价函数的时候,将sigmoid代入的时候,由于sigmiod本事是一个非线性函数,会发现代价函数变成一个非凸函数(non-convexfunction)。如左图,出现了我不少局部最小值,这很不利于我们的优化。
解决方案:重新定义代价函数:
此时:当实际的 𝑦 = 1 且ℎ𝜃 (𝑥)也为 1 时误差为 0, 当 𝑦 = 1 但ℎ𝜃 (𝑥)不为 1 时误差随着ℎ𝜃 (𝑥)变小而变大;当实际的 𝑦 = 0 且ℎ𝜃 (𝑥)也为 0 时 代价为 0,当𝑦 = 0 但ℎ𝜃 (𝑥)不为 0 时误差随着 ℎ𝜃 (𝑥)的变大而变大。
简化:
用numpy实现:
import numpy as np
def cost(theta,x,y)
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multipy(-y,np.log(sigmoid(X* theta.T)))
second = np.multiply(1 - y),mp.log(1 - sigmoid(X* theta.T)))
return np.sum(first - second) / (len(X))
此时就可以重新使用梯度下降算法:
求导后:
6.简化成本函数与梯度下降
简化代价函数:
梯度下降算法:
所以,计算后会得到等式:
计算后会发现,这式子正是我们用来做线性回归梯度下降的。 但是因为本身假设定义发生了变化,所以线性回归与逻辑回归的梯度下降算法虽然在形式上相同,但是因为假设本身不一样,实际上他们为完全不同的两个东西。
注:线性回归的特征缩放也可以用到逻辑回归中
6.高级优化
7.一对多
情况例子:
解决: