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

从房价预测到猫图识别:用Python手把手复现吴恩达第二周逻辑回归实战

从房价预测到猫图识别用Python手把手复现吴恩达第二周逻辑回归实战在人工智能的入门旅程中逻辑回归就像是一把打开机器学习大门的金钥匙。这门看似简单的算法却蕴含着神经网络最基础的思想精髓。今天我们将摆脱枯燥的理论推导用Python从零实现一个能识别猫图的逻辑回归模型让你亲身体验AI模型的完整构建过程。1. 逻辑回归的本质与猫图识别场景逻辑回归虽然名字里带着回归实则是解决二分类问题的利器。想象一下你正在开发一个智能相册应用需要自动筛选出包含猫咪的照片——这正是典型的二分类任务输入一张图片输出是猫(1)或不是猫(0)。为什么选择猫图识别作为实践项目视觉识别比房价预测更直观有趣64x64的小尺寸图片处理计算量适中结果可视化容易理解能直接看到识别效果与吴恩达课程中的教学案例完美契合在技术实现层面我们需要解决三个核心问题如何将图片转换为数学模型可处理的数据怎样构建能够学习特征的逻辑回归模型如何评估模型性能并持续优化2. 数据预处理从像素到特征向量处理图像数据的第一步是将其转换为数值矩阵。对于64x64像素的RGB图片实际上由三个64×64的矩阵组成分别对应红、绿、蓝三个颜色通道。import numpy as np from PIL import Image def image_to_feature(image_path): img Image.open(image_path) img img.resize((64, 64)) # 统一尺寸 rgb_array np.array(img) / 255.0 # 归一化像素值 return rgb_array.reshape(-1, 1) # 展平为特征向量关键预处理步骤步骤操作目的注意事项尺寸统一调整为64x64保证输入维度一致保持宽高比或直接拉伸颜色分离拆分为RGB通道获取完整色彩信息通道顺序要一致数值归一化除以255将像素值缩放到[0,1]区间避免数值溢出向量展平reshape操作转换为单列特征向量保持样本间维度一致提示在实际项目中建议使用OpenCV代替PIL进行图像处理性能更优且功能更丰富。3. 构建逻辑回归模型的核心组件逻辑回归模型由三个关键部分组成线性变换、Sigmoid激活函数和损失函数。让我们用NumPy逐一实现3.1 Sigmoid函数实现Sigmoid函数将线性输出压缩到(0,1)区间完美适配概率预测def sigmoid(z): 计算Sigmoid函数值 参数: z -- 线性变换结果 返回: a -- 激活值(概率) return 1 / (1 np.exp(-z)) # 测试Sigmoid函数 test_z np.array([-1, 0, 1]) print(Sigmoid输出:, sigmoid(test_z))3.2 初始化模型参数正确的参数初始化对模型训练至关重要def initialize_parameters(dim): 初始化权重和偏置 参数: dim -- 特征向量的维度 返回: params -- 包含w和b的字典 w np.zeros((dim, 1)) # 权重初始化为0 b 0.0 # 偏置初始化为0 return {w: w, b: b} # 示例初始化12288维参数(64*64*3) parameters initialize_parameters(12288)3.3 前向传播计算整合线性变换和Sigmoid激活def forward_propagation(X, params): 前向传播计算预测值 参数: X -- 输入特征矩阵 (n_x, m) params -- 包含w和b的字典 返回: A -- 预测概率值 cache -- 包含Z的缓存(用于反向传播) w params[w] b params[b] Z np.dot(w.T, X) b # 线性变换 A sigmoid(Z) # 激活输出 return A, {Z: Z}4. 损失函数与梯度下降实现4.1 交叉熵损失计算逻辑回归使用交叉熵损失函数能有效衡量预测概率与实际标签的差异def compute_cost(A, Y): 计算交叉熵损失 参数: A -- 预测概率 (1, m) Y -- 真实标签 (1, m) 返回: cost -- 平均交叉熵损失 m Y.shape[1] cost -np.mean(Y * np.log(A) (1-Y) * np.log(1-A)) return np.squeeze(cost) # 去除多余的维度4.2 反向传播梯度计算通过微积分链式法则计算梯度def backward_propagation(X, Y, A, cache): 计算梯度 参数: X -- 输入特征 (n_x, m) Y -- 真实标签 (1, m) A -- 预测概率 (1, m) cache -- 包含Z的缓存 返回: grads -- 包含dw和db的字典 m X.shape[1] dZ A - Y # 关键梯度项 dw np.dot(X, dZ.T) / m db np.sum(dZ) / m return {dw: dw, db: db}4.3 参数更新使用梯度下降算法迭代优化参数def update_parameters(params, grads, learning_rate0.01): 更新模型参数 参数: params -- 包含w和b的字典 grads -- 包含dw和db的字典 learning_rate -- 学习率 返回: params -- 更新后的参数 w params[w] - learning_rate * grads[dw] b params[b] - learning_rate * grads[db] return {w: w, b: b}5. 向量化实现与性能优化原始实现中使用for循环逐个样本计算效率低下向量化技术能大幅提升运行速度5.1 向量化vs循环实现对比import time # 生成随机数据 np.random.seed(1) X np.random.rand(12288, 1000) # 1000个样本 Y np.random.randint(0, 2, (1, 1000)) params initialize_parameters(12288) # for循环实现 tic time.time() A_for np.zeros((1, 1000)) for i in range(1000): z np.dot(params[w].T, X[:, i]) params[b] A_for[0, i] sigmoid(z) toc time.time() print(f循环实现耗时: {1000*(toc-tic):.2f}ms) # 向量化实现 tic time.time() Z_vec np.dot(params[w].T, X) params[b] A_vec sigmoid(Z_vec) toc time.time() print(f向量化实现耗时: {1000*(toc-tic):.2f}ms) # 验证结果一致性 print(结果差异:, np.sum(np.abs(A_for - A_vec)))典型输出结果循环实现耗时: 185.42ms 向量化实现耗时: 1.97ms 结果差异: 0.05.2 完整训练流程整合将各个组件整合为完整的训练流程def model(X, Y, num_iterations2000, learning_rate0.5, print_costFalse): 完整训练流程 参数: X -- 输入特征 (n_x, m) Y -- 真实标签 (1, m) num_iterations -- 迭代次数 learning_rate -- 学习率 print_cost -- 是否打印损失 返回: params -- 训练好的参数 costs -- 损失记录 costs [] params initialize_parameters(X.shape[0]) for i in range(num_iterations): # 前向传播 A, cache forward_propagation(X, params) # 计算损失 cost compute_cost(A, Y) costs.append(cost) # 反向传播 grads backward_propagation(X, Y, A, cache) # 参数更新 params update_parameters(params, grads, learning_rate) # 每100次打印损失 if print_cost and i % 100 0: print(f迭代次数 {i}: 损失 {cost:.4f}) return params, costs6. 模型评估与实战技巧训练完成后我们需要评估模型性能并优化6.1 预测函数实现def predict(X, params, threshold0.5): 使用训练好的模型进行预测 参数: X -- 输入特征 (n_x, m) params -- 包含w和b的字典 threshold -- 分类阈值 返回: Y_prediction -- 预测标签 (1, m) A, _ forward_propagation(X, params) Y_prediction (A threshold).astype(int) return Y_prediction6.2 性能评估指标def evaluate(Y_pred, Y_true): 计算模型评估指标 参数: Y_pred -- 预测标签 (1, m) Y_true -- 真实标签 (1, m) 返回: metrics -- 包含各项指标的字典 m Y_true.shape[1] accuracy np.mean(Y_pred Y_true) precision np.sum(Y_pred * Y_true) / np.sum(Y_pred) recall np.sum(Y_pred * Y_true) / np.sum(Y_true) return { accuracy: accuracy, precision: precision, recall: recall }6.3 学习率选择策略不同学习率对训练过程的影响学习率收敛速度最终性能风险0.1-1.0快可能最优容易震荡0.01-0.1适中稳定最优较安全0.01慢可能欠拟合耗时注意实际项目中建议使用学习率衰减策略初期用较大学习率快速下降后期逐步减小以精细调优。7. 项目扩展与进阶方向掌握了基础逻辑回归后可以考虑以下进阶方向性能优化技巧添加L2正则化防止过拟合实现mini-batch梯度下降加入学习率衰减策略使用更高级的优化器(如Adam)工程实践建议构建图像预处理流水线实现模型保存与加载功能开发简单的Web演示界面使用GPU加速训练过程# 示例添加L2正则化 def compute_cost_with_regularization(A, Y, params, lambda_0.1): m Y.shape[1] cross_entropy_cost compute_cost(A, Y) L2_cost (lambda_/(2*m)) * np.sum(np.square(params[w])) return cross_entropy_cost L2_cost从房价预测到猫图识别逻辑回归向我们展示了机器学习最基础也最强大的思想。当你亲手实现这个项目后会发现神经网络不再神秘——它们不过是这些基础组件的巧妙组合。建议尝试用不同的图片集测试你的模型比如识别狗狗、花朵或者手写数字观察模型表现的变化。
http://www.rkmt.cn/news/1397512.html

