<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>成本函数 on JasperSao的博客</title><link>https://jasperstonnne.github.io/MyBlog/tags/%E6%88%90%E6%9C%AC%E5%87%BD%E6%95%B0/</link><description>Recent content in 成本函数 on JasperSao的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 30 Aug 2026 08:12:59 +0000</lastBuildDate><atom:link href="https://jasperstonnne.github.io/MyBlog/tags/%E6%88%90%E6%9C%AC%E5%87%BD%E6%95%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>机器学习基础：线性回归模型</title><link>https://jasperstonnne.github.io/MyBlog/p/coursera-ml-linear-regression/</link><pubDate>Tue, 21 Jul 2026 00:00:00 +0800</pubDate><guid>https://jasperstonnne.github.io/MyBlog/p/coursera-ml-linear-regression/</guid><description>&lt;img src="https://jasperstonnne.github.io/MyBlog/p/coursera-ml-linear-regression/cover.svg" alt="Featured image of post 机器学习基础：线性回归模型" /&gt;&lt;p&gt;线性回归是机器学习里最适合入门的模型之一：它足够简单，可以把输入、预测、参数、成本函数这些核心概念讲清楚；它也足够重要，因为后续更复杂的模型训练，仍然离不开这些基本思想。本篇整理 Coursera 机器学习课程中的线性回归内容，从房价预测案例出发，梳理模型函数、训练数据、成本函数和梯度下降之间的关系。&lt;/p&gt;&#10;&lt;h2 id="线性回归的基本概念"&gt;线性回归的基本概念&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;线性回归（Linear Regression）&lt;/strong&gt; 是一种监督学习模型，通过为数据拟合一条直线来预测连续数值。&lt;/p&gt;&#10;&lt;p&gt;以房价预测为例：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;输入 &lt;code&gt;x&lt;/code&gt;：房屋面积&lt;/li&gt;&#10;&lt;li&gt;输出 &lt;code&gt;y&lt;/code&gt;：房屋价格&lt;/li&gt;&#10;&lt;li&gt;模型：一条尽可能贴合训练数据的直线&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;可将模型表示为：&lt;/p&gt;&#10;$$\hat{y} = f_{w,b}(x) = wx + b$$&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$x$：输入特征，例如房屋面积&lt;/li&gt;&#10;&lt;li&gt;$\hat{y}$：模型预测的房屋价格&lt;/li&gt;&#10;&lt;li&gt;$w$：直线的斜率&lt;/li&gt;&#10;&lt;li&gt;$b$：直线的截距&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;因为只有一个输入特征，这种模型称为&lt;strong&gt;单变量线性回归&lt;/strong&gt;（Univariate Linear Regression）。“单变量”表示模型只有一个输入变量，而不是只有一个参数，该模型仍然包含两个参数 $w$ 和 $b$。&lt;/p&gt;&#10;&lt;p&gt;以后还可以使用多个输入特征预测房价，例如房屋面积、卧室数量、浴室数量、房屋年龄、地理位置等，属于多变量或多特征线性回归。&lt;/p&gt;&#10;&lt;h2 id="训练集与符号约定"&gt;训练集与符号约定&#10;&lt;/h2&gt;&lt;h3 id="训练集"&gt;训练集&#10;&lt;/h3&gt;&lt;p&gt;用于训练模型的数据称为&lt;strong&gt;训练集（Training Set）&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;房价预测的训练数据来自美国波特兰市，包含：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;房屋面积，单位为平方英尺&lt;/li&gt;&#10;&lt;li&gt;房屋售价，单位为千美元&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;同一组数据可以通过两种方式表示：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;散点图&lt;/strong&gt;：横轴为房屋面积，纵轴为房屋价格，每个数据点对应一套已售房屋。如果训练集有 47 套房屋，图中就有 47 个数据点。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;数据表&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;房屋面积（平方英尺）&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;房屋价格（千美元）&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2104&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;400&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;…&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;…&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;表格中的每一行对应一个训练示例，也对应散点图中的一个数据点。例如面积 2104 平方英尺，售价 400 千美元，即 400,000 美元。&lt;/p&gt;&#10;&lt;h3 id="符号约定"&gt;符号约定&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;符号&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;含义&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;房价示例&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$x$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;输入特征（Feature）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;房屋面积&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$y$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;真实值（Label / Target Variable）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;房屋实际售价&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$\hat{y}$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;模型预测值&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;预测房价&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$f_{w,b}(x)$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;参数为 $w, b$ 的模型对 $x$ 的预测&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$\hat{y} = wx + b$&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$m$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;训练样本总数&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;47&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$(x^{(i)}, y^{(i)})$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;第 $i$ 个训练样本&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$(2104, 400)$&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;一个完整的训练示例由输入和正确输出组成 $(x, y)$。第 $i$ 个训练示例表示为 $(x^{(i)}, y^{(i)})$，其中 $x^{(i)}$ 是第 $i$ 个样本的输入，$y^{(i)}$ 是第 $i$ 个样本的正确输出。&lt;/p&gt;&#10;&lt;p&gt;需要特别注意：$x^{(2)}$ 表示“第二个训练示例的输入”，&lt;strong&gt;不是&lt;/strong&gt; $x$ 的平方。括号中的上标只是训练样本的编号。&lt;/p&gt;&#10;&lt;h2 id="为什么称为监督学习"&gt;为什么称为监督学习&#10;&lt;/h2&gt;&lt;p&gt;训练集中同时提供了输入（房屋面积）和正确输出（房屋实际售价）。每套已售房屋的数据都相当于向模型提供一个带答案的学习示例，因此这种学习方式称为“监督学习”。&lt;/p&gt;&#10;&lt;p&gt;基本流程：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;收集包含输入和正确输出的数据&lt;/li&gt;&#10;&lt;li&gt;使用这些数据训练模型&lt;/li&gt;&#10;&lt;li&gt;模型学习输入与输出之间的规律&lt;/li&gt;&#10;&lt;li&gt;将新输入交给模型&lt;/li&gt;&#10;&lt;li&gt;模型预测相应的输出&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="参数-w-和-b-的作用"&gt;参数 $w$ 和 $b$ 的作用&#10;&lt;/h2&gt;&lt;h3 id="斜率-w"&gt;斜率 $w$&#10;&lt;/h3&gt;&lt;p&gt;$w$ 决定直线的倾斜程度：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;w &amp;gt; 0：直线向右上方倾斜，x 增大时预测值增大&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;w = 0：直线是水平的，预测值不随 x 变化&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;w &amp;lt; 0：直线向右下方倾斜，x 增大时预测值减小&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在房价问题中，$w$ 可以理解为房屋面积每增加一个单位，预测价格增加多少。$w$ 也称为权重或系数。&lt;/p&gt;&#10;&lt;h3 id="截距-b"&gt;截距 $b$&#10;&lt;/h3&gt;&lt;p&gt;$b$ 决定直线与纵轴的交点。当 $x = 0$ 时：&lt;/p&gt;&#10;$$f(0) = b$$&lt;p&gt;因此 $b$ 是模型在输入为零时的预测值。&lt;/p&gt;&#10;&lt;h3 id="示例"&gt;示例&#10;&lt;/h3&gt;&lt;p&gt;当 $w = 0, b = 1.5$ 时：&lt;/p&gt;&#10;$$f(x) = 1.5$$&lt;p&gt;无论输入是多少，预测结果始终为 1.5。&lt;/p&gt;&#10;&lt;p&gt;当 $w = 0.5, b = 0$ 时：&lt;/p&gt;&#10;$$f(x) = 0.5x$$&lt;p&gt;直线斜率为 0.5，经过原点。&lt;/p&gt;&#10;&lt;p&gt;当 $w = 0.5, b = 1$ 时：&lt;/p&gt;&#10;$$f(x) = 0.5x + 1$$&lt;p&gt;直线斜率仍为 0.5，但与纵轴相交于 1。&lt;/p&gt;&#10;&lt;p&gt;假设 $f(x) = 0.1x + 50$，当房屋面积为 1250 平方英尺时：&lt;/p&gt;&#10;$$\hat{y} = 0.1 \times 1250 + 50 = 175$$&lt;p&gt;预测价格为 175,000 美元。&lt;/p&gt;&#10;&lt;p&gt;不同的 $w$ 和 $b$ 会形成不同的直线，也会产生不同的预测结果。&lt;/p&gt;&#10;&lt;h2 id="学习算法的任务"&gt;学习算法的任务&#10;&lt;/h2&gt;&lt;p&gt;训练线性回归模型的核心任务，是根据训练数据选择合适的 $w$ 和 $b$，使直线尽可能贴近数据点。&lt;/p&gt;&#10;&lt;p&gt;完整过程可以表示为：&lt;/p&gt;&#10;$$\{(x^{(i)}, y^{(i)})\}_{i=1}^{m} \longrightarrow \text{学习算法} \longrightarrow w, b \longrightarrow f_{w,b}(x)$$&lt;p&gt;也就是说：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;将训练数据交给学习算法&lt;/li&gt;&#10;&lt;li&gt;学习算法寻找合适的 $w$ 和 $b$&lt;/li&gt;&#10;&lt;li&gt;得到模型 $f_{w,b}(x) = wx + b$&lt;/li&gt;&#10;&lt;li&gt;用模型预测新输入对应的 $\hat{y}$&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;客户的房屋尚未出售，因此其真实价格不在训练集中。模型需要先从已售房屋的数据中学习，再预测这套房屋的价格。&lt;/p&gt;&#10;&lt;h2 id="y-与-haty-的区别"&gt;$y$ 与 $\hat{y}$ 的区别&#10;&lt;/h2&gt;&lt;h3 id="y实际目标值"&gt;$y$：实际目标值&#10;&lt;/h3&gt;&lt;p&gt;$y$ 表示训练数据中的真实答案。例如 $y = 400$ 表示某套房屋的实际售价为 400 千美元。&lt;/p&gt;&#10;&lt;h3 id="haty预测值"&gt;$\hat{y}$：预测值&#10;&lt;/h3&gt;&lt;p&gt;$\hat{y}$ 读作 “y hat”，表示模型对 $y$ 的估计：&lt;/p&gt;&#10;$$\hat{y} = f_{w,b}(x) = wx + b$$&lt;p&gt;预测值不一定等于实际值：&lt;/p&gt;&#10;$$\hat{y} \neq y$$&lt;p&gt;例如，模型预测某套房屋售价为 220,000 美元，但只有房屋真正售出后，才能知道真实售价 $y$。&lt;/p&gt;&#10;&lt;p&gt;需要明确区分：&lt;/p&gt;&#10;$$\boxed{y = \text{真实值}, \qquad \hat{y} = \text{预测值}}$$&lt;h2 id="成本函数"&gt;成本函数&#10;&lt;/h2&gt;&lt;h3 id="为什么需要成本函数"&gt;为什么需要成本函数&#10;&lt;/h3&gt;&lt;p&gt;不同的 $w$ 和 $b$ 会产生不同的直线。成本函数的作用是：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;衡量一组 $w, b$ 所产生的直线，对训练数据拟合得有多好。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;成本越小，通常说明预测值越接近真实值。&lt;/p&gt;&#10;&lt;h3 id="预测误差"&gt;预测误差&#10;&lt;/h3&gt;&lt;p&gt;对于第 $i$ 个训练样本 $(x^{(i)}, y^{(i)})$，模型预测值为：&lt;/p&gt;&#10;$$\hat{y}^{(i)} = f_{w,b}(x^{(i)})$$&lt;p&gt;预测误差为：&lt;/p&gt;&#10;$$\hat{y}^{(i)} - y^{(i)} = \text{预测值} - \text{真实值}$$&lt;p&gt;例如，模型预测价格为 280，真实价格为 300：&lt;/p&gt;&#10;$$280 - 300 = -20$$&lt;p&gt;误差为 $-20$，表示模型低估了价格。&lt;/p&gt;&#10;&lt;h3 id="平方误差成本函数"&gt;平方误差成本函数&#10;&lt;/h3&gt;&lt;p&gt;线性回归常用的成本函数是&lt;strong&gt;平方误差成本函数&lt;/strong&gt;：&lt;/p&gt;&#10;$$\boxed{J(w,b) = \frac{1}{2m} \sum_{i=1}^{m} \left(f_{w,b}(x^{(i)}) - y^{(i)}\right)^2}$$&lt;p&gt;也可以写成：&lt;/p&gt;&#10;$$J(w,b) = \frac{1}{2m} \sum_{i=1}^{m} \left(\hat{y}^{(i)} - y^{(i)}\right)^2$$&lt;p&gt;计算过程：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;计算每个样本的预测值&lt;/li&gt;&#10;&lt;li&gt;用预测值减去真实值&lt;/li&gt;&#10;&lt;li&gt;将误差平方&lt;/li&gt;&#10;&lt;li&gt;把所有平方误差相加&lt;/li&gt;&#10;&lt;li&gt;除以 $2m$&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="为什么误差要平方"&gt;为什么误差要平方&#10;&lt;/h3&gt;&lt;p&gt;如果直接将误差相加，正负误差可能互相抵消：&lt;/p&gt;&#10;$$(-20) + 20 = 0$$&lt;p&gt;但模型实际产生了两次误差。平方以后：&lt;/p&gt;&#10;$$(-20)^2 + 20^2 = 800$$&lt;p&gt;因此：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;所有误差都会变成非负数&lt;/li&gt;&#10;&lt;li&gt;较大的误差会受到更明显的惩罚&lt;/li&gt;&#10;&lt;li&gt;成本不会因为正负抵消而错误地变小&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="为什么除以-m-和-2"&gt;为什么除以 $m$ 和 $2$&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;除以 $m$&lt;/strong&gt;：$m$ 是训练样本数量。除以 $m$ 相当于计算平均误差，使成本不会仅仅因为训练数据变多而自动增大。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;再除以 $2$&lt;/strong&gt;：主要是为了让后续求导和梯度下降的公式更简洁。是否除以 $2$ 不会改变最佳参数的位置。&lt;/p&gt;&#10;&lt;h2 id="成本函数的直观示例"&gt;成本函数的直观示例&#10;&lt;/h2&gt;&lt;p&gt;为了方便观察，暂时令 $b = 0$，模型简化为：&lt;/p&gt;&#10;$$f_w(x) = wx$$&lt;p&gt;训练集为：&lt;/p&gt;&#10;$$(1, 1), \quad (2, 2), \quad (3, 3)$$&lt;h3 id="当-w--1"&gt;当 $w = 1$&#10;&lt;/h3&gt;&lt;p&gt;预测值为 1, 2, 3，全部等于真实值：&lt;/p&gt;&#10;$$J(1) = 0$$&lt;p&gt;模型完美拟合训练数据。&lt;/p&gt;&#10;&lt;h3 id="当-w--05"&gt;当 $w = 0.5$&#10;&lt;/h3&gt;&lt;p&gt;预测值为 0.5, 1, 1.5。平方误差为：&lt;/p&gt;&#10;$$(0.5-1)^2 + (1-2)^2 + (1.5-3)^2 = 0.25 + 1 + 2.25 = 3.5$$$$J(0.5) = \frac{3.5}{2 \times 3} \approx 0.58$$&lt;h3 id="当-w--0"&gt;当 $w = 0$&#10;&lt;/h3&gt;&lt;p&gt;所有预测值都是 0：&lt;/p&gt;&#10;$$J(0) = \frac{1^2 + 2^2 + 3^2}{6} = \frac{14}{6} \approx 2.33$$&lt;h3 id="当-w---05"&gt;当 $w = -0.5$&#10;&lt;/h3&gt;&lt;p&gt;直线方向与数据趋势相反：&lt;/p&gt;&#10;$$J(-0.5) = 5.25$$&lt;h3 id="结果对比"&gt;结果对比&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;$w$&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;$J(w)$&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;拟合情况&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$-0.5$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$5.25$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;很差&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$2.33$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;较差&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0.5$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0.58$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;较好&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$1$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;$0$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;最佳&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;这个例子中的最佳参数是 $w = 1$。&lt;/p&gt;&#10;&lt;h2 id="模型函数与成本函数的区别"&gt;模型函数与成本函数的区别&#10;&lt;/h2&gt;&lt;p&gt;两者容易混淆，需要明确区分：&lt;/p&gt;&#10;&lt;h3 id="模型函数-f_wbx--wx--b"&gt;模型函数 $f_{w,b}(x) = wx + b$&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;输入是 $x$（特征），输出是预测值 $\hat{y}$&lt;/li&gt;&#10;&lt;li&gt;模型图的坐标轴：横轴 $x$（房屋面积），纵轴 $y$ 或 $\hat{y}$（价格）&lt;/li&gt;&#10;&lt;li&gt;回答的问题：&lt;strong&gt;“这套房子预测多少钱？”&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="成本函数-jwb"&gt;成本函数 $J(w,b)$&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;输入是模型参数 $w, b$，输出是模型的成本&lt;/li&gt;&#10;&lt;li&gt;成本图的坐标轴是参数和成本，而不是房屋面积与价格&lt;/li&gt;&#10;&lt;li&gt;回答的问题：&lt;strong&gt;“这组模型参数整体表现有多差？”&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="成本函数的图像"&gt;成本函数的图像&#10;&lt;/h2&gt;&lt;h3 id="只有参数-w-时b--0"&gt;只有参数 $w$ 时（$b = 0$）&#10;&lt;/h3&gt;&lt;p&gt;成本函数只有一个参数 $J(w)$，通常呈 U 形曲线：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;成本 J&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↑&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | \ /&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | \_____/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; +------------→ w&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 最小值&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最低点对应成本最小的 $w$。&lt;/p&gt;&#10;&lt;h3 id="同时使用-w-和-b-时"&gt;同时使用 $w$ 和 $b$ 时&#10;&lt;/h3&gt;&lt;p&gt;完整模型包含两个参数 $J(w,b)$，这时成本函数是一个三维曲面，通常类似碗形：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;一个方向代表 $w$&lt;/li&gt;&#10;&lt;li&gt;一个方向代表 $b$&lt;/li&gt;&#10;&lt;li&gt;曲面的高度代表成本 $J(w,b)$&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;碗底对应成本函数的最小值，也就是最佳的 $w, b$。&lt;/p&gt;&#10;&lt;h3 id="等高线图"&gt;等高线图&#10;&lt;/h3&gt;&lt;p&gt;三维成本函数也可以用二维的&lt;strong&gt;等高线图&lt;/strong&gt;表示。每条椭圆线表示成本相同的一组 $w, b$：&lt;/p&gt;&#10;$$J(w_1, b_1) = J(w_2, b_2)$$&lt;p&gt;可以把等高线图理解成从正上方观察碗形曲面：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;外层椭圆：成本通常较高&lt;/li&gt;&#10;&lt;li&gt;越靠近中心：成本通常越低&lt;/li&gt;&#10;&lt;li&gt;最内层椭圆中心：成本最小值附近&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;不同的 $w, b$ 即使成本相同，也可能对应不同的模型直线。&lt;/p&gt;&#10;&lt;h2 id="训练目标与梯度下降"&gt;训练目标与梯度下降&#10;&lt;/h2&gt;&lt;h3 id="训练目标"&gt;训练目标&#10;&lt;/h3&gt;&lt;p&gt;线性回归最终需要解决的问题是：&lt;/p&gt;&#10;$$\boxed{\min_{w,b} J(w,b)}$$&lt;p&gt;也就是找到一组 $w, b$，使成本函数尽可能小。&lt;/p&gt;&#10;&lt;p&gt;完整逻辑：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;选择 w, b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;得到直线 f(x) = wx + b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;计算每个样本的预测误差&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;计算成本 J(w,b)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;不断调整 w, b&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;找到成本最小的参数&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="为什么需要梯度下降"&gt;为什么需要梯度下降&#10;&lt;/h3&gt;&lt;p&gt;理论上可以手动尝试很多组 $w, b$，计算每一组参数的成本，再选择成本最低的一组。但这种方法效率非常低，当模型参数很多时，几乎无法手动完成。&lt;/p&gt;&#10;&lt;p&gt;因此需要一种能够自动调整参数、寻找成本函数最小值的算法：&lt;/p&gt;&#10;$$\boxed{\text{梯度下降（Gradient Descent）}}$$&lt;p&gt;梯度下降不仅用于线性回归，也是训练神经网络和许多复杂人工智能模型的基础算法。&lt;/p&gt;&#10;&lt;h2 id="成本函数的代码实现"&gt;成本函数的代码实现&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;compute_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 训练样本数量&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cost_sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;f_wb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="c1"&gt;# 第 i 个样本的预测值&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f_wb&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="c1"&gt;# 平方误差&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;cost_sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cost_sum&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt; &lt;span class="c1"&gt;# 累加&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;total_cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cost_sum&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 计算平均成本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;total_cost&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;逐步理解：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;m = x.shape[0]&lt;/code&gt;：获取训练样本数量&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;cost_sum = 0&lt;/code&gt;：准备变量，累计所有样本的平方误差&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;for i in range(m)&lt;/code&gt;：逐个处理训练样本&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;f_wb = w * x[i] + b&lt;/code&gt;：计算预测值 $\hat{y}^{(i)} = wx^{(i)} + b$&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;cost = (f_wb - y[i]) ** 2&lt;/code&gt;：计算预测值和真实价格的平方误差&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;cost_sum = cost_sum + cost&lt;/code&gt;：把当前样本的误差加入总误差&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;total_cost = cost_sum / (2 * m)&lt;/code&gt;：按照成本函数公式计算最终成本&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;对应公式：&lt;/p&gt;&#10;$$J(w,b) = \frac{1}{2m} \sum_{i=0}^{m-1} \left(wx^{(i)} + b - y^{(i)}\right)^2$$&lt;h3 id="验证示例"&gt;验证示例&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;x_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;y_train&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;300.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;500.0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;两个预测分别是：&lt;/p&gt;&#10;$$200 \times 1 + 100 = 300$$$$200 \times 2 + 100 = 500$$&lt;p&gt;预测值与真实值完全相同：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;compute_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_train&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 结果：0.0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这说明 $w = 200, b = 100$ 能完美拟合这两个数据点。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;关键理解&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;compute_cost()&lt;/code&gt; 只负责评价一组 $w, b$ 好不好&lt;/li&gt;&#10;&lt;li&gt;成本越小，模型对训练数据的拟合通常越好&lt;/li&gt;&#10;&lt;li&gt;两个点可以被一条直线完美穿过，因此成本可以为零；多个不共线的数据点无法全部完美命中，因此最低成本通常大于零&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="为什么先学线性模型"&gt;为什么先学线性模型&#10;&lt;/h2&gt;&lt;p&gt;现实中的数据关系不一定是直线，也可能是曲线、抛物线或更复杂的非线性关系。但线性模型具有以下优点：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;数学形式简单&lt;/li&gt;&#10;&lt;li&gt;容易理解和实现&lt;/li&gt;&#10;&lt;li&gt;便于观察模型参数的作用&lt;/li&gt;&#10;&lt;li&gt;是学习复杂机器学习模型的基础&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;因此，课程首先从线性函数入手，之后再扩展到非线性模型。&lt;/p&gt;&#10;</description></item></channel></rss>