目录

一、多元线性回归

1.1 什么是多元线性回归?

1.2 为什么需要多元线性回归?

1.3 多元线性回归的预测函数

1.4 如何使用多元线性回归函数

1.5 实际案例

1.6 多元线性回归在现实中的应用

二、Logistic回归(逻辑回归)

2.1什么是Logistic回归(又称逻辑回归)?

2.2为什么需要逻辑回归?

2.3 逻辑回归的预测函数

2.4 如何使用逻辑回归函数

2.5 实际案例

2.6逻辑回归在现实中的应用


一、多元线性回归

1.1 什么是多元线性回归?

    多元线性回归是机器学习中最基础、也是最经典的回归算法之一。当你有多个影响因素,想预测一个具体的连续数字(房价、气温、身高等)时,它就是在数据里找一张「最合适的超平面」,让预测值尽可能接近真实值。

    一句话,多元线性回归(Multiple Linear Regression)用来预测连续数值


1.2 为什么需要多元线性回归?

    我们都知道:一元线性回归是什么

公式就一条直线:\hat{y}=w_{0}+w_{1}x

    意思是:只看一个影响因素 xx,估一个连续的数字 \hat{y}。但是它能干什么?

    比如预测房价,你暂时只关心面积,别的因素先不管:\widehat{price}=w_{0}+w_{1}\times square

    面积 100㎡ → 预 200万;面积120㎡ → 预测 240万。
    面积越大,价越高——在「只看面积」的前提下,一元线性回归完全说得通。

    但是换到另一个场景:就不行了,在现实中买房,你不可能只看面积。两套都是 100㎡:

     A 房:3 个房间、房龄 5 年 → 卖 280 万

     B 房:2 个房间、房龄 20 年 → 卖 220 万

    面积一样,价格却差 60 万。 一元回归只有「面积」这一个输入,只能给一个预测(比如都估 230 万),没法解释「为什么同面积不同价」,也没法回答:「房间数、房龄差不多时,面积每多 1㎡,大概涨多少?」

    一句话: 一元回归 = 只允许 1 个原因,但现实往往是好几个原因一起起作用

所以有了多元线性回归把多个因素一起放进模型:

\hat{y}=w_{0}+w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}=w^{T}x+b

对应到房价:

\widehat{price}=w_{0}+w_{1}\times square+w_{2}\times rooms+w_{3}\times age

    多元线性回归补上的,就是「多个因素联合估一个连续数字」——还是预测「多少万」,但不再只能看一个面积了。


1.3 多元线性回归的预测函数

    预测函数(标准形式):

\hat{y}=w^{T}x_{i}+b=w_{0}+w_{1}x_{1}+w_{2}x_{2}+...+w_{p}x_{p}

其中x=(x^{_{1}},x^{_{2}},...,x^{_{p}})^{T},w=(w^{_{1}},w^{_{2}},...,w^{_{p}})^{T}

w_{0}b为截距

    矩阵形式(n个样本):

\hat{y}=Xw+b_{1},x\in R^{n\times p},y,\hat{y}\in R^{n}

    输出: 任意实数(连续值)

    训练目标: 最小化均方误差

L_{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\hat{y}_{i})^{2}

    一句话总结就是:多个特征的线性组合 → 拟合一个连续数字


1.4 如何使用多元线性回归函数

     我们有了预测函数——输入 square、rooms、age,输出\widehat{price}​。
     但这些数据从哪来?不能凭空捏造,要靠历史数据,并且先定义:什么叫「拟合得好」?

先想一个问题:怎样算「猜得准」?

    还是房价的例子。假设三套房的真实价和预测价如下:

真实price

预测\widehat{price}

误差

1

280 万

275 万

5 万

2

220 万

230 万

-10 万

3

350 万

340 万

10 万

    每一行都有一个残差(真实 − 预测):5、-10、10。我们的目标很朴素:让这些误差整体尽量小
    难点在于:误差有正有负,不能直接相加——否则猜高10万和猜低10万会互相抵消,看起来「没误差」。
    所以多元线性回归的经典做法是:先平方,再对所有样本加起来。下面把这个想法写成公式。

