新闻详情

新闻详情

首页 / 资讯中心 / 详情

机器学习第一课P1-P41:Jupyter Notebook完整代码实现与梯度下降实战

发布时间:2026/9/8 10:45:07来源:尧图网络
机器学习第一课P1-P41:Jupyter Notebook完整代码实现与梯度下降实战
简介吴恩达机器学习课程配套Jupyter代码包对应第一课P1-41内容聚焦监督学习、回归与分类基础是初学者从零上手机器学习的合适入门资料。压缩包为RAR格式共371个文件包含117张png图像、104个ipynb笔记本、47个txt文本、37个py脚本、37个ppt/pptx课件、13个md说明和12个mplstyle样式文件等整体大小83.12MB目录按章节组织便于定位。内容覆盖特征缩放与学习率、多项式回归、逻辑回归、一对多分类、过拟合等关键实验每个Notebook既有理论解释又有可运行代码示例和练习题部分章节还提供带解答的Soln版本供核对适合边看边动手。已有732人浏览/学习可按吴恩达教学节奏逐行运行代码观察输出变化以巩固理解也可结合作者已整理的学习笔记对照复习让机器学习入门更系统、更扎实全面提升实践能力。1. 项目概述这套“第一课 P1-P41”代码要解决什么1.1 课程背景与代码定位先说结论如果你正在跟吴恩达的 Machine Learning 课程第一课 P1 到 P41 这段内容基本覆盖了机器学习最核心的“地基”——监督学习、线性回归、逻辑回归、梯度下降、正则化以及初级的神经网络概念。很多人卡在这里不是因为听不懂视频而是因为课上讲的公式到了自己动手敲代码时完全不知道从哪行开始写。我整理这套 Jupyter 代码的初衷很直接把 P1-P41 对应的知识点全部落成可以在浏览器里逐格运行的 Notebook。Notebook 里不只放答案还会按照视频讲解的顺序把“概念说明 公式推导 代码实现 可视化”放在同一个文件里。你跟着视频看完 P7 讲梯度下降回到 Notebook 里就能直接跑一组二维参数的迭代更新看到损失函数一点点降下来比自己干等视频里的动画要直观得多。这套代码适合三类人一是刚接触机器学习、想把数学公式转成 Python 代码的初学者二是已经在做数据分析、但没系统过一遍机器学习基础、想快速补课的人三是准备刷吴恩达作业、但被环境问题搞得头大、想要一份“跑通即可用”的参考实现的同学。1.2 为什么用 Jupyter Notebook 而不是纯 Python 脚本我见过很多新手喜欢把代码全部写在一个.py文件里跑完再看输出。对于这种课程学习场景这是效率最低的方式没有之一。原因在于机器学习的代码是“分阶段”的。你要先看数据长什么样再做特征缩放然后训练参数最后画图评估。每一步的输出都会影响下一步的写法。如果全塞进脚本里每次改一点都要从头跑一遍浪费时间不说中间数据的形状对不对、数值范围是否合理全被糊过去了。Jupyter Notebook 的天然优势是按“单元格”执行。比如我在整理线性回归部分时第一个单元格只负责加载数据和画出散点图第二个单元格才写损失函数第三个单元格再写梯度下降。哪个单元格结果不对劲就只改那个单元格再往下跑。这个过程就像你在实验室里做实验每一步都能停下来观察而不是一口气把试剂全倒进烧杯。另外吴恩达课程里大量涉及公式推导和结果对比。Notebook 支持 Markdown 单元格我可以在每个代码块上面写清楚“这一步在干什么、对应视频的哪一分哪一秒、为什么这么做”这种做法在纯脚本里是做不到的。2. 环境准备从零搭好 Jupyter 运行环境2.1 安装 Python 和 Jupyter Notebook 的三种常见方式很多人在装 Jupyter 这一步就劝退了。其实没那么复杂选一条适合自己的路就行。我按推荐程度排个序安装方式适合人群上手难度优点缺点Anaconda 全家桶纯新手 / 课程学习低自带 Python、Jupyter、numpy、pandas、matplotlib开箱即用体积大环境多了容易乱原生 Python pip已有 Python 基础中干净、可控内存占用小所有依赖都要自己逐个装PyCharm 内置 Jupyter习惯用 IDE 写代码的人中像写普通 Python 一样写 Notebook调试方便对新手来说界面有点重如果你今天就要开始学就别纠结了直接装 Anaconda。吴恩达课程里的代码用到的库也就是 numpy、matplotlib、scipy、scikit-learn 这些Anaconda 装完就已经全带了。我自己早期踩过“漏装 scipy”的坑后来换到 Anaconda 再没遇过这种破事。2.2 conda 创建独立环境并启动网页版 Jupyter先解释一下为什么我要单独建环境。吴恩达课程是老课程了原版作业代码是 Python 2 时代的写法现在你电脑里的 Python 大概率是 3.10 或更高版本。如果你直接把作业代码拿过来跑光是print语法和map函数的返回值就能报一堆错。所以我习惯用 conda 建一个独立的 Python 3.8 环境专门跑这套课程代码。打开终端Windows 用 Anaconda Prompt依次执行conda create -n mlcourse python3.8 -y conda activate mlcourse conda install numpy matplotlib scipy scikit-learn jupyter -y等它装完在同一个终端里运行jupyter notebook终端会打印一串网址浏览器会自动打开网页版 Jupyter。如果你用的是一台云服务器或者远程开发环境想从本地浏览器访问需要加参数jupyter notebook --ip0.0.0.0 --port8888然后本地浏览器访问http://服务器IP:8888输入终端里生成的 token 就能进去了。这招在租云服务器跑实验时特别常用。2.3 PyCharm 里集成 Jupyter 的配置要点如果你跟我一样平时主力 IDE 是 PyCharm那也可以直接在 PyCharm 里面跑 Notebook不用来回切浏览器。新建一个.ipynb文件后PyCharm 会提示你选择 Jupyter 服务器。这里有三种方式本地默认直接选默认的 localhostPyCharm 会自动启动一个 Jupyter Notebook 服务。已启动的服务如果你在终端里已经跑过jupyter notebook就在配置里填http://localhost:8888加上 token。conda 环境在 PyCharm 的 Settings 里把 Project Interpreter 切换成刚才建好的mlcourse环境这样运行单元格时用的解释器就是带齐依赖的那个环境了。实际操作中我遇到最多的问题是PyCharm 里单单元格跑出来的变量在下一个单元格里找不到提示NameError: name X is not defined。这通常是因为单元格没有按顺序执行或者 PyCharm 的 kernel 被重启了。解决办法很简单从第一个单元格开始按Shift Enter一路往下跑不要用“Run All”跳到中间某个位置。3. 代码结构与核心章节实操3.1 第一课 P1-P41 的代码逻辑主线吴恩达的 Machine Learning 第一课 P1-P41按我自己的理解可以切四段第一段是机器学习绪论和单变量线性回归。重点是搞清楚什么叫训练集、假设函数 h(x)、代价函数 J(θ)以及最核心的梯度下降。我在 Notebook 里用了一组虚构的面积-房价数据把 θ0 和 θ1 的搜索过程画成了三维曲面图。你转动视角看损失曲面上那个点一路滑到谷底这个画面比任何公式都让人难忘。第二段是多变量线性回归和正规方程。这里要特别重视特征缩放我故意先用未缩放的数据跑了一次梯度下降损失曲线收敛得很慢再用标准化后的数据跑一次收敛速度肉眼可见地提升。两个结果并排放在同一个 Notebook 里对比你立刻就明白为什么要做 feature scaling 了。第三段是逻辑回归和正则化。很多人第一次学到这里会晕明明是分类问题为什么函数名里还带回归我在这部分的 Notebook 里画了决策边界把线性回归和逻辑回归的代价函数放在一起对比这样你就能看出来逻辑回归其实就是在线性回归外面套了一层 sigmoid 函数本质还是回归的思路。第四段是神经网络入门。P41 差不多讲到神经网络的第一部分我补了一个用 numpy 手写的前向传播小例子输入层 2 个节点、隐藏层 3 个节点、输出层 1 个节点权重随机初始化。虽然代码很简单但当你看清楚矩阵维度是(3,2)、(1,3)这样一层层传下去的时候后面再看深度学习框架里的 Dense 层就完全不会觉得神秘了。3.2 线性回归与梯度下降的 Jupyter 实现细节以单变量线性回归为例核心代码就这么几行但每行都值得细讲import numpy as np import matplotlib.pyplot as plt def compute_cost(X, y, theta): m len(y) predictions X theta cost (1 / (2 * m)) * np.sum((predictions - y) ** 2) return cost def gradient_descent(X, y, theta, alpha, iterations): m len(y) cost_history [] for _ in range(iterations): gradient (1 / m) * (X.T (X theta - y)) theta theta - alpha * gradient cost_history.append(compute_cost(X, y, theta)) return theta, cost_history这里有两个点是我反复跟初学者强调的。第一X的第一列要插一列全 1对应 θ0 这个偏置项。很多人照着视频抄公式写到代码里就忘了这个“虚拟列”结果矩阵乘积的维度对不上直接报错。我在 Notebook 里特意加了个单元格打印X.shape让读者亲眼看到矩阵维度是(97, 2)而不是(97, 1)。第二学习率alpha的选择是个玄学但也可以用代码来调。我写了段循环分别用alpha 0.001, 0.01, 0.1各跑 1000 次迭代把三条损失曲线画在同一张图上。曲线像瀑布一样往下掉的那条就是合适的 alpha如果损失曲线变成了往上飞的对号那就是学习率太大发散了。这种可视化的调参思路会伴随你整个机器学习生涯。3.3 练习题作业Coursera 编程作业与 Notebook 模板对照整理这套代码时我用户目标是把它和吴恩达在 Coursera 上的编程作业对接起来。第一课对应的编程作业是 ex1 线性回归和 ex2 逻辑回归。官方作业本来是一堆.m后缀的 Octave 脚本国内大多数学习者会把它改成 Python 版。我参考了作业里的ex1.m、ex1_multi.m这些文件结构把其中“填空”的部分保留成# START CODE HERE和# END CODE HERE再在旁边给出参考实现方便你对照检查。举个例子ex1 里有一个填空是计算代价函数我在 Notebook 里的写法是这样的def warmUpExercise(): return np.identity(5) def computeCost(X, y, theta): # START CODE HERE m len(y) h X theta J (1 / (2 * m)) * np.sum((h - y) ** 2) # END CODE HERE return J你可以在自己的 Notebook 里先不看答案照着作业描述自己写一遍跑出来的 J 值如果能跟官方给出的参考值对上说明你理解对了。一遍不对就对照我的实现看看差在哪这种“先思考再验证”的方式比直接把答案复制上去有用得多。4. 常见问题与排查实录4.1 Jupyter Notebook 打不开 / 运行代码报错这是新手问得最多的一类问题。症状大多是终端里输入jupyter notebook之后浏览器没反应或者在网页里点某个.ipynb文件一直在转圈。按我的排查顺序来基本都能解决看终端有没有报错信息。如果提示jupyter 不是内部或外部命令说明 Jupyter 没装好用pip install jupyter或conda install jupyter重装一遍。确认端口是否被占用。运行jupyter notebook --port9999换一个端口试试。我之前遇到过 VS Code 的 notebook 和浏览器抢 8888 端口的情况换个端口立刻就好了。如果是打不开.ipynb文件检查文件路径里有没有中文和空格。Jupyter 对中文路径支持不好最好把整个课程文件夹放到纯英文路径下比如D:\CourseraML\。4.2 subprocess-exited-with-error 这类环境问题怎么破热词里专门提到jupyter notebook error: subprocess-exited-with-error我遇到过很多次大多数场景是用户用 pip 安装某些包时编译过程出了错。比如装scikit-learn需要编译 C 扩展Windows 上没装 Microsoft C Build Tools就会报这个。解决思路分三步先看报错日志的最后几行。如果是error: Microsoft Visual C 14.0 or greater is required那直接去微软官网装 Visual Studio Build Tools勾选 C 桌面开发组件装完重试。如果不想装这么重的组件换用 conda 安装因为 conda 的包是预编译好的不需要本地编译conda install scikit-learn -c conda-forge如果 conda 安装也报错大概率是 conda 源的问题。换清华镜像源再把.condarc配置文件里的默认源替换掉。这一步做完绝大多数包都能顺利装上。4.3 Matplotlib 中文乱码、numpy 版本差异等学习期高频坑这一节分享几个我实际初始化环境时踩过的坑都是官网文档不会写但网上天天有人问的。第一个坑是 Matplotlib 画图时中文变方框。原因是默认字体不支持中文。我一般直接在 Notebook 最前面加一段全局配置import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] FalseWindows 上用 SimHeimacOS 上用Arial Unicode MSLinux 上需要先安装中文字体。如果你不想折腾字体更稳妥的办法是图里全部用英文标签比如x label: size而不是“面积”。英文标签永远不会乱码学习阶段没必要跟自己过不去。第二个坑是 numpy 版本差异。吴恩达课程里有一行代码是X np.matrix(X)但新版本 numpy 对matrix类的支持越来越边缘化很多操作如A * B在 matrix 和 ndarray 里的含义完全不同。我在整理代码时统一改成了ndarray写法用做矩阵乘法用*做逐元素乘法。你如果拿到的是网上流传的旧代码看到np.matrix就手动改成np.array然后注意乘法符号基本不会有问题。第三个坑是画图弹不出窗口。在 Jupyter 里用plt.show()有时候没有反应这不一定是代码错了而是没开启内联显示。在 Notebook 开头加一句魔法命令%matplotlib inline加了之后图片会直接嵌在单元格下方方便截图和存档。如果你在 PyCharm 里用 Jupyter需要在设置里把 Plotting 工具窗口打开或者仍然使用%matplotlib inline。我实际跑完这一整套 P1-P41 的 Notebook最大的感触是机器学习入门拼的不是智力而是有没有一个“代码能跑起来、随时能验证想法”的环境。环境通了后面的路就顺了一大半。如果你手里有一套现成的 P1-P41 笔记或代码别只当收藏夹吃灰按我上面说的方法一边看视频一边在 Jupyter 里跑通每个单元格再顺手把每一个数学公式都对照代码“翻译”一遍。等这 41 个 Notebook 全部跑完你对线性回归、逻辑回归、神经网络这些底层概念的理解就已经超过大多数只刷视频不写代码的学习者了。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

