如前文提到的例子,对肿瘤大小进行分类,以此来预测是良性或是恶性,当数据比较集中时,使用线性回归也许会奏效,但当出现某些数据时,表现会变得很不好。

对于这种分类,不需求预测出本身大小的问题(如期望输出0或1这样的值),考虑采用逻辑回归(Logistic Regression)

在逻辑回归中,有如下几种常用的处理方法:
Sigmoid Function:将实数映射到区间 (0,1) 上。在逻辑回归中,我们通常使用 Sigmoid 函数作为激活函数,将线性回归的结果转换为一个概率值,从而进行分类。
Softmax Functon: 将多个线性输出映射为一个概率分布。在多分类问题中,Softmax函数通常被用来将线性输出转化为概率分布,可以对每个类别进行概率预测。
ReLU Function (Rectified Linear Unit):在神经网络中广泛应用。ReLU函数在输入大于0时输出输入值本身,否则输出0。这种激活函数的好处是计算速度快且具有稀疏性,因此可以有效地减少过拟合现象。

** 表达式**:

如何构建逻辑回归模型? 这里拿线性回归的式子举例

由于e作为底数,且其指数带有负号,同时整体处于分母,输入的z值处理后加上1,很容易使*f(x)*的值趋近于0或者1;又因为始终处于0~1之间,可以将其理解为输出类为1的概率
z=wx+b只是便于说明建立的一个函数,w和b参数不断进行调整,使得能更好预测

继续拿线性的 z=w·x+b 举例,其对应的决策边界是当z=0的直线,即 w·x+b=0
不过线性并不存在决策边界,不过决策边界本身可以分线性与非线性
举例1(线性):

假设w_1, w_2, b分别为1,1,-3,则其对应的决策边界为 z=x_1+x_2-3=0,
即x_1 + x_2 = 3

举例2(非线性):

假设w_1, w_2, b分别为1,1,-1,则其对应的决策边界为 z=x_1^2+x_2^2-1=0,
即x_1^2+x_2^2=1

线性回归时的成本函数是这样的:

而对于逻辑回归

如果仍然使用1/2在外面的成本函数,梯度下降呈现的图像将会是:


现在将求和符号内的部分称作 单个训练样本的成本,用L表示

以上两种情况对应的图像如下,但我们输入的值始终位于0-1,因此只需考虑图像0-1之间的部分


如果y = 1,真实标签的确为1。如果标签的预测值也为1,则成本= 0。但是当hθ(x)偏离1并接近0时,成本函数呈指数增长并趋于无穷大
如果y = 0,则真实标签为0。如果标签的预测值也为0,则Cost = 0。但是当hθ(x)偏离0并接近1时,成本函数呈指数增长并趋于无穷大
通过这样的处理,当预测正确时,成本为0;而预测错误,惩罚极大,这使得模型不断向最佳处逼近,因此总体的将会呈现凸函数的图像
有了这样的处理,loss function可以这样改写:

现在我们就可以得到逻辑回归的成本函数了:

代码实现:
def compute_cost_logistic(X, y, w, b):
"""
Computes cost
Args:
X (ndarray (m,n)): Data, m examples with n features
y (ndarray (m,)) : target values
w (ndarray (n,)) : model parameters
b (scalar) : model parameter
Returns:
cost (scalar): cost
"""
m = X.shape[0]
cost = 0.0
for i in range(m):
z_i = np.dot(X[i],w) + b
f_wb_i = sigmoid(z_i)
cost += -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i)
cost = cost / m
return cost
参考来源:
https://www.geeksforgeeks.org/ml-cost-function-in-logistic-regression/