L_{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_{i}-\hat{y}_{i})^{2}

    y_{i}:第 i套房的真实 price

    \hat{y}_{i}​:模型预测的 price

    n:样本总数

    这个式子就是在说:每一套房都算一遍「预测偏差有多大」,平方后求平均——平均平方误差越小,整体拟合越好

    为什么要平方,而不是直接取绝对值?三点原因:

    1.正负误差不会互相抵消——猜高10万和猜低10万都算错,平方后都是100。

    2.大错罚得更重——差20万的惩罚是差10万的4倍,模型会更努力避免离谱预测。

    3.数学上好求导,方便后面用公式或梯度下降找到最优 w

    用一句话概括:让每一套房的「预测价 − 真实价」尽量接近 0,所有样本的平方误差之和越小越好。

    那么有了损失,训练在干什么?

    MSE只是「打分规则」,训练就是在这个规则下找最好的参数:

\hat{w},\hat{b}=\arg minL_{MSE}

    在所有可能的权重里,选那一组让 MSE 最小的——那就是模型从数据里「学」到的wb

最后退回一个特征,直觉更清楚

    如果暂时只看square一个因素,\widehat{price}=w_{0}+w_{1}\times square,上式就是在散点图上找一条直线,让各点到直线的竖直距离平方和最小——中学里也叫「最小二乘拟合」。
特征变成多个时,不过是把「一条线」推广成「一个超平面」,损失函数的形式不变,道理一样。

特征多的时候,还有一条公式路

    若设计矩阵X可逆,w甚至有解析解,不必迭代:

\hat{W}=(X^{T}X)^{-1}X^{T}y

    这叫正规方程。实际项目里特征一多、样本一大,更常用数值优化或直接调sklearn,不必手算逆矩阵——但知道「MSE 最小化有闭式解」有助于理解它在做什么。

同时这条损失不是随便选的

    若进一步假设:真实 price 与预测值之间的误差服从高斯(正态)分布,那么「最大化似然(MLE)」和「最小化 MSE」是一回事。也就是说,MSE 不只是一个好用的打分方式,背后还有概率依据。


1.5 实际案例

    前面四节把公式和损失都讲清了——这一节做一件事:用真实数据跑一遍,看模型学出来的w长什么样、预测靠不靠谱、图该怎么读。

    第一步:获取数据

    我现在有这么一组200个数据

样本ID

面积x_{1}

房间数x_{2}

房龄x_{3}

房价y

1

0.130741

-1.43014

-0.44004

-69.2609

2

1.502357

-0.26941

0.717542

155.2535

3

0.647689

0.496714

-0.13826

68.82556

4

0.341756

-0.75913

0.150394

15.69516

...

...

...

...

...

196

-1.32819

0.208864

-1.95967

-235.426

197

1.366874

-2.30192

-1.51519

-64.496

198

-0.42065

-0.23459

-1.41537

-172.703

199

-0.83095

-0.86399

0.048522

-74.34

200

0.963376

1.158596

-0.82068

26.49008

    数值是标准化后的模拟数据,不是真实「多少㎡、多少万」,但结构和1.2的房价故事一致——三个特征 → 一个连续 price

    第二步:划分数据,让模型「学」

    和实际项目一样,把 200 条分成:

    训练集(75%):用来最小化MSE,学wb

    测试集(25%):训练时不给模型看,专门用来检验「对新样本泛化好不好」

    第三步:分析跑出来的结果

    学习到的系数 w:      [72.181 22.34  72.171]
    截距 b:                     -0.531
    测试集 MSE:            285.46
    测试集 R2:               0.9709

    w的符号和大小:在训练集上学到的「每个因素对 price 的方向和力度」——具体业务里还要结合特征是否标准化来解读。

    MSE = 285.46:测试集上平均平方误差,越小越好;要和 price 的量级一起看。

    R2 ≈ 0.97:模型能解释测试集上约 97% 的价格波动——说明拟合相当不错(模拟数据噪声较小,所以 R2 偏高是正常的)。

    第四步:代入一条新样本,手算直觉

    拿第 2 条样本:square = 1.50,rooms = -0.27,age = 0.72,真实 price = 155.3
用学到的权重代入公式:

\widehat{price}=-0.53+72.18\times 1.50+22.34\times (-0.27)+72.17\times 0.72\approx 153.7

