神经网络基础-神经网络补充概念-12-向量化逻辑回归的梯度输出

代码实现

python 复制代码
import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

def compute_loss(X, y, theta):
    m = len(y)
    h = sigmoid(X.dot(theta))
    loss = (-1/m) * np.sum(y * np.log(h) + (1 - y) * np.log(1 - h))
    return loss

def compute_gradient(X, y, theta):
    m = len(y)
    h = sigmoid(X.dot(theta))
    gradient = X.T.dot(h - y) / m
    return gradient

def batch_gradient_descent(X, y, theta, learning_rate, num_iterations):
    m = len(y)
    losses = []
    
    for _ in range(num_iterations):
        gradient = compute_gradient(X, y, theta)
        theta -= learning_rate * gradient
        
        loss = compute_loss(X, y, theta)
        losses.append(loss)
        
    return theta, losses

# 生成一些模拟数据
np.random.seed(42)
m = 100
n = 2
X = np.random.randn(m, n)
X = np.hstack((np.ones((m, 1)), X))
theta_true = np.array([1, 2, 3])
y = (X.dot(theta_true) + np.random.randn(m) * 0.2) > 0

# 初始化参数和超参数
theta = np.zeros(X.shape[1])
learning_rate = 0.01
num_iterations = 1000

# 执行批量梯度下降(向量化)
theta_optimized, losses = batch_gradient_descent(X, y, theta, learning_rate, num_iterations)

# 打印优化后的参数
print("优化后的参数:", theta_optimized)

# 绘制损失函数下降曲线
import matplotlib.pyplot as plt
plt.plot(losses)
plt.xlabel('迭代次数')
plt.ylabel('损失')
plt.title('损失函数下降曲线')
plt.show()

我们首先定义了 compute_gradient 函数,它计算梯度向量。然后,在 batch_gradient_descent 函数中使用向量化的梯度计算,从而避免了循环操作。

这种向量化的梯度计算方法可以有效地处理多个样本,从而提高代码的性能。

相关推荐
中达瑞和-高光谱·多光谱10 分钟前
多光谱图像颜色特征用于茶叶分类的研究进展
人工智能·分类·数据挖掘
格林威28 分钟前
UV 紫外相机在半导体制造领域的应用
人工智能·数码相机·opencv·计算机视觉·视觉检测·制造·uv
精英的英32 分钟前
【工具开发】适用于交叉编译环境的QT qmake项目转换vscode项目插件
人工智能·vscode·qt·开源软件
茜茜西西CeCe34 分钟前
数字图像处理-图像增强(2)
人工智能·算法·计算机视觉·matlab·数字图像处理·图像增强·陷波滤波器
txwtech34 分钟前
第8篇 QT联合halcon12在vs2019搭建环境开发图像处理
图像处理·人工智能
视***间1 小时前
视程空间Pandora:终端算力破晓,赋能边缘计算未
大数据·人工智能·边缘计算·ai算力·视程空间
塔能物联运维1 小时前
物联网运维中的边缘计算任务调度优化策略
运维·人工智能·物联网·边缘计算
JAVA学习通1 小时前
Spring AI 核心概念
java·人工智能·spring·springai
飞哥数智坊1 小时前
“说完就走,结果自达”:这才是 AI 协同该有的样子
人工智能·ai编程