相关文章:

  • 2026年亚马逊还能做吗? - 易派
  • 2026年 东莞/广州溶剂厂家推荐榜:天那水、白电油、稀释剂、石脑油等工业溶剂源头厂商实力口碑精选 - 品牌企业推荐师(官方)
  • 基于 PLC 的磨线机和剥线机控制系统的设计与实现(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码
  • 【Agent 学习日记】我们来说说 Agent 的基础框架是什么?
  • 单例模式两种实现方法
  • MySQL 运维实战系列(七)mysql 主从配置
  • 超高速磨削试验台数字化设计与仿真分析【附仿真】
  • CANN 学习路线 - CANN学习路径规划与资源推荐
  • 从Wi-Fi到汽车:聊聊FMCW雷达技术怎么悄悄改变了我们的生活
  • ABAP:对外发布Web Service
  • 2026年食品级碳酸氢铵厂家名录:工业碳铵生产企业/工业级碳酸氢铵生产企业/工业级碳铵生产企业/食品碳酸氢铵生产企业/选择指南 - 优质品牌商家
  • 【图像检测】基于霍夫变换实现道路检测附Matlab代码
  • Cortex-R52启动地址限制与MPU配置解析
  • 小红书与中科院突破:反向学习法实现AI数学推理能力提升11.5分
  • Agent 性能优化实战:延迟、Token、并发三个维度怎么调
  • LFGB和FDA对食品接触材料的要求有何不同?
  • 从酒鬼掉崖到推荐系统:用Python模拟Random Walk算法,理解PageRank的数学基础
  • 端侧推理配方:鸿蒙系统上的模型部署与优化
  • 从RealSense D435i到BundleFusion:手把手构建离线三维重建数据流水线
  • 消息发送失败处理与 DLQ 补偿流程
  • 面向对象设计原则(一)
  • 5. 【穷举-作业-编程题-3】求阿姆斯特朗数
  • OPC 中国是做什么的?一文读懂 OPC 与 OPD 体系
  • 面试官:说一下 Agent 的常见范式
  • 精通开关电源设计 day1
  • 【限时开源】Claude长文档推理增强工具包(v1.3):自动段落锚定+逻辑图谱构建+矛盾点高亮——仅剩最后87个内测名额
  • 告别多平台折腾!一个 Key 调用国内主流大模型,DMXAPI 开发者实测体验
  • 被骂上热搜!粉木耳标签涉嫌低俗擦边。盒马火速致歉并下架
  • 2026西南方管供应商推荐及选购指南:镀锌方管生产厂家/附近方管批发/附近钢材批发市场/附近钢材采购批发/哪里有方管批发/选择指南 - 优质品牌商家
  • 8051单片机SFR外部访问机制与工程实践