惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Security @ Cisco Blogs
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
腾讯CDC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
F
Full Disclosure
博客园 - 【当耐特】
C
CERT Recently Published Vulnerability Notes
Engineering at Meta
Engineering at Meta
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threatpost
I
Intezer
V2EX - 技术
V2EX - 技术
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
小众软件
小众软件
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
N
News | PayPal Newsroom
MyScale Blog
MyScale Blog
AI
AI
Vercel News
Vercel News
Spread Privacy
Spread Privacy
美团技术团队
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
Schneier on Security
Schneier on Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
Help Net Security
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 热门话题
U
Unit 42
L
LangChain Blog
Recent Announcements
Recent Announcements

BarryZed的个人博客

数据库系统原理 | BarryZed的个人博客 Linux与shell命令 | BarryZed的个人博客 Java | BarryZed的个人博客 算法设计与分析 | BarryZed的个人博客 www.barryzed.top 《失落星船:马拉松》游戏内百科归档 | BarryZed的个人博客 有趣的词源 | BarryZed的个人博客 www.barryzed.top My Radar Is Rotating… | BarryZed的个人博客
机器学习 | BarryZed的个人博客
BarryZed · 2026-04-21 · via BarryZed的个人博客

By BarryZed

目录

概论

机器学习模型的分类

按学习任务分类

监督学习(Supervised Learning)

训练数据集已经标好标签/分好类

常见任务:分类、回归

无监督学习(Unsupervised Learning)

半监督学习(Semi-supervised Learning)

用“少量有标签数据 + 大量无标签数据”一起训练模型(现实中标注完数据很贵)

强化学习(Reinforcement Learning)

通过“试错 + 奖励反馈”来学会做决策,目标是“最大化长期累计奖励(Reward)”

没有标准答案,一直优化策略来使得分更高

按模型性质分类

生成式模型(Generative Model)

学习数据怎么生成:先学每个类别长什么样,然后再判断这个样本属于哪个类别

  • 朴素贝叶斯(Naive Bayes)
  • 高斯混合模型(GMM)
  • 隐马尔可夫模型(HMM)

判别式模型(Discriminative Model)

直接学习分类边界 / 后验概率:不管数据怎么生成,只关心怎么分对类别

找到一个或几个点/线/平面/超平面,样本在那个区域里就是哪类,为什么不重要,模型只管找到边界。

  • 逻辑回归(Logistic Regression)
  • 支持向量机(SVM)
  • KNN(严格说是非参数判别)
  • 神经网络(Neural Network)

按输出类型分类

分类(Classification)

预测新样本属于已有的哪一类

监督学习,训练数据有标签

  • KNN
  • SVM
  • 决策树
  • 朴素贝叶斯
  • 逻辑回归

回归(Regression)

预测连续数值。(天气、销量、价格等)

通过已有数据学习输入与输出之间的关系,并预测新的数值结果。

  • 线性回归(Linear Regression)
  • 岭回归(Ridge Regression)
  • Lasso 回归
  • SVR

聚类(Clustering)

将已有的没有标签的样本分类

非监督学习,训练数据没有标签

  • K-Means
  • DBSCAN
  • 层次聚类

降维(Dimensionality Reduction)

其他目的

  • 异常检测(Anomaly Detection)
  • 推荐系统(Recommendation)
  • 强化学习(Reinforcement Learning)
  • 生成(Generation)
  • 排序(Ranking)
  • 时序预测(Time Series Forecasting)

其他概念

损失函数

课上推导(两个偏导)

notion image

两个圈中=0,左侧w与有下w相等

线性回归

目的

预测,找到最优的Wb(ais)

特点

  1. 标准框架:特征→模型→损失函数→优化(梯度下降)→评估(越大越好)
  1. 可解释性强
  1. 有最完善的理论支持

