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

推荐订阅源

Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
C
Check Point Blog
I
InfoQ
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
月光博客
月光博客
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
Y
Y Combinator Blog
博客园 - Franky
博客园_首页
罗磊的独立博客
量子位
美团技术团队
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
博客园 - 叶小钗
aimingoo的专栏
aimingoo的专栏

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
对数几率 odds
Yiwei Zhang · 2025-06-06 · via 又见苍岚

对数几率(Logit)是统计学和机器学习中的重要概念,主要用于描述事件发生概率与不发生概率的比率关系,本文记录相关信息。

简介

几率,更准确的说,成功的几率,被定义为成功的概率/失败的概率。

对数几率(Logit)是统计学和机器学习中的重要概念,主要用于描述事件发生概率与不发生概率的比率关系,在分类任务(尤其是二分类)中应用广泛。

定义

对数几率的定义为事件发生概率 $p$ 与不发生概率 $1−p$ 的比率的自然对数:
$$
\mathrm{logit}(p)=\ln{(\frac{p}{1-p})}
$$
其中:

  • $𝑝$:事件发生的概率($0<𝑝<1$);
  • $\frac{𝑝}{1−𝑝}$:称为“几率”(Odds),表示事件发生的相对可能性。

示例‌:

若某事件发生概率 $𝑝=0.8$,则:

  • 几率 =0.8/0.2=4(发生概率是不发生概率的4倍);
  • 对数几率 = ln⁡(4) ≈1.386

和逻辑回归的关系

观察上表中的第一和第三列,如果反过来,考虑一个函数将 log odds作为自变量,概率作为应变量,这个函数就是逻辑函数(Logisitc Function),逻辑回归的来源,这也是逻辑回归的另一个名字–对数几率回归(Log Odds Regression)的原因。

我们都知道线性回归的形式: $𝑦=𝑤𝑥+𝑏$ ,以 𝑤,𝑏 拟合 𝑦 ;

逻辑回归-对数几率回归其实对应:
$$
\ln\frac{y}{1-y}=wx+b
$$
线性拟合 $\ln\frac{y}{1-y}$.

对上式进行处理可以得到:
$$
y=\frac1{1+e^{-(wx+b)}}
$$

Pytorch 逻辑回归

  • 生成数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import torch
import matplotlib.pyplot as plt

# 生成数据
torch.manual_seed(10)
mean_val = 1.5
num_sample = 100
n_data = torch.ones(num_sample,2)
x0 = torch.normal(mean_val*n_data,1)
y0 = torch.ones(num_sample)
x1 = torch.normal(-mean_val*n_data,1)
y1 = torch.zeros(num_sample)
train_x = torch.cat((x0,x1),0)
train_y = torch.cat((y0,y1),0)

plt.scatter(x0[:,0],x0[:,1])
plt.scatter(x1[:,0],x1[:,1])
plt.show()

  • 逻辑回归
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import torch.nn as nn
class LR(nn.Module):
def __init__(self):
super(LR,self).__init__()
self.features = nn.Linear(2,1)
self.sigmoid = nn.Sigmoid()

def forward(self,x):
x = self.features(x)
x = self.sigmoid(x)
return(x)

lr_net = LR()
loss_fn = nn.BCELoss() # Binary Cross Entropy
lr = 0.01 # learning rate
optimizer = torch.optim.SGD(lr_net.parameters(), lr=lr, momentum=0.8)

for iteration in range(1000):
y_pred = lr_net(train_x)

loss = loss_fn(y_pred.squeeze(), train_y)

loss.backward()

optimizer.step()

if iteration%5 == 0:
mask = y_pred.ge(0.5).float().squeeze()
correct = (mask == train_y).sum()
acc = correct.item() / train_y.size(0)
print(iteration,acc)
if acc>0.985:

break

参考资料

文章链接:
https://www.zywvvd.com/notes/study/machine-learning/odds/odds/