和真实 155.3 很接近——这就是「训练完以后,对新输入做预测」的完整流程。

   第五步:看图——两张图各回答一个问题

    左图回答了预测整体有没有跟着真实走?右图回答了有没有「系统性偏高/偏低」?

    一个一个分析:

    左图蓝色圆点是测试集真实 price,橙色叉号是预测 price。叉号与圆点几乎重合,且都沿同一上升趋势分布——说明模型抓住了「面积越大、价越高」的主规律。

    右图红色虚线是 残差 = 0;蓝点 = 真实 − 预测。点随机散落在 0 上下,没有「预测越大残差越大」的漏斗形,也没有明显的 U 形弯带——说明线性假设基本合理,没有漏掉「该用曲线却用了直线」的大问题。个别点偏离稍远(最大约 ±40)属于正常噪声,不是模型系统性失败。


1.6 多元线性回归在现实中的应用

    我们在模拟房价数据上走完了全流程。回到现实,多元线性回归的用法不变——多个因素一起,估一个连续数字;变的只是行业和特征名。

以下有三个经典场景分类适用于多元线性回归

场景一:房价定价

    输入:square、rooms、age、location 等

    输出:price(多少万)

    问法:「这套房大概值多少?」

和1.2的故事一一对应——也是本文贯穿的例子。

场景二:销量预测

    输入:广告投入、促销力度、季节指数

    输出:sales(件数或金额)

    问法:「下周大概能卖多少?」

逻辑一样:不是单看「广告花多少」,而是多因素联合估一个数。

场景三:用电负荷

    输入:温度、湿度、是否节假日

    输出:load(kWh)

    问法:「明天电网负荷大概多少?」

调度部门要的是可量化的连续预测,方便做储备和排班。

    三个场景的共同点

共同点

说明

标签是连续值

可以比大小、算差值

问的是「是多少

不是「是不是」「哪一种」

需要多因素

单一因素往往不够,要用多元模型

    如果你遇到的任务符合上表,多元线性回归通常是第一个该试的基线模型。
    若标签变成 0/1(是否、有没有),就要换工具——那就是第二篇逻辑回归要解决的问题。


二、Logistic回归(逻辑回归)

2.1 什么是Logistic回归(又称逻辑回归)?

    逻辑回归是机器学习中最基础、也最经典的分类算法之一。当你有多个影响因素,想判断一个二选一的结果(邮件是否 spam、是否患病、贷款是否通过)并想知道有多大把握时,它先对特征做线性组合,再通过 Sigmoid 把得分映射成 0~1 之间的概率,从而给出「是 / 否」的结论。名字里虽带「回归」,但它做的是分类 + 概率估计

    一句话就是,逻辑回归(Logistic Regression)用来二分类——问的是「是不是?」


2.2 为什么需要逻辑回归?

    我们上面才学习完:多元线性回归是什么

\hat{y}=w^{T}x_{i}+b

    意思是:把多个影响因素一起算,输出是一个具体的数字——可以是 26.3,可以是 328.5,可大可小。

    但是它能干什么?

    比如预测明天气温:

\widehat{temperature}=w_{0}+w_{1}\times humidity+w_{2}\times latitude+w_{3}\times altitude

    模型输出 26.3°C——你要的就是「明天多少度」,多元回归正合适

    预测房价、销量、身高……凡是问「是多少」,多元线性回归都是好工具。

    但是换到另一个场景:就不行了

    现在任务变了:不是问「多少」,而是问「是不是」。

    比如判断邮件是不是垃圾邮件——只有两种答案:spam(1)或正常(0)。
如果还硬用多元回归:

\widehat{score}=w^{T}x+b

算出来可能是:

    邮件 A:\hat{y}=1.44

    邮件 B:\hat{y}=-0.32

    你没法跟老板说「这封邮件spam概率 144%」,也没法说「负 32% 是垃圾邮件」。
    硬用 0.5 当阈值虽然能勉强分对错,但输出不是合法概率——银行要的「违约概率 23%」也给不出来。

    所以多元回归擅长「估一个连续数字」;分类问的是「属于哪一类、有多大把握」——问法换了,工具就不匹配


2.3 逻辑回归的预测函数

预测函数(标准形式):

z=w^{T}x+b

\hat{p}=P(y=1\mid x)=\sigma (z)=\frac{1}{1+e^{-z}}