孩子一口吐掉的鸡内金,知医邦用一道膨化工艺让它变成了零食——从炒鸡内金的成分密码到挤压膨化的技术解构 2026/9/8 11:33:16

孩子一口吐掉的鸡内金,知医邦用一道膨化工艺让它变成了零食——从炒鸡内金的成分密码到挤压膨化的技术解构

一、一碗鸡蛋羹里的”战争”不少家长都有过这样的经历:孩子积食不消化,买来鸡内金粉,冲水喝一口就推杯子,拌进粥里说”有怪味”,混在酸奶里喝完一口便再也不肯碰第二口。有人想到拌进鸡蛋羹,用蛋香和香油去…

阅读更多 →
阿里云Qoder智能体:AI编程助手部署与实战应用指南 2026/9/8 11:33:16

阿里云Qoder智能体:AI编程助手部署与实战应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
从Harness到Multi-Agent:智能体工程化落地与高并发协作实践 2026/9/8 11:33:16

从Harness到Multi-Agent:智能体工程化落地与高并发协作实践

大厂智能体岗位的面试,已经不再是“你调过几个大模型 API”这么简单。最近无论是搜 deepseek harness、codex harness,还是搜 Multi-Agent 开发、A2A 智能体协作,其实都在补同一块内容:如何把单个 Agent 从“能跑通的 Demo”变成稳…

