吴恩达机器学习-C1W3L2-逻辑回归之S型函数

可选实验:逻辑回归

在这个不评分的实验中,你会

  • 探索sigmoid函数(也称为logistic函数)
  • 探索逻辑回归;哪个用到了s型函数
python 复制代码
import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from plt_one_addpt_onclick import plt_one_addpt_onclick
from lab_utils_common import draw_vthresh
plt.style.use('./deeplearning.mplstyle')

Sigmoid或Logistic函数

正如讲座视频中所讨论的,对于分类任务,我们可以从使用线性回归模型 f w , b ( x ( i ) ) = w ⋅ x ( i ) + b f_{\mathbf{w},b}(\mathbf{x}^{(i)}) = \mathbf{w} \cdot \mathbf{x}^{(i)} + b fw,b(x(i))=w⋅x(i)+b开始,来预测给定 x x x的 y y y。

-然而,我们希望我们的分类模型的预测在0和1之间,因为我们的输出变量 y y y是0或1。

-这可以通过使用"sigmoid函数"来完成,该函数将所有输入值映射到0到1之间的值。

我们来实现s型函数,自己看看。

Sigmoid函数的公式

s型函数的公式如下
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1

在逻辑回归的情况下,z (sigmoid函数的输入)是线性回归模型的输出。

  • 单个示例时," z z z"为标量。
  • 在多个示例的情况下, z z z可能是由 m m m值组成的向量,每个示例一个。
  • sigmoid函数的实现应该涵盖这两种可能的输入格式。让我们在Python中实现它。

NumPy有一个名为exp()的函数,它提供了一种方便的方法来计算输入数组 z 中所有元素的指数( e z e^{z} ez)。

它还可以使用单个数字作为输入,如下所示。

python 复制代码
# Input is an array. 
input_array = np.array([1,2,3])
exp_array = np.exp(input_array)

print("Input to exp:", input_array)
print("Output of exp:", exp_array)

# Input is a single number
input_val = 1  
exp_val = np.exp(input_val)

print("Input to exp:", input_val)
print("Output of exp:", exp_val)

sigmoid函数是用python实现的,如下面的单元格所示。

python 复制代码
def sigmoid(z):
    """
    Compute the sigmoid of z

    Args:
        z (ndarray): A scalar, numpy array of any size.

    Returns:
        g (ndarray): sigmoid(z), with the same shape as z
         
    """

    g = 1/(1+np.exp(-z))
   
    return g

让我们看看对于不同的z值这个函数的输出是什么

python 复制代码
# Generate an array of evenly spaced values between -10 and 10
z_tmp = np.arange(-10,11)

# Use the function implemented above to get the sigmoid values
y = sigmoid(z_tmp)

# Code for pretty printing the two arrays next to each other
np.set_printoptions(precision=3) 
print("Input (z), Output (sigmoid(z))")
print(np.c_[z_tmp, y])

左列的值为z,右列的值为s型(z)。如您所见,sigmoid的输入值范围从-10到10,输出值范围从0到1。

现在,让我们尝试使用matplotlib库绘制这个函数。

python 复制代码
# Plot z vs sigmoid(z)
fig,ax = plt.subplots(1,1,figsize=(5,3))
ax.plot(z_tmp,y,c='b')
ax.set_title('Sigmoid function')
ax.set_ylabel('sigmoid(z)')
ax.set_xlabel('z')
# 在 z=0 处绘制垂直阈值线
draw_vthresh(ax,0)
plt.show()

如你所见,当z趋于负值时,s型函数趋于0,当z趋于正值时,s型函数趋于1。

逻辑回归

逻辑回归模型将s型曲线应用于我们熟悉的线性回归模型,如下图所示:
f w , b ( x ( i ) ) = g ( w ⋅ x ( i ) + b ) (2) f_{\mathbf{w},b}(\mathbf{x}^{(i)}) = g(\mathbf{w} \cdot \mathbf{x}^{(i)} + b ) \tag{2} fw,b(x(i))=g(w⋅x(i)+b)(2)
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1

让我们将逻辑回归应用到肿瘤分类的分类数据示例中。

首先,加载示例和参数的初始值。

python 复制代码
x_train = np.array([0., 1, 2, 3, 4, 5])
y_train = np.array([0,  0, 0, 1, 1, 1])

w_in = np.zeros((1))
b_in = 0

尝试以下步骤:

  • 点击"运行逻辑回归"以找到给定训练数据的最佳逻辑回归模型
    • 注意所得模型与数据拟合得很好。
    • 注意,橙色线是' z z z'或 w ⋅ x ( i ) + b \mathbf{w} \cdot \mathbf{x}^{(i)} + b w⋅x(i)+b。它与线性回归模型中的直线不匹配。
      通过应用"阈值"进一步改进这些结果。
  • 勾选"切换0.5阈值"上的框,以显示如果应用阈值的预测。
    • 这些预测看起来不错。预测与数据相符
    • 现在,在大肿瘤大小范围内(接近10)添加进一步的数据点,并重新运行线性回归。
    • 与线性回归模型不同,该模型持续做出正确的预测
python 复制代码
plt.close('all') 
addpt = plt_one_addpt_onclick( x_train,y_train, w_in, b_in, logistic=True)

恭喜

你已经探索了s型函数在逻辑回归中的应用。

相关推荐
JJJennie7772 小时前
当AI开始学会欺骗
网络·人工智能
糖果店的幽灵2 小时前
大模型测评DeepEval快速入门-安全与通用指标详解
人工智能·安全·langgraph·大模型测评·deepeval
YFJ_mily3 小时前
【会议征稿】第八届人本计算与数据智能国际会议(HCC 2026)| 广州12月召开,EI/Scopus稳定检索,多届收录无忧
机器学习·人机交互·ei会议·数据智能·rdlink研发家·人本计算·广州会议
江畔柳前堤8 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术8 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客8 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术9 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO9 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术10 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架10 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github