当前位置: 首页 > news >正文

深度学习3(向量化编程+ python中实现逻辑回归)

目录

 python中向量化编程

常用操作(设:a=[1,2] , b=[3,4])

 python中实现逻辑回归

伪代码

代码实现


 python中向量化编程

        向量化编程(Vectorized Programming)是一种利用数组或矩阵运算替代显式循环的高效编程范式,尤其在科学计算和机器学习中至关重要。而向量化编程在python中依靠numpy包实现。

        一般引入格式为:import numpy as np

常用操作(设:a=[1,2] , b=[3,4])

函数说明示例
np.add()逐元素加法a + b → [1+3, 2+4]
np.subtract()逐元素减法a - b → [1-3, 2-4]
np.multiply()逐元素乘法a * b → [1*3, 2*4]
np.divide()逐元素除法a / b → [1/3, 2/4]
np.power()幂运算a**2 → [1, 4]
np.exp()指数运算e^a
np.log对数计算log(默认ln)


 python中实现逻辑回归

伪代码

代码实现

import numpy as np# 初始化
num_iterations = 1000
learning_rate = 0.5
X = np.array([[1.2, 0.5],  # 样本1[-0.3, 1.8],  # 样本2[0.7, -1.1]  # 样本3
])
Y = np.array([[1, 0, 1]])  # 改为行向量以便计算
W = np.zeros((2, 1))  # 权重矩阵
b = 0.0  # 偏置项
costs = []  # 存储损失值历史def sigmoid(x):"""Sigmoid激活函数"""return 1 / (1 + np.exp(-x))def propagate(W, b, X, Y):"""前向传播和反向传播参数:W: 权重 (2,1)b: 偏置 (标量)X: 输入数据 (3,2)Y: 真实标签 (1,3)返回:grads: 包含梯度的字典cost: 当前损失值"""m = X.shape[0]  # 样本数量# 前向传播Z = np.dot(X, W) + b  # (3,1)A = sigmoid(Z)  # (3,1)# 计算损失(添加极小值防止log(0))epsilon = 1e-5cost = -(1 / m) * np.sum(Y * np.log(A.T + epsilon) + (1 - Y) * np.log(1 - A.T + epsilon))# 反向传播dZ = A - Y.T  # (3,1)dW = (1 / m) * np.dot(X.T, dZ)  # (2,1)db = (1 / m) * np.sum(dZ)grads = {"dW": dW, "db": db}return grads, costdef optimize(W, b, X, Y, num_iterations, learning_rate):"""梯度下降优化参数:W, b: 初始参数X, Y: 训练数据和标签num_iterations: 迭代次数learning_rate: 学习率返回:params: 优化后的参数grads: 最终梯度costs: 损失历史"""costs = []for i in range(num_iterations):# 计算梯度和损失grads, cost = propagate(W, b, X, Y)# 获取梯度dW = grads["dW"]db = grads["db"]# 更新参数W = W - learning_rate * dWb = b - learning_rate * db# 记录损失if i % 100 == 0:costs.append(cost)print(f"迭代次数 {i}: 损失值 = {cost:.6f}")params = {"W": W, "b": b}grads = {"dW": dW, "db": db}return params, grads, costsdef predict(W, b, X):"""使用训练好的参数预测参数:W, b: 训练好的参数X: 输入数据返回:Y_prediction: 预测结果 (0或1)"""m = X.shape[0]Y_prediction = np.zeros((1, m))A = sigmoid(np.dot(X, W) + b)for i in range(A.shape[0]):Y_prediction[0, i] = 1 if A[i] > 0.5 else 0return Y_predictionif __name__ == '__main__':# 训练模型params, grads, costs = optimize(W, b, X, Y, num_iterations, learning_rate)# 获取训练好的参数W = params["W"]b = params["b"]# 预测Y_prediction = predict(W, b, X)print(f"预测结果: {Y_prediction}")print(f"真实标签: {Y}")

在代码实现时,很容易遇到因为数组维度的问题,导致向量化运算出错。下面简单解释一下部分数组。

样本X ={  [x01 , x02 , x03 …… x0m],

                [x11 , x12 , x13 …… x1m] , 

                [x21 , x22 , x23 …… x2m] }

        注意不一定是2维数组,每一行代表着一个样本,而每一列代表着一种类型。这个例子中可以看到,该样本数组中一共有3个样本,每个样本有m个特征

权重W=[w1 , w2 , w3 …… wn]

        权重数组中元素数量等于于样本的特征数量,每一个特征的权重可能有所差异,需要不断迭代使其合理。

http://www.dtcms.com/a/266991.html

相关文章:

  • 遗传算法的原理与实现示例
  • XION:玩转您的第一个智能合约
  • Seq2seq+Attention 机器翻译
  • Go中使用国家新闻出版署实名认证
  • [C++] # 深入理解C++继承:从原理到实现
  • 通过网页调用身份证阅读器http websocket方法-华视电子————仙盟创梦IDE
  • 结构型智能科技的关键可行性——信息型智能向结构型智能的转换(提纲)
  • CSS知识复习2
  • 3-1 PID算法改进(积分部分)
  • Softhub软件下载站实战开发(十二):软件管理编辑页面实现
  • 科学的第五范式:人工智能如何重塑发现之疆
  • 力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
  • 【Qt】QxORM无法删除和更改主键值为0的行,否则报错:invalid primary key
  • Docker学习笔记:Docker网络
  • DotNetBrowser 2.27.14 版本发布啦!
  • Python 制作 pyd(Windows 平台的动态链接库)
  • 力扣:70. 爬楼梯
  • [Terence Tao访谈] 无限 | 关注模型 | 矢量场 | 策略性“作弊” | Lean
  • 【Prometheus 】通过 Pushgateway 上报指标数据
  • 408第三季part1 - 操作系统 - 输入输出管理
  • pyproject.toml 有什么作用呢?
  • Java对象哈希值深度解析
  • vue/微信小程序/h5 实现react的boundary
  • 汽车功能安全概念阶段开发【相关项定义HARA】2
  • 【Mysql系列】Mysql 多级隔离级别揭秘
  • 使用Python绘制图片拆分工具
  • 风平浪静、无事发生
  • 论文解读:《DeepGray:基于灰度图像和深度学习的恶意软件分类方法》
  • OneCode 智能化UI布局与定位:注解驱动的视觉编排艺术
  • 图灵完备之路(数电学习三分钟)----数据选择器与总线