\hat{y}=\left\{\begin{matrix} 1 ,&\hat{p}\geq 0.5 \\ 0,& \hat{p}< 0.5 \end{matrix}\right.

其中\sigma ()为Sigmoid函数

输出: (0,1)(0,1) 概率

训练目标: 最小化二分类交叉熵

L_{CE}=-\frac{1}{n}\sum_{i=1}^{n}[y_{i}log\hat{p_{i}}+(1-y_{i})log(1-\hat{p}_{i})]

一句话总结就是, 线性组合 + Sigmoid → 判断两类、给出概率


2.4 如何使用逻辑回归函数

    上一节我们有了预测函数——输入特征,输出\hat{p}(属于正类的概率)。
    但 wb 从哪来?和多元回归一样,要靠历史数据;而要用数据,得先定义:什么叫「分得好」?

    先想一个问题:分类里怎样算「猜得准」?

    回归可以直接比「差多少万」;分类不行——标签只有 0 或 1。
    还是用邮件的例子。假设 4 封邮件,真实标签和模型预测如下:

真实y(0=正常,1=spam) 预测\hat{p} 感觉
1 1(spam) 0.92 很准
2 0(正常) 0.08 很准
3 1(spam) 0.35 偏保守,错了
4 0(正常) 0.78 偏激进,错了

    规律很清楚:真实是 1 时,希望\hat{p}​ 靠近 1;真实是 0 时,希望\hat{p} 靠近 0。
    而且错得越离谱,应该罚得越重——把正常邮件判成 99% spam,显然比判成 51% 更糟。
    接下来要找一个损失函数,把上面这套「直觉」变成可以优化的数字。

二分类交叉熵:把直觉写成公式

L_{CE}=-\frac{1}{n}\sum_{i=1}^{n}[y_{i}log\hat{p_{i}}+(1-y_{i})log(1-\hat{p}_{i})]

    y_{i}∈{0,1}:第 ii 个样本的真实标签

    \hat{p}_{i}​:模型预测「属于正类(1)」的概率

    n:样本总数

    对照前面的表格看:

    当 y_{i}=1(真是 spam):式子里只剩-log\hat{p}_{i}\hat{p}越接近 1,损失越小;若\hat{p}接近 0(像第 3 封那样给了 0.35),-log\hat{p}_{i}明显变大——就是在惩罚「该说是,却不敢说是」。

    当y_{i}=0真是正常):式子里只剩-log(1-\hat{p}_{i})\hat{p}越接近 0 越好;若\hat{p}接近 1(像第 4 封那样给了 0.78),损失同样会很大。

    一句话:让模型对「该是的样本」果断说是(\hat{p}\rightarrow 1),对「该不是的样本」果断说否(\hat{p}\rightarrow 0)。 交叉熵就是在度量「预测概率离这个理想状态有多远」。

为什么不用「数错了几个」,也不用 MSE?

    你可能会问:直接数错了几封邮件(0/1 损失)不行吗?或者用多元回归那套 MSE,把 0/1 标签当连续数去拟合?

方式 问题
只数错了几个(0/1 损失) 猜错 51% 和猜错 99% 惩罚一样,模型不知道往哪改,梯度几乎学不动
硬用 MSE 拟合 0/1 输出可以跑出 0~1 之外,且对「概率是否校准」不敏感
交叉熵 错得越离谱罚越重,处处可导,天然适配 0~1 概率输出

    所以逻辑回归选交叉熵,不是随便挑的——它正好接在上节的 Sigmoid 后面,形成「概率输出 + 概率损失」一整套。

有了损失,训练在干什么?

    和多元回归一样,有了打分规则,训练就是找让分数最低(这里是最小化损失)的参数:

\hat{w},\hat{b}=\arg minL_{CE}

    在所有可能的权重里,选那一组让交叉熵最小的——模型就「学会」了怎么给合法、可信的概率。

这条损失同样有据可查

    若假设标签 y服从伯努利分布 y∼Bernoulli(\hat{p})y∼Bernoulli(\hat{p}),那么「最大化似然(MLE)」和「最小化交叉熵」是一回事
    和第一篇 MSE 对应高斯假设一样,这里的交叉熵也不是拍脑袋——它来自「标签是 0/1 随机事件」这一概率模型。