代码

  1. 读数据,规范数据格式
  1. 特征归一化(Normalize)
    1. 特征标准化 = (X - 均值)/标准差

      • 均值:np.mean(X, axis=0)
      • 标准差:np.std(X, axis=0)

      axis=0 指按列求)

  1. 线性预测函数
    1. np.matmul(X, W) + bias

      matmul :matrix multiplication(@

  1. 损失函数
      • np.sum() 可以直接算和(当用就行)
  1. 梯度下降
      • grad_w
      • grad_bias
      • alpha :学习率
      • W = W - alpha * grad_w
      • bias = bias - alpha * grad_b
  1. 训练函数
      • ite 指学习轮数(iteration,迭代次数)
    1. 先给初始值
      1. W = np.random.randn(n, 1) * 0.01W 一个随机值,*0.01 防止过大

        b = 0.1

        alpha = 0.01

    2. 声明costs 来记录每次的损失,来确定学习率是否合适
    3. 开始循环
      1. 先保存当前cost
      2. 进行(5)的梯度下降更新W, bias

L2正则线性回归

  • 损失函数
    • :正则化强度系数()

  • grad_w
  • grad_bias
  • 更新
    • w = w - alpha(grad_w + 2 * lambda * w)

先验

手算

  • 向量(一步一步算)
    • notion image

  • 正规方程解(一步到位最优解)
    • notion image

逻辑回归

“你有多像那一边?”(probability matters)——ChatGPT

二分类

目的

把输入数据分为0和1两类((分割超平面)的两侧),找到最优的(矩阵) 和b

则在1组,反之在0组(就是把放进Sigmoid里和0.5比)

Sigmoid函数

把数据压缩到0~1之间

原函数

//交叉熵损失(Cross Entropy Loss)

梯度下降

  • grad_w
  • grad_b
  • 更新
    • alpha :学习率
    • W = W - alpha * grad_w
    • b = b - alpha * grad_b
  • 更新时不把变为0或1,保留原始值,只有最后与测试再变

手算

notion image

感知机

“你在哪边?”(only side matters)——ChatGPT

二分类

if yi * (np.dot(w, xi) + b) <= 0 :误分类,从头重新算W, b

更新W, b :

w = w + alpha * yi * xib = b + alpha * yi

手算

notion image

  • 某一轮指完全走一遍
    • 例子(4个数)
      • 第一个数错误:更新w1, b1
      • 用w1, b1分第二个数,正确
      • 用w1, b1分第三个数,错误,更新w2, b2
      • 用w2, b2分第四个数,错误,更新w3, b3

      →此时w3, b3则是第一轮的结果

Fisher线性判别分析(Linear Discriminant Analysis, LDA)

找一条直线(投影方向 w),让两类数据在这条线上“分得最开”。

代码

  1. 分类
    1. class1, class2 = np.unique(x) :把数组 x 里“所有不重复的值”提取出来,并排序返回

      按照返回值将原数据X 分到X1, X2

  1. 计算类均值
    1. 找到class1, class2 的中心m1, m2 (m1 = np.mean(X1, axis=0))

  1. 计算散度矩阵和类内散度
    1. 散度矩阵:衡量“两个类别中心有多远”,越远越好
      1. 这里是外积(m_diff = m2 - m1; S_b = np.outer(m_diff, m_diff.T)),公式为:

    2. 类内散度:类别内部“散不散”,越近越好
      1. 先按类算出每类的散度
        1. S1 = np.dot((X1 - m1), (X1 - m1).T)

      2. 全部相加得出
  1. 找最优方向
      • 再归一化:w = w / np.linalg.norm(w)
        • 原因:只关心方向,不关心长度

          (w可以理解为是一个多维坐标,与原点连线就能确定一个方向;长短没啥用)

  1. 投影后均值
  1. 预测函数
    1. 算点的投影:proj = np.dot(w.T, x)
    2. 比较绝对值,分类

手算

  1. 题目会给数据与分类
    1. X1:(1, 2), (2, 3), (3, 2)

      X2:(6, 5), (7, 6), (8, 5)

  1. 计算均值
    1. m1 = (2, 2.33)

      m2 = (7, 5.33)

      类间差:m2 - m1 = (5, 3)

notion image

贝叶斯

朴素贝叶斯

“朴素”:所有特征之间相互独立

也叫做条件独立假设(Conditional Independence Assumption)

方差与偏差

偏差

由于强假设所有特征独立,导致模型表达能力受限 → 偏差较高

方差

只算统计概率→参数少,不易受单个样本影响 → 方差较低

各种朴素贝叶斯

  • 高斯朴素贝叶斯(Gaussian Naive Bayes)
    • 专门处理“连续型数值特征”(温度、身高等)

      假设:每个特征在某个类别下服从正态分布(高斯分布)

      需要为每个类别、每个特征单独计算均值与方差

  • 多项式朴素贝叶斯(Multinomial Naive Bayes)
    • 常用于文本分类、词频型数据(邮件、新闻、违禁词等)

      假设:每个特征在某个类别下的出现次数服从多项式分布(Multinomial Distribution)

  • 伯努利朴素贝叶斯(Bernoulli Naive Bayes)
    • 只关心特征是否出现,而不关心出现次数(短文本、噪声较少的场景)

      假设:每个特征在某个类别下服从伯努利分布(Bernoulli Distribution)

各种概率

标签/类别:Label / Target() 特征:Feature(,X表示所有特征,里面的为各个特征值)

:先验概率(Prior)

在不看特征时,待测样本是某一类的概率;单纯看种类里个体数量决定。

对数似然

将概率乘积取对数,从乘法变为加法

防止极小的概率不断相乘导致的下溢,从而防止丢失数值信息

拉普拉斯平滑

每个类别里,每个特征“默认都出现过一次(或很小次数)”

  • :平滑系数
    • 小:贴合训练数据,易过拟合

      大:接近均匀分布,更保守

      一般取1

  • :特征在类别中出现次数
  • :类别下所有特征的总出现次数
  • :特征个数

带拉普拉斯平滑的朴素贝叶斯

某邮件系统将邮件分为三类:垃圾邮件( )、广告邮件( )、正常邮件(),选取8个核心关键词作为特征,分别为:中奖、免费、礼品、退款、发票、工作、会议、汇报。 训练集共50封邮件,各类别样本量及各关键词出现次数统计如下:

  • 垃圾邮件():共15封
    • 关键词出现次数:中奖(12)、免费(10)、礼品(8)、退款(3)、发票(1)、工作(0)、会议(0)、汇报(0)

  • 广告邮件():共20封
    • 关键词出现次数:中奖(2)、免费(7)、礼品(9)、退款(1)、发票(4)、工作(2)、会议(1)、汇报(0)

  • 正常邮件():共15封
    • 关键词出现次数:中奖(0)、免费(1)、礼品(0)、退款(2)、发票(5)、工作(8)、会议(7)、汇报(6)

待测邮件:邮件内容包含关键词:中奖、免费、礼品、退款

  1. 先验概率
  1. 拉普拉斯平滑
  1. 根据待测样本的特征,算出每个类别的可能性(类别似然)
    1. 其他类别同上

  1. 乘先验概率,得到最终概率(未归一化后验概率(Unnormalized Posterior Probability)
    1. 即后验概率的分子,后验概率的分母为证据概率,对于所有类别都一样,所以分类时可以忽略

  1. 比较大小,得出结论

手算

某电影推荐系统将电影分为三类:

  • :动作片
  • :喜剧片
  • :恐怖片

选取 5 个关键词作为特征:打斗、爆炸、笑点、爱情、惊悚

  • 动作片 ()(共 12 部)
    • 关键词

      出现次数

      打斗

      8

      爆炸

      7

      笑点

      2

      爱情

      1

      惊悚

      2

  • 喜剧片 ()(共 10 部)
    • 关键词

      出现次数

      打斗

      1

      爆炸

      0

      笑点

      9

      爱情

      3

      惊悚

      1

  • 恐怖片 ()(共 8 部)
    • 关键词

      出现次数

      打斗

      2

      爆炸

      1

      笑点

      1

      爱情

      1

      惊悚

      8

某电影包含以下关键词:打斗、笑点、惊悚

notion image

决策树

选择划分特征的方法

ID3

哪个特征能让分类“变得最清晰”,就选哪个,不管有没有意义

比如:会通过id分组,一人一组,纯到爆炸!但来一个新人就没有用了,蠢到爆炸!

[hd] bro引以为傲的谐音梗被Gimini说是:「极其拟人化且刻意的幽默:这种“前半句正经,后半句突然讲俏皮话/网络梗”的风格,是现代大语言模型(尤其是被要求“用通俗易懂的语言解释”时)最标准的输出特征。[hd]

只能处理离散特征

C4.5

信息增益率(Gain Ratio)

解决ID3偏爱取值多的特征的问题,给“信息增益”降权,并引入特征本身“有多碎”的惩罚项

同样的id,C4.5会认为一人一组的分法没有泛化能力,从而拒绝

CART(Classification And Regression Tree)

基尼指数(Gini Index)

基尼指数:

  • :数据集
  • :类别数
  • :第类样本所占比例

:当前节点的混乱程度

Gini越小,数据越纯;Gini越大,数据越混乱。

划分后的基尼指数(加权):

  • :划分特征
  • :左右子树数据
  • :样本数

:划分后整体的平均混乱度

如果按这个特征切一刀,切完以后,整体剩下多少混乱

越小,说明分完后越“规整”(混乱程度小、纯),那么用这个特征分类就是好的。

等于0 → 左边全是正类,右边全是负类 → 一点都不乱,非常好

手算CART求第一决策特征

对于每个特征,枚举所有可能划分,算出每种划分的,取最小作为当前特征的最终;最后比较所有特征的最终

notion image

剪枝(Pruning)

降低决策树复杂度,解决过拟合,提高泛化能力

预剪枝(Pre-pruning)

建树过程中提前停止划分

常见停止条件:

  • 达到设定的最大树深
  • 节点样本数小于设定阈值
  • 划分后信息增益过小 / 基尼指数下降不明显

后剪枝(Post-pruning)

先生成完整决策树,再删除对泛化能力帮助不大的分支

随机森林(集成学习)

很多棵“有点不同的决策树”(通常基于CART),一起投票做决定

缺点:

  • 可解释性差(随机性过多)
  • 模型较大
  • 所需时间较长

造森林步骤

  1. Bootstrap抽样(数据随机)
    1. 从原始数据中:

      • 有放回抽样
      • 每棵树拿到一份“不同的数据集”
  1. 随机选特征(特征随机)
    1. 在每个节点分裂时:

      • 不看全部特征
      • 只看“随机挑出来的一部分特征”

      防止某个强特征统治全局

  1. 训练很多棵树(森林形成)
    1. 每棵树独立生长且结构不同(数据随机 + 特征随机)

KNN(K-Nearest Neighbors,K近邻算法)

目标是看一个新样本应给被分到哪类,看它周围最近的 K 个样本大多数属于谁。

平时不训练,仅当待测样本输入时根据k值统计标签

仍会有欠拟合或过拟合的现象

K-means(K均值聚类)

目标是把数据分成k类

贪心算法的一种,局部最优解

步骤:

  1. 随机选k个质心
  1. 计算每个样本到各个质心的距离,离哪个最近就分到哪类
  1. 计算每一类的平均值(该类所有点的平均位置)作为新的质心
  1. 重复,直到质心改变量小于设定阈值,结束

目的是最小化”类内距离平方和“

PCA(Principal Component Analysis,主成分分析)

找到数据“变化最大”的方向(方向向量),把数据投影过去,删掉多余维度

在投影方向上,方差最大的是第一主成分(PC1)

垂直于第一主成分的是第二主成分(PC2)

具体步骤

  1. 去中心化
    1. 每一列减去它的均值,让数据“围绕原点展开”

  1. 计算协方差矩阵
    1. 个样本,个特征

      协方差矩阵C(一个d*d的矩阵):

      :第 i 个特征 和 第 j 个特征 的“共同变化程度”

      :方差

  1. 特征值分解
    1. :将C带入以下公式,用行列式求出的所有可能值(从大到小写,最大的是第一主成分)

      一般将的长度化成1(规范化):除以的二范数

  1. 求降维结果(二维)

潦草手算

notion image

  • 作者:BarryZed
  • 链接:
  • 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。