过年的目标,除了每天的网球达到了,学习完全没有啊,都怪升级太好玩了。然后昨天赶时间去上外教课,没有来得及发布笔记。第一次打网球把线打断,关键是对面的5.0+外教的线五分钟后也断了,超暴力。
今天学习了逻辑回归模型的一部分:
1.分类问题
在分类问题中,我们需要预测的变量y是离散的值,需要预测结果是否属于某一个类(例如正确或错误)
- 因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量y∈0,1,其中 0 表示负向类,1表示正向类。
Classification: y = 0 or 1
hθ(x)canbe>1or<0
Logistic Regression: 0≤hθ(x)≤1
- 如果我们用线性回归算法来解决一个分类问题,假设函数的输出值可能远大于1,或者远小于0,会很奇怪,因此引入逻辑回归算法(分类算法的一种),它的性质是输出值永远在0到1。
2.假设表示
在分类问题中,要用什么样的函数来表示我们的假设,以达到满足某个性质,在离散型分类问题里,这个性质是它的预测值要在0和1之间。
-
回顾之前提到的乳腺癌分类问题,我们可以用线性回归方法求出适合数据的一条直线。但是根据线性回归模型我们只能预测连续的值,而对于分类问题,我们需要输出0或1,可以预测:
当hθ(x)≥0.5时,预测y=1 。
当hθ(x)<0.5时,预测y=0 。
-
假设又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到训练集中来,会获得一条新的直线。
![[Pasted image 20260226111747.png]]
这时,再使用0.5作为阈值来预测肿瘤是良性还是恶性便不合适了:线性回归模型,因其预测的值可以超越[0,1]的范围,不适合解决这样的问题。

- 由此引入逻辑回归模型,其输出变量范围始终在0和1之间。其假设函数是: hθ(x)=g(θTX) 其中:X代表特征向量,g代表逻辑函数(logistic function),是一个常用的S形函数(Sigmoid function),公式为:g(z)=1+e−z1 。
在python中实现:
import numpy as np
def sigmoid(z):
return 1 / (1+np.exp(-z))
该函数的图像为:
合起来,我们得到逻辑回归模型的假设:
- 对模型的理解:g(z)=1+e−z1
- hθ(x)的作用是对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity) 即hθ(x)=P(y=1∣x;θ)
- 例如,如果对于给定的x,通过已经确定的参数计算得出hθ(x)=0.7,则表示有70%的几率y为正向类,负向类的几率为0.3。
3.判定边界
即决策边界(decision boundary)。可以更好地帮助我们理解逻辑回归的假设函数在计算什么。

- 在逻辑回归中,我们预测:
当hθ(x)≥0.5时,预测y=1 。
当hθ(x)<0.5时,预测y=0。
- 根据上面绘制出的S形函数图像:
z=0 时 g(z)=0.5
z>0 时 g(z) >0.5
z<0 时 g(z) <0.5
又 z=θTX,即:
θTX≥0时,预测y=1
θTX<0时,预测y=0
- 现在假设我们有一个模型:
并且参数 θ 是向量[-3 1 1]。则当−3+x1+x2≥0,即x1+x2≥3时,模型将预测y=1。
绘制直线x1+x2=3,这条线便是我们模型的分界线,将预测为1的区域和预测为0的区域分隔开
4. 假设数据呈现如下图的分布情况,怎样的模型才适合呢?
需要用曲线才能分隔y=0 的区域和y=1的区域,需要二次方特征:hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)是[-1 0 0 1 1],则判定边界恰好是圆点在原点且半径为1的圆形。
4.代价函数
如何拟合逻辑回归模型的参数 θ,具体来说,则是定义用来拟合参数的优化目标或者叫代价函数,称为监督学习问题中的逻辑回归模型的拟合问题。

- 如果我们对逻辑回归模型沿用线性回顾的代价函数(所有模型误差的平方和),问题在于,将hθ(x)=1+e−θTX1带入这样的代价函数中时,我们得到的将会是一个非凸函数(non-convexfunction)。
这意味着代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
- 重新定义逻辑回归的代价函数为:J(θ)=m1∑i=1mCost(hθ(x(i)),y(i)),其中

hθ(x)与Cost(hθ(x),y)之间的关系如下图所示:

- 这样构建的Cost(hθ(x),y)函数的特点是:当实际的y=1且hθ(x)也为1时误差为0,当y=1但hθ(x)不为1时误差随着hθ(x)变小而变大;当实际的y=0且hθ(x)也为0时代价为0,当y=0但hθ(x)不为0时误差随着hθ(x)的变大而变大。
- 将构建的Cost(hθ(x),y)简化如下:
Cost(hθ(x),y)=−y∗log(hθ(x))−(1−y)∗log(1−hθ(x))
带入代价函数得到:
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)))]
- Python 代码实现:
import numpy as np
def cost(theta,X,y):
theta = np.matrix(theta)
X=np.matrix(X)
y=np.matrix(y)
first = np.multiply(-y,np.log(sigmoid(X*theta.T)))
second = np.multiply((1-y),np.log(1-sigmoid(X*theta.T)))
return np.sum(first-second)/(len(X))
6. 梯度下降算法来求得使得代价函数最小的参数:
Repeat { θj:=θj−α∂θj∂J(θ)
(simultaneously update all θj)
}
求导后得到:
Repeat { θj:=θj−αm1∑i=1m(hθ(x(i))−y)i)xj(i)
(simultaneously update all θj)
}
7. 虽然得到的梯度下降算法表面看上去与线性回归的梯度下降算法一样,但是这里的hθ(x)与线性回归中不同,所以得到的会是一个凸函数,没有局部最优值。