本文最后更新于:2025年6月7日 晚上
对数几率(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() lr = 0.01 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/