2.5 实际案例

    前面四节把公式和损失都讲清了——这一节做一件事:用真实数据跑一遍,看模型学出来的w长什么样、预测靠不靠谱、图该怎么读。

    第一步:获取数据

    我现在有这么一组300个数据

样本ID 指标1x_{1} 指标2x_{2} 是否正类y
1 0.733246 -1.43101 0
2 0.656043 0.842841 1
3 0.537983 -2.05655 0
4 1.289308 -0.07902 1
... ... ... ...
299 0.122447 0.74248 1
300 1.715959 1.168337 1

    和多元回归不同:这里的y只有 0 或 1,没有「中间值」——正好对应2.2说的「是不是」类问题。

    第二步:训练——最小化交叉熵

    流程和多元线性回归类似:75% 训练、25% 测试

    第三步:看概率——不止「对/错」

    权重 w: [0.736 3.12 ]

    截距 b: -0.467

    测试集准确率: 0.9333

    分类报告:
                       precision    recall  f1-score   support

           类 0       0.97          0.89      0.93          38
           类 1       0.90          0.97      0.94          37

       accuracy                                 0.93           75
      macro avg  0.94          0.93      0.93           75
    weighted avg  0.94        0.93      0.93           75

   测试集 75 条里错 5 条(75 − 70 = 5,准确率 93.3%)。更细地看分类报告:

精确率 召回率 解读
0(负类) 0.97 0.89 判为 0 的很准;但有 4 个真 0 被漏判成 1
1(正类) 0.90 0.97 真 1 大多抓住了,漏检少

    结论:93% 准确率 + 两类 F1 都在 0.93 左右,说明模型有效分开了两类

    逻辑回归的价值在于\hat{p}。拿第 2 条样本(真实 y=1):

    特征:x_{1}= 0.66,x_{2}= 0.84

    模型给出:P(y=1)≈0.93

    按2.3规则:\hat{p}\geq 0.5 → 判为 1,和真实标签一致

    若这是信贷场景,就可以跟业务说「违约概率约 93%」——这就是2.2强调的逻辑回归相比硬用多元回归多出来的能力。

    第四步:看图——决策边界在说什么?

    绝大多数点落在「与自己颜色一致」的背景区;仅约 5 个点跨到了对面——和 93.3% 准确率一致。这些错分点多半靠近分界线,属于「概率在 0.5 附近、模型本身就不太确定」的样本,可接受。

    那么为什么要用Sigmoid函数?如下图:

        第五步:数值对照

    硬用线性回归为什么「数看起来还行、用起来却不行」

    同一数据集上若硬用多元线性回归则会出现

线性回归输出范围: [-0.532, 1.443]   ← 出现负值和 >1,不是合法概率
强行 0.5 阈值准确率: 0.9233
逻辑回归概率范围:   [0.000, 1.000]  ← 合法
逻辑回归准确率:     0.9300

    准确率差不多(92% vs 93%),但线性回归的 1.443、-0.532 无法当概率向业务解释——这就是2.2说的「工具不匹配」。分类任务应看逻辑回归,不能只看准确率数字接近就偷用回归。


2.6 逻辑回归在现实中的应用

    我们在二维特征上看到了「分界线 + 概率」。现实中特征可以很多,但问法不变:是不是、会不会、要不要——且往往既要判类,也要概率

以下有三个经典场景分类适用于逻辑回归

场景一:信贷风控

输入:收入、负债比、逾期记录

输出:是否违约(0/1)+ 违约概率

问法:「这笔贷款会不会违约?概率多大?」

风控不只要「拒/批」,还要算预期损失——\hat{p}直接进业务公式,所以必须用逻辑回归这类输出合法概率的模型。

场景二:垃圾邮件过滤

输入:词频、链接数、发件人信誉等

输出:是否 spam

问法:「这封邮件是不是垃圾?」

可以设\hat{p}≥0.9才进垃圾箱,减少误杀——阈值灵活,依赖的正是概率输出。

场景三:疾病筛查

输入:血压、血糖、BMI

输出:是否高风险

问法:「要不要进一步检查?」

医学场景常更怕漏诊(假阴性),会故意降低阈值——同样基于\hat{p}调,而不是只能「对/错」一个点。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