阅读更多 →
老设备越用越卡?从诊断到优化,一份不玄学的性能恢复指南 2026/9/8 11:33:16

老设备越用越卡?从诊断到优化,一份不玄学的性能恢复指南

看到这个标题,我想先确认一件事:你手里那个代号叫 Q33 的东西,是不是也已经跟了你很多年?它可能是一台旧手机、一台老笔记本、一块显卡、一个一直舍不得卸载的软件,或者就是你给某台设备私下起的名字。我这里没有 Q33 …

阅读更多 →
十大主流AI中医:谁真正跑通了完整居家远程四诊合参 2026/9/8 11:33:16

十大主流AI中医:谁真正跑通了完整居家远程四诊合参

随着AI中医、互联网中医赛道持续迭代普及,居家慢病调理、远程线上复诊逐步成为大众常态化就医选择,市场对AI中医居家远程完整四诊合参服务的刚需持续爆发:普通用户无需前往医疗机构,在家即可依托AI中医技术独立完成望、闻、问、切…

阅读更多 →
Linux设备驱动开发入门指南:从内核模块到字符设备与设备树 2026/9/8 11:30:16

Linux设备驱动开发入门指南:从内核模块到字符设备与设备树

做嵌入式这些年,我被问得最多的一个问题就是:Linux设备驱动开发到底怎么入门?问的人有刚转行的应届生,有做了三四年应用开发想往底层走的工程师,也有在学校实验室里自己啃内核模块的本科生。我的回答通常不是先甩一堆源…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