人工智能(AI)全体系学习——系列一
人工智能(AI)全体系学习——系列一
文章目录
本专栏从机器学习基础出发,逐步深入到深度学习、Transformer、大模型、生成式AI、强化学习及AI Agent等前沿方向,构建完整的人工智能算法体系,并结合工程实践与实际应用,帮助读者形成系统化认知。
==大家不用急于求成,每天看看总是有用的,zhuyaohaishiyao
系列一:机器学习基础与经典算法(入门 + 工程基础)
核心目标:打基础(算法思维 + 数学支撑)
第1章 AI与机器学习总览
1.1 AI / ML / DL 的核心算法与公式解析
三者核心区别(算法角度)
| 层级 | 算法特点 | 本质 |
|---|---|---|
| AI | 问题集合 | 找映射 |
| ML | 优化参数 | 学规律 |
| DL | 多层网络 | 学复杂函数 |
一、人工智能的基本表达:函数映射
在人工智能中,绝大多数问题都可以抽象为一个从输入到输出的映射过程,即:
y = f ( x ) y = f(x) y=f(x)
其中,x表示输入数据(如图像、文本或用户行为数据),f表示模型或算法,y 表示输出结果(如分类标签、预测值或决策结果)。
该表达本质上说明:人工智能的核心在于构建一个函数,使机器能够根据输入自动生成合理的输出。
👉 AI本质不是一个算法,而是“一类问题的集合”:
它解决的问题可以抽象为:
输入 → 建模 → 输出决策
例如,在健康管理系统中,可以将用户的体重、身高、运动记录作为输入,通过模型计算输出健康评估或饮食建议,这正是函数映射思想的具体体现。
👉 AI干的事情就是:
找一个“函数”,把输入变成正确输出
比如:
- 输入图片 → 输出“猫”
- 输入体重数据 → 输出“健康建议”
二、机器学习的核心目标:最小化误差
机器学习的核心任务是通过数据训练模型,使预测结果尽可能接近真实值,其数学形式通常表示为:
min θ L ( y , y ^ ) \min_{\theta} L(y, \hat{y}) θminL(y,y^)
其中,θ表示模型参数,y为真实值,y^ 为模型预测值,L 为损失函数。
这一公式表达了机器学习最本质的目标:通过不断调整参数,使预测误差最小化。
为了更直观地理解这一过程,可以用一个简单的线性模型来演示:
import numpy as np
# 输入与真实值
x = np.array([1, 2, 3], dtype=float)
y = np.array([2, 4, 6], dtype=float)
# 初始化参数
w = 0.0
lr = 0.1
# 训练过程
for epoch in range(50):
y_pred = w * x # 模型预测
loss = ((y - y_pred) ** 2).mean() # 损失函数
grad = (-2 * x * (y - y_pred)).mean() # 梯度
w -= lr * grad # 参数更新
print("训练后的参数 w =", w)
在这段代码中,模型通过不断计算误差并调整参数,使预测结果逐渐逼近真实值,这正是“最小化损失函数”的具体实现过程。
👉 机器学习在干嘛?
不断调整参数,让预测越来越准
就像你在调一条直线,尽量贴近所有点。
eg. 房价预测:
- 输入:面积
- 输出:价格
三、线性回归模型:最基础的学习形式
在线性回归中,假设输入与输出之间满足线性关系:
y = w x + b y = wx + b y=wx+b
其中,w 表示权重,b 表示偏置。该模型的目标是找到一组参数,使直线尽可能贴近数据点。
例如,在房价预测中,可以将房屋面积作为输入,通过学习得到的参数计算房价。这相当于在所有可能的直线中找到一条最能反映数据规律的直线。
四、损失函数:如何衡量预测误差
为了评估模型预测效果,常使用均方误差(MSE):
L = 1 n ∑ ( y − y ^ ) 2 L = \frac{1}{n} \sum (y - \hat{y})^2 L=n1∑(y−y^)2
其中,y为真实值,y^ 为预测值。
该函数通过计算误差平方的平均值来衡量模型性能。
平方操作使得较大的误差被放大,从而促使模型优先修正偏差较大的样本,这也是该损失函数被广泛使用的重要原因。
五、梯度下降:模型如何学习参数
为了最小化损失函数,需要不断更新模型参数,其更新规则为:
w = w − η ∂ L ∂ w w = w - \eta \frac{\partial L}{\partial w} w=w−η∂w∂L
其中,η为学习率,表示每次更新的步长,∂w/∂L 为梯度。
该公式说明:模型通过沿着损失函数下降最快的方向更新参数,从而逐步减小误差。
这一过程在代码中的体现如下:
# 梯度下降核心更新
grad = (-2 * x * (y - y_pred)).mean()
w -= lr * grad
这里的 grad 对应公式中的梯度项,而 w -= lr * grad 正是参数更新过程。随着迭代进行,模型会逐渐逼近最优解。
六、深度学习:多层函数的表达能力
深度学习通过多层函数组合来表示复杂关系:
y = f 3 ( f 2 ( f 1 ( x ) ) ) y = f_3(f_2(f_1(x))) y=f3(f2(f1(x)))
每一层函数都对数据进行一次特征提取或变换,使模型能够逐层抽象数据特征。
这种结构使模型不仅能够处理简单关系,还可以建模复杂的非线性问题。
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(1, 10),
nn.ReLU(),
nn.Linear(10, 1)
)
x = torch.tensor([[1.0]])
y = model(x)
print(y)
👉 深度学习在干嘛?
把简单模型叠很多层,变成超级复杂模型
就像:
-
一层:识别边
-
多层:识别人脸
eg. ChatGPT:
- 输入:一句话
- 输出:回答
👉 本质:
超大规模神经网络(Transformer)
七、神经网络的基本计算过程
神经网络的计算通常包括两步:
z = W x + b z = Wx + b z=Wx+b
a = σ ( z ) a = \sigma(z) a=σ(z)
第一步为线性变换,第二步通过激活函数引入非线性,从而提升模型表达能力。
下面给出一个简单的神经网络实现示例:
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Linear(1, 8),
nn.ReLU(),
nn.Linear(8, 1)
)
x = torch.tensor([[1.0], [2.0], [3.0]])
y = model(x)
print(y)
该模型通过线性层与激活函数的组合,实现了从输入到输出的非线性映射过程。
八、反向传播:误差如何影响参数
在训练过程中,模型需要根据误差调整参数,其核心依赖链式法则:
∂ L ∂ w = ∂ L ∂ a ⋅ ∂ a ∂ z ⋅ ∂ z ∂ w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} ∂w∂L=∂a∂L⋅∂z∂a⋅∂w∂z
公式说明:误差会从输出层逐层向前传播,并计算每个参数对最终误差的影响,从而指导参数更新。
在深度学习框架中,这一过程通常通过自动求导完成,例如:
optimizer.zero_grad()
loss.backward() # 自动计算梯度
optimizer.step() # 更新参数
这三行代码即完成了反向传播和参数更新的全过程。
🧩 总结
从函数映射到损失最小化,从线性模型到深度神经网络,人工智能算法的核心始终围绕“如何从数据中学习映射关系”展开。机器学习通过优化损失函数实现参数学习,而深度学习通过多层结构增强模型表达能力。在这一过程中,梯度下降与反向传播构成了模型训练的基础,使算法能够不断逼近真实规律并应用于实际场景。
1.2 AI发展脉络
-
人工智能发展阶段对比(核心表格)
阶段 核心思想 方法特点 数据依赖 代表技术 符号主义 规则驱动 人工编写逻辑规则 低 专家系统 机器学习 数据驱动 从数据中学习规律 中 回归、SVM、决策树 深度学习 模型驱动 多层神经网络自动提取特征 高 CNN、RNN 大模型时代 规模驱动 超大模型 + 预训练 极高 Transformer、GPT 1.3 AI在各行业的应用(医疗 / 教育 / 推荐系统)
行业领域 典型应用 核心技术/算法 解决的问题 实际案例 医疗健康 疾病诊断、医学影像分析、健康管理 CNN、深度学习、计算机视觉 提高诊断准确率、减少误诊 AI识别CT影像肿瘤、智能体检分析 教育领域 个性化学习、智能推荐、自动批改 机器学习、推荐算法、NLP 提升学习效率、因材施教 智能作业推荐、作文自动评分 电商/推荐系统 商品推荐、广告推荐 协同过滤、深度推荐模型(DeepFM) 提高用户转化率、精准营销 淘宝“猜你喜欢”、抖音推荐 金融领域 风险控制、反欺诈、信用评估 逻辑回归、XGBoost、图算法 降低风险、识别异常行为 信用评分系统、反诈骗检测 交通出行 自动驾驶、路径规划、交通预测 深度学习、强化学习 提高交通效率、减少事故 自动驾驶汽车、导航系统 安防领域 人脸识别、行为识别 CNN、计算机视觉 提升安全监控能力 人脸门禁系统、智能监控 语音与语言 语音识别、机器翻译、智能客服 Transformer、RNN、NLP 提高人机交互能力 Siri、ChatGPT、翻译系统 内容生成 文本生成、图像生成、视频生成 GPT、Diffusion、GAN 自动生成内容、降低创作成本 ChatGPT写作、AI绘画
第2章 数学基础(算法核心支撑)
人工智能算法的本质建立在数学基础之上,其中线性代数、概率论与优化方法构成了机器学习与深度学习的三大核心支撑。前者用于表示数据结构,中者用于描述不确定性,而后者则用于模型训练与参数优化。
2.1 线性代数(向量 / 矩阵 / SVD)
在线性代数中,数据通常以向量和矩阵的形式表示。向量可以看作是一组有序数值,而矩阵则是多个向量的集合。在机器学习中,一个样本往往表示为一个向量,而多个样本构成数据矩阵。
例如,一个简单的线性模型可以表示为:
y = W x + b y = Wx + b y=Wx+b
其中,x 为输入向量,W 为权重矩阵,b 为偏置。该表达说明模型通过矩阵运算实现对数据的线性变换,本质上是对多个特征进行加权组合。
为了更直观地理解矩阵运算,可以用如下代码表示:
import numpy as np
x = np.array([1, 2])
W = np.array([[2, 0],
[0, 3]])
y = W @ x
print(y)
矩阵乘法在神经网络中大量存在,其作用可以理解为:将输入特征映射到新的特征空间。
在更高阶的应用中,奇异值分解(SVD)用于将矩阵分解为三个矩阵的乘积:
A = U Σ V T A = U \Sigma V^T A=UΣVT
该分解能够提取数据的主要结构信息,在降维、推荐系统与图像压缩中具有重要作用。例如,在推荐系统中,SVD可以帮助发现用户与物品之间的潜在关系。
👉 就是用向量和矩阵把数据表示出来,并对数据做计算和变换。
2.2 概率论(条件概率 / 贝叶斯)
概率论用于描述不确定性,是机器学习建模的重要基础。
在实际问题中,我们往往需要根据已有信息推断未知事件的概率,这可以通过条件概率表示:
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A|B) = \frac{P(A \cap B)}{P(B)} P(A∣B)=P(B)P(A∩B)
该公式表示在事件 B 已发生的条件下,事件 A发生的概率。
进一步地,贝叶斯公式提供了一种“反向推断”的方法:
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)
其中:
- P(A):先验概率
- P(B∣A):似然
- P(A∣B):后验概率
这一公式的核心在于:利用已知结果反推原因的概率。
例如,在垃圾邮件识别中:
- A:邮件是垃圾邮件
- B:邮件包含某些关键词
模型可以通过计算 P(A∣B) 来判断邮件是否为垃圾邮件。
👉 就是在不确定的情况下,判断一件事情发生的可能性。
2.3 优化方法(梯度下降家族)
在机器学习中,模型的训练过程本质上是一个优化问题,即通过调整参数,使损失函数最小:
min θ L ( y , y ^ ) \min_{\theta} L(y, \hat{y}) θminL(y,y^)
梯度下降是最基本的优化方法,其更新规则为:
θ = θ − η ∇ L ( θ ) \theta = \theta - \eta \nabla L(\theta) θ=θ−η∇L(θ)
其中,∇L(θ)表示梯度,η为学习率。梯度指出了函数增长最快的方向,因此沿其反方向更新参数可以使损失下降。
这一过程可以通过代码简单实现:
import numpy as np
x = np.array([1, 2, 3], dtype=float)
y = np.array([2, 4, 6], dtype=float)
w = 0.0
lr = 0.1
for i in range(100):
y_pred = w * x
loss = ((y - y_pred) ** 2).mean()
grad = (-2 * x * (y - y_pred)).mean()
w -= lr * grad
print(w)
在实际应用中,梯度下降存在多种改进形式:
| 方法 | 特点 |
|---|---|
| SGD | 每次使用一个样本更新,速度快 |
| Momentum | 引入惯性,加速收敛 |
| Adam | 自适应学习率,效果稳定 |
这些方法的本质仍然是利用梯度信息不断调整参数,只是在更新策略上进行了优化。
👉 就是不断调整模型参数,让错误越来越小。
🧩 总结
线性代数为数据表示与变换提供了基础,概率论用于描述不确定性与推断关系,而优化方法则负责模型参数的学习过程。这三部分共同构成了人工智能算法的数学基础,使得模型能够从数据中学习规律并进行有效预测。
👉线性代数负责处理数据,概率论负责处理不确定性,优化方法负责让模型变得更好
第3章 监督学习算法
3.1 线性回归(Regression)
线性回归是监督学习中最基础、也是最容易理解的一种算法,它解决的问题是:根据已有数据,去预测一个连续的数值结果。例如根据房屋面积预测房价,根据学习时间预测成绩,或者在健康管理系统中,根据运动量与饮食情况预测体重变化趋势。
它的核心假设非常直接:输入和输出之间存在一种近似的线性关系,可以用一条直线来表示,即
y = w x + b y = wx + b y=wx+b
其中 x 是输入,y是预测结果,w 表示输入对结果的影响程度,b 表示基础值。这个公式本质上是在说:我们用一个简单的函数,去尽量贴近真实数据的变化规律。
但真正的问题在于,这条“直线”并不是提前知道的,而是需要通过数据“学出来”。也就是说,我们要找到一组最合适的 w 和 b,让模型的预测结果尽可能接近真实值。
为了衡量“接近程度”,通常使用均方误差作为标准:
L = 1 n ∑ ( y − y ^ ) 2 L = \frac{1}{n} \sum (y - \hat{y})^2 L=n1∑(y−y^)2
这个公式的含义可以理解为:把每一次预测的误差平方后取平均,误差越大,损失就越大。因此模型的目标就是不断调整参数,让这个损失值尽可能变小。
实际训练过程中,并不是一次就能找到最优参数,而是通过一个不断试错的过程逐步逼近最优解。最常用的方法是梯度下降:
w = w − η ∂ L ∂ w w = w - \eta \frac{\partial L}{\partial w} w=w−η∂w∂L
其中梯度表示当前参数变化对误差的影响方向,而学习率控制每一步调整的幅度。可以把这个过程理解为在一片起伏的地形中寻找最低点:每一步根据坡度往下降的方向移动,逐渐接近最优位置。
把这一过程用代码表达出来,会更加直观:
import numpy as np
x = np.array([1, 2, 3, 4], dtype=float)
y = np.array([2, 4, 6, 8], dtype=float)
w = 0.0
b = 0.0
lr = 0.1
for epoch in range(100):
y_pred = w * x + b
loss = ((y - y_pred) ** 2).mean()
dw = (-2 * (x * (y - y_pred))).mean()
db = (-2 * (y - y_pred)).mean()
w -= lr * dw
b -= lr * db
print("w =", w, "b =", b)
在这段代码中,y_pred 对应模型预测,loss 对应误差,dw 和 db 表示梯度,而参数更新过程正是梯度下降公式的实现。随着循环进行,模型的预测会逐渐逼近真实数据。
在线性回归的实际应用中,它不仅可以用于简单预测,还可以帮助我们理解变量之间的关系。例如在健康管理系统中,可以通过模型判断“运动量对体重变化的影响程度”,这在实际决策中具有很强的解释性。
当然,线性回归也存在明显局限,它只能处理线性关系,对于图像、语言等复杂问题表达能力不足。但正因为其简单、直观且可解释,它仍然是机器学习中最重要的基础模型之一,也是理解更复杂算法的起点。
👉线性回归就是用一条直线去逼近数据关系,通过不断减小误差,让预测越来越准。
3.2 逻辑回归(Classification)
逻辑回归是监督学习中最经典的分类算法之一,它解决的问题与线性回归不同:不是预测一个具体数值,而是判断一个样本属于哪一类。例如判断一封邮件是否是垃圾邮件、一个用户是否会购买商品,或者在健康管理系统中判断“当前状态是否健康”。
如果直接使用线性回归来做分类,会出现一个问题:模型的输出可以是任意数值(比如 -10 或 100),但分类问题需要的是“概率”或者“是/否”的结果。因此,逻辑回归在原有线性模型的基础上,引入了一个关键函数——Sigmoid函数:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1
其中 z=wx+bz 。这个函数的作用是把原本任意范围的数值压缩到 0 到 1 之间,从而可以表示“属于某一类的概率”。
也就是说,逻辑回归的整体形式可以理解为:
y = σ ( w x + b ) y = \sigma(wx + b) y=σ(wx+b)
当输出接近 1 时,可以认为样本属于某一类;接近 0 时,则属于另一类。通常我们会设定一个阈值(比如 0.5),大于该值判为正类,小于则判为负类。
接下来要解决的问题是:如何让模型的预测概率尽可能接近真实标签?
在线性回归中使用的是均方误差,但在分类问题中,更合适的方式是使用对数损失(Log Loss):
L = − [ y log ( y ^ ) + ( 1 − y ) log ( 1 − y ^ ) ] L = -[y \log(\hat{y}) + (1 - y)\log(1 - \hat{y})] L=−[ylog(y^)+(1−y)log(1−y^)]
这个损失函数的特点是:当预测概率与真实结果偏差很大时,惩罚会非常严重,从而推动模型更快地修正错误。
模型的训练过程与线性回归类似,依然是通过梯度下降不断更新参数,使损失函数最小。换句话说,逻辑回归本质上仍然是在做一件事:不断调整参数,让预测概率更接近真实标签。
用代码来看这一过程会更加直观:
import numpy as np
# Sigmoid函数
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 数据(简单二分类)
x = np.array([1, 2, 3, 4], dtype=float)
y = np.array([0, 0, 1, 1], dtype=float)
w = 0.0
b = 0.0
lr = 0.1
for epoch in range(200):
z = w * x + b
y_pred = sigmoid(z)
# 损失(log loss)
loss = -(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred)).mean()
# 梯度
dw = ((y_pred - y) * x).mean()
db = (y_pred - y).mean()
# 更新参数
w -= lr * dw
b -= lr * db
print("w =", w, "b =", b)
在这段代码中,sigmoid 对应公式中的非线性变换,loss 表示分类误差,而参数更新过程依然是通过梯度下降完成。随着训练进行,模型会逐渐学会如何将输入映射为正确的类别概率。
在实际应用中,逻辑回归被广泛用于各种二分类任务,例如用户是否流失、贷款是否违约、疾病是否存在等。
与线性回归相比,逻辑回归虽然形式简单,但在分类问题中表现稳定、可解释性强,是很多复杂模型的基础。即使在深度学习广泛应用的今天,它仍然在工业界中占有重要地位。
👉逻辑回归就是先用线性模型算出一个结果,再把它变成概率,用来判断属于哪一类。
3.3 支持向量机(SVM)
支持向量机(SVM)是一种用于分类的经典算法,它解决的问题和逻辑回归类似:把数据分成不同的类别。但它的思路和前面的方法不一样,它不只是“分开”,而是要分得尽可能好、尽可能安全。
假设我们有两类数据(比如正常邮件和垃圾邮件),在二维平面上可以画出很多条线把它们分开。但问题是:
👉 哪一条线是最好的?
SVM给出的答案是:
选择那条“离两边数据都最远”的分界线
也就是说,它不仅要把数据分开,还要让这条线到最近的数据点距离最大,这个距离就叫做“间隔(margin)”。
从数学上,这条分界线可以表示为:
w ⋅ x + b = 0 w \cdot x + b = 0 w⋅x+b=0
这里的 w决定方向,b决定位置。这条线把空间分成两部分:
- 一边:w⋅x+b>0
- 另一边:w⋅x+b<0
但SVM的关键不在于这条线本身,而在于:
👉 最大化间隔
max 2 ∣ ∣ w ∣ ∣ \max \frac{2}{||w||} max∣∣w∣∣2
可以理解为:让分类边界尽可能远离两类数据,从而提升模型的稳定性和泛化能力。
在实际数据中,往往并不能完全线性分开,比如数据是弯曲分布的。这时候SVM引入了一个非常重要的思想:
👉 核函数(Kernel Trick)
它的作用是:
把数据从低维空间“映射”到高维空间,在高维空间中变得可分
你可以简单理解为:
👉 原来分不开 → 换个角度就能分开了
用代码来看一个简单的SVM分类示例:
from sklearn import svm
import numpy as np
# 简单数据
X = np.array([[1, 2], [2, 3], [3, 3], [6, 5], [7, 7]])
y = [0, 0, 0, 1, 1]
# 建立模型
model = svm.SVC(kernel='linear')
# 训练
model.fit(X, y)
# 预测
print(model.predict([[4, 4]]))
在这段代码中,SVM会自动找到一条最优分界线,并根据新数据的位置判断属于哪一类。
在实际应用中,SVM常用于:
- 文本分类(垃圾邮件识别)
- 图像分类(简单场景)
- 生物信息分类
相比逻辑回归,SVM更强调“边界质量”,在小数据场景下表现往往更稳定。但它也有局限,例如在大规模数据上训练较慢,对参数和核函数选择较敏感。
👉SVM的核心就是找到一条“最安全的分界线”,让两类数据分得最开、最稳定。
3.4 决策树
决策树是一种非常直观的监督学习算法,它的核心思想可以理解为:
👉 像做选择题一样,一步一步问问题,最后得到答案。
假设我们要判断一个人是否“健康”,可以这样一步一步判断:
是否经常运动?
↓
饮食是否规律?
↓
是否健康
这个过程其实就是一棵“树”:
每一次提问是一个“节点”,每一个答案是一条“分支”,最终的结论是“叶子节点”。
从算法角度来看,决策树的核心在于:
👉 每一步都选择一个“最好的问题”,把数据分得更清楚
那什么叫“分得更清楚”?
意思是:让每一组数据内部尽量“纯”,比如:
- 一组几乎都是“健康”
- 另一组几乎都是“不健康”
为了衡量这种“纯不纯”,决策树会用一些指标,比如:
- 信息增益(Information Gain)
- 基尼指数(Gini Index)
例如基尼指数可以表示为:
G i n i = 1 − ∑ p i 2 Gini = 1 - \sum p_i^2 Gini=1−∑pi2
这里 pi 表示某一类别的比例。
如果一组数据全是同一类,那么 Gini = 0,说明非常“纯”。
👉 所以整个决策树在做的事情就是:
不断选问题 → 不断划分数据 → 直到每一类足够纯
我们用代码来看一个简单的决策树例子:
from sklearn.tree import DecisionTreeClassifier
# 数据:是否运动、饮食是否健康
X = [[1, 1], [1, 0], [0, 1], [0, 0]]
y = [1, 0, 0, 0] # 是否健康
model = DecisionTreeClassifier()
model.fit(X, y)
print(model.predict([[1, 1]]))
这段代码中,模型会自动学习“先问什么问题,再问什么问题”,最终形成一棵树。
在实际应用中,决策树非常常见,例如:
- 银行判断是否放贷
- 用户是否会流失
- 医疗初步诊断
- 健康状态评估
决策树的优点在于:
- 非常直观,像人类决策过程
- 不需要复杂数学
- 可解释性强(可以画出来)
但它也有明显问题:
- 容易“过拟合”(记住数据而不是学规律)
- 单棵树不够稳定
👉 这也是为什么后面会出现“随机森林”和“XGBoost”。
👉决策树就是通过不断问“最关键的问题”,把数据一步步分开,直到得到明确结论。
3.5 随机森林
随机森林本质上是一种集成学习方法。如果说决策树是“一个人做判断”,那么随机森林就是“很多棵决策树一起做判断,然后投票决定结果”。它的核心思想非常朴素:
👉 一棵树可能会看错,但很多棵树综合起来,结果通常更稳。
这也是它名字的由来。“森林”说明它不是一棵树,而是很多棵树组成的集合。
在实际训练时,随机森林并不是把同一份数据原封不动地交给每一棵树,而是会做两件事。
第一件事是:对样本随机抽取。
也就是说,每一棵树看到的训练数据都不完全一样。有的样本会被抽到,有的可能没抽到。这种方法叫做 Bootstrap采样。这样做的目的是让每棵树都有一点“自己的视角”,避免所有树学得一模一样。
第二件事是:对特征随机选择。
假设我们要判断一个人是否健康,可以使用的特征有很多,比如运动频率、睡眠时间、饮食习惯、BMI、年龄等。随机森林在每次分裂节点时,不会把所有特征都拿来选,而是随机挑一部分特征,再从里面找最优划分。这样做的目的是进一步增加树与树之间的差异性,减少“所有树都盯着同一个特征”的情况。
所以,随机森林的完整思路可以概括成:
随机抽样本 → 随机抽特征 → 训练很多棵决策树 → 最后投票或取平均
如果任务是分类问题,那么每棵树都会给出一个类别,最后由“票数最多”的类别作为最终结果;如果任务是回归问题,那么每棵树都会给出一个数值,最后取这些结果的平均值。
例如,有5棵树分别判断一个用户是否会流失,结果如下:
树1:会流失
树2:不会流失
树3:会流失
树4:会流失
树5:不会流失
那么最终结果就是“会流失”,因为这个类别获得了更多票数。
从专业角度来看,随机森林的核心优势在于:
它通过“多模型集成”降低了单棵决策树的方差,提高了整体稳定性和泛化能力。
这里的“方差”你可以简单理解为:
👉 模型太容易被训练数据影响,换一批数据就可能变得很不一样。
单棵决策树就有这个问题,而随机森林通过“多棵树综合”把这种不稳定性平均掉了。
我们可以用一个简单的例子来理解。
假设一个老师只问一个学生,就判断某个问题难不难,这个结论可能不准;但如果问全班很多同学,再综合大家的答案,结果通常更可靠。随机森林就是这个思路。
下面看一个简单的代码示例:
from sklearn.ensemble import RandomForestClassifier
# 数据:运动、饮食、睡眠
X = [
[1, 1, 1],
[1, 0, 1],
[0, 1, 0],
[0, 0, 0],
[1, 1, 0],
[0, 1, 1]
]
y = [1, 0, 0, 0, 1, 1] # 是否健康
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
print(model.predict([[1, 1, 1]]))
在这段代码中:
RandomForestClassifier表示使用随机森林做分类n_estimators=100表示森林中有100棵树fit()表示训练模型predict()表示预测新样本属于哪一类
这背后并不是一棵树在判断,而是100棵树共同参与决策。
随机森林在实际应用中非常广泛,因为它效果通常不错,而且不需要特别复杂的调参。常见应用场景包括:
- 用户流失预测
- 金融风控
- 医疗辅助诊断
- 商品推荐前的用户分类
- 健康状态评估
随机森林相比决策树,最大的改进就在于“更稳”。
单棵决策树的问题是:
- 很容易过拟合
- 对训练数据太敏感
- 换一点数据树的结构就可能大变样
而随机森林通过“很多树一起判断”,明显缓解了这些问题。因此在很多传统机器学习任务中,随机森林都是一个非常实用、非常经典的基线模型。
不过它也不是没有缺点。
虽然随机森林比单棵树更稳定,但它的可解释性会变差。决策树可以直接画出来,一眼看清楚“先问什么、后问什么”;而随机森林因为树太多,很难逐棵解释。除此之外,当数据量很大、特征很多时,随机森林的训练和预测成本也会提高。
从算法关系上看,你可以这样理解:
- 决策树:一个人做判断
- 随机森林:很多人独立判断后投票
- XGBoost / LightGBM:不是简单投票,而是“前一个错了,后一个专门来改错”
这样你就能自然地衔接到下一节。
👉 随机森林就是用很多棵不同的决策树一起做判断,通过投票或平均,让结果比单棵树更稳、更可靠。
3.6 XGBoost / LightGBM
如果说随机森林是“很多树一起投票”,那么 XGBoost 和 LightGBM 的思路完全不同:
👉 不是简单投票,而是一棵一棵“接着改错”
一、它解决什么问题(从直觉出发)
在随机森林中,每棵树是“独立”的:
- 每棵树自己训练
- 最后一起投票
但这里有一个问题:
👉 如果前面的树已经犯错了,后面的树并不会专门去修正这个错误。
于是就有了另一种思路:
前一个模型做得不好的地方,让后一个模型专门去学
这就是 Boosting(提升方法)的核心思想。
二、核心思想:一步一步“纠错”
XGBoost 和 LightGBM 都属于 Boosting 方法,它们的训练过程可以理解为:
第1棵树:先做一个初步预测
第2棵树:专门学习第1棵树的错误
第3棵树:继续修正前面所有错误
……
最后:把所有树加起来得到最终结果
👉 所以它不是“投票”,而是:
👉 不断修正,让模型越来越准
三、从数学角度看(简单理解)
模型最终形式可以表示为:
y = ∑ i = 1 n f i ( x ) y = \sum_{i=1}^{n} f_i(x) y=i=1∑nfi(x)
也就是说:
👉 最终结果 = 多棵树的“累加”
每一棵树负责一部分“改进”。
四、为什么它比随机森林更强?
你可以这样理解两者区别:
| 方法 | 思路 | 特点 |
|---|---|---|
| 随机森林 | 各自独立 → 投票 | 稳定 |
| XGBoost | 逐步纠错 → 累加 | 更精准 |
👉 举个很直观的例子:
假设预测体重变化:
- 随机森林:100个人各自给答案 → 投票
- XGBoost:第1个人猜错 → 第2个人专门改 → 第3个人再优化
👉 后者明显更“认真修正错误”
五、XGBoost vs LightGBM
它们本质一样,都是“不断纠错”,但优化方式不同:
| 模型 | 特点 |
|---|---|
| XGBoost | 精度高、稳定 |
| LightGBM | 更快、适合大数据 |
👉 可以简单理解为:
- XGBoost:更“细致”
- LightGBM:更“高效”
六、代码示例
XGBoost 示例:
from xgboost import XGBClassifier
X = [[1, 1], [1, 0], [0, 1], [0, 0]]
y = [1, 0, 0, 0]
model = XGBClassifier()
model.fit(X, y)
print(model.predict([[1, 1]]))
LightGBM 示例:
from lightgbm import LGBMClassifier
model = LGBMClassifier()
model.fit(X, y)
print(model.predict([[1, 1]]))
七、实际应用(重点🔥)
XGBoost / LightGBM 在工业界非常常见,尤其是:
- 金融风控(是否违约)
- 推荐系统排序
- 用户流失预测
- 比赛(Kaggle冠军常用)
八、优点与局限
优点
- 精度高(非常强)
- 能处理复杂数据
- 在结构化数据上几乎“最强”
局限
-
训练较慢(尤其XGBoost)
-
参数较多(需要调参)
-
可解释性较弱
👉XGBoost / LightGBM 的核心就是一棵一棵地修正错误,让模型在不断纠错中变得越来越精准。
总结
线性回归 → 最基础(直线)
逻辑回归 → 分类(概率)
SVM → 找最优边界
决策树 → 规则判断
随机森林 → 多树投票
XGBoost → 一步步纠错(最强)
| 算法 | 类型 | 核心特点 | 通俗理解 |
|---|---|---|---|
| 线性回归 | 回归 | 预测数值 | 画一条直线 |
| 逻辑回归 | 分类 | 输出概率 | 概率判断 |
| SVM | 分类 | 最大间隔 | 找最优分界线 |
| 决策树 | 分类/回归 | 规则判断 | 一步步问问题 |
| 随机森林 | 集成 | 多树投票 | 群体决策 |
| XGBoost | 集成 | 逐步优化 | 不断纠错 |
第4章 无监督学习算法
一、什么是无监督学习(先统一认知)
和监督学习不同,无监督学习的数据是没有标签的,也就是说:
👉 没有“标准答案”,模型要自己发现规律
比如:
- 一堆用户数据,但不知道谁属于哪一类
- 一堆商品,但不知道怎么分组
👉 模型要做的是:
自己把“相似的东西分到一起”
4.1 K-Means(最基础的聚类算法)
K-Means的核心思想非常直接:
👉 把数据分成K类,让同一类里的数据尽量相似
它的工作流程可以理解为:
先随机选K个中心点
→ 把每个数据分给最近的中心
→ 重新计算中心
→ 重复直到稳定
本质是在不断优化:
min ∑ ( x − μ ) 2 \min \sum (x - \mu)^2 min∑(x−μ)2
也就是让每个点尽量靠近自己的“类别中心”。
👉 K-Means就是在自动帮你分组。
一句话总结
👉
K-Means就是不断调整“中心点”,把相似的数据聚到一起。
4.2 层次聚类(Hierarchical Clustering)
层次聚类的思路和K-Means完全不同,它不需要提前设定K值,而是:
👉 一步一步把数据“合并”成树状结构
可以理解为:
每个点一开始是一类
→ 找最近的两个合并
→ 再继续合并
→ 最后形成一棵树
这个过程会形成一个“树状图”(dendrogram),你可以在任意高度切开,得到不同数量的分类。
👉 举例:
用户可以被分为:
- 运动人群
- 不运动人群
再细分:
- 高强度运动
- 低强度运动
👉 层层结构,非常直观。
👉 层次聚类就是一步一步合并数据,形成“分类树”。
4.3 DBSCAN(基于密度的聚类)
DBSCAN的核心思想和前两者不同:
👉 不是按距离分,而是按“密度”分
它认为:
- 密集的地方 → 一类
- 稀疏的地方 → 噪声
👉 简单理解:
一群挤在一起的人 → 一类
零散的人 → 异常点
它有两个关键参数:
- 半径(ε):多近算“邻居”
- 最少点数:多少人算“一个群”
👉 举例:
在用户数据中:
- 正常用户形成几个密集群
- 异常用户(极端行为)会被识别出来
👉 DBSCAN就是根据“密度”找群体,同时还能识别异常点。
4.4 主成分分析(PCA)
PCA不是用来分类的,而是用来:
👉 降维(把复杂数据变简单)
比如:
- 原本有100个特征
- PCA压缩成10个最重要的
它的核心思想是:
👉 找到数据变化最大的方向
数学表达:
最大化数据方差 最大化数据方差 最大化数据方差
👉 简单理解:
- 找到“最重要的信息”
- 把不重要的去掉
👉 举例:
健康系统中:
- 原始数据:运动、饮食、睡眠、BMI、心率…
- PCA后:提取几个“关键健康指标”
👉PCA就是把数据压缩,只保留最重要的信息。
本章总结
K-Means → 按距离分组
层次聚类 → 一步步合并
DBSCAN → 按密度分组
PCA → 压缩数据
第5章 初级强化学习
一、什么是强化学习(核心区别)
强化学习和前面两类完全不同,它不是“给答案”或“找结构”,而是:
👉 通过不断尝试和反馈来学习
可以理解为:
👉 试错 + 奖励
5.1 Q-Learning
Q-Learning的核心是:
👉 学会在某种状态下,做哪个动作最划算
用一个表表示:
Q ( s , a ) Q(s, a) Q(s,a)
- s:状态
- a:动作
更新规则是:
Q = Q + α ( r + γ max Q − Q ) Q = Q + \alpha (r + \gamma \max Q - Q) Q=Q+α(r+γmaxQ−Q)
含义:当前价值 + 学习到的新信息
👉 举例:
一个AI在迷宫里:
- 走对 → 奖励
- 撞墙 → 惩罚
慢慢学会最优路径。
👉Q-Learning就是记录“在哪种情况做什么最赚”。
5.2 SARSA
SARSA和Q-Learning很像,但区别在于:
它更“保守”
更新方式:
Q ( s , a ) = Q + α ( r + γ Q ( s ′ , a ′ ) − Q ) Q(s,a) = Q + \alpha (r + \gamma Q(s', a') - Q) Q(s,a)=Q+α(r+γQ(s′,a′)−Q)
区别可以这样理解:
| 方法 | 特点 |
|---|---|
| Q-Learning | 假设最优行为 |
| SARSA | 按当前真实行为学习 |
简单说:
- Q-Learning:理想主义
- SARSA:现实主义
👉SARSA是在真实行动路径上学习,而不是假设最优情况。
全文核心算法总结
| 类别 | 算法 | 解决问题 | 核心思想 | 通俗理解 |
|---|---|---|---|---|
| 监督学习 | 线性回归 | 预测数值 | 拟合线性关系 | 画一条直线预测 |
| 监督学习 | 逻辑回归 | 分类问题 | 概率建模 | 算概率再分类 |
| 监督学习 | SVM | 分类问题 | 最大间隔 | 找最安全分界线 |
| 监督学习 | 决策树 | 分类/回归 | 特征划分 | 一步步问问题 |
| 监督学习 | 随机森林 | 分类/回归 | 多模型投票 | 多人投票更稳 |
| 监督学习 | XGBoost / LightGBM | 分类/回归 | 逐步纠错 | 一棵一棵改错 |
| 无监督学习 | K-Means | 数据分组 | 最小距离 | 找中心分组 |
| 无监督学习 | 层次聚类 | 分层结构 | 逐步合并 | 形成分类树 |
| 无监督学习 | DBSCAN | 聚类+异常检测 | 密度判断 | 挤在一起算一类 |
| 无监督学习 | PCA | 降维 | 保留最大信息 | 压缩数据 |
| 强化学习 | Q-Learning | 决策问题 | 最大收益 | 哪种选择最赚 |
| 强化学习和前面两类完全不同,它不是“给答案”或“找结构”,而是: |
👉 通过不断尝试和反馈来学习
可以理解为:
👉 试错 + 奖励
5.1 Q-Learning
Q-Learning的核心是:
👉 学会在某种状态下,做哪个动作最划算
用一个表表示:
Q ( s , a ) Q(s, a) Q(s,a)
- s:状态
- a:动作
更新规则是:
Q = Q + α ( r + γ max Q − Q ) Q = Q + \alpha (r + \gamma \max Q - Q) Q=Q+α(r+γmaxQ−Q)
含义:当前价值 + 学习到的新信息
👉 举例:
一个AI在迷宫里:
- 走对 → 奖励
- 撞墙 → 惩罚
慢慢学会最优路径。
👉Q-Learning就是记录“在哪种情况做什么最赚”。
5.2 SARSA
SARSA和Q-Learning很像,但区别在于:
它更“保守”
更新方式:
Q ( s , a ) = Q + α ( r + γ Q ( s ′ , a ′ ) − Q ) Q(s,a) = Q + \alpha (r + \gamma Q(s', a') - Q) Q(s,a)=Q+α(r+γQ(s′,a′)−Q)
区别可以这样理解:
| 方法 | 特点 |
|---|---|
| Q-Learning | 假设最优行为 |
| SARSA | 按当前真实行为学习 |
简单说:
- Q-Learning:理想主义
- SARSA:现实主义
👉SARSA是在真实行动路径上学习,而不是假设最优情况。
全文核心算法总结
| 类别 | 算法 | 解决问题 | 核心思想 | 通俗理解 |
|---|---|---|---|---|
| 监督学习 | 线性回归 | 预测数值 | 拟合线性关系 | 画一条直线预测 |
| 监督学习 | 逻辑回归 | 分类问题 | 概率建模 | 算概率再分类 |
| 监督学习 | SVM | 分类问题 | 最大间隔 | 找最安全分界线 |
| 监督学习 | 决策树 | 分类/回归 | 特征划分 | 一步步问问题 |
| 监督学习 | 随机森林 | 分类/回归 | 多模型投票 | 多人投票更稳 |
| 监督学习 | XGBoost / LightGBM | 分类/回归 | 逐步纠错 | 一棵一棵改错 |
| 无监督学习 | K-Means | 数据分组 | 最小距离 | 找中心分组 |
| 无监督学习 | 层次聚类 | 分层结构 | 逐步合并 | 形成分类树 |
| 无监督学习 | DBSCAN | 聚类+异常检测 | 密度判断 | 挤在一起算一类 |
| 无监督学习 | PCA | 降维 | 保留最大信息 | 压缩数据 |
| 强化学习 | Q-Learning | 决策问题 | 最大收益 | 哪种选择最赚 |
| 强化学习 | SARSA | 决策问题 | 实际路径学习 | 按真实经验学习 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)