一、Cox Loss公式介绍

Cox Loss一个基于排序的对比学习(ranking loss)
Loss=−∑i:event(f(xi)−log⁡∑j∈Riexp⁡(f(xj))) \mathcal{Loss} = - \sum_{i:\text{event}} \left( f(x_i) - \log \sum_{j \in R_i} \exp(f(x_j)) \right) Loss=i:event f(xi)logjRiexp(f(xj))
我们只对 event=1(死亡的) 的人算 loss

二、先给一个具体数据

假设有 3 个病人:

病人 生存时间 t 是否事件(event) 模型输出 risk
A 10 1(死亡) 0.2
B 7 1(死亡) 1.0
C 12 0(删失) 0.5

三、按时间排序(关键步骤)

👉 按 时间从大到小排序(工程里常用)

排序后 病人 t event risk
1 C 12 0 0.5
2 A 10 1 0.2
3 B 7 1 1.0

四、逐个计算(核心来了)

① 先算 B(最早死亡)

B:t = 7(最早死)

✔ risk set ( R_B ):

👉 所有在 B 死之前还活着的人:

👉 A、B、C 都还活着


✔ 计算:

f(B)=1.0f(B) = 1.0f(B)=1.0∑exp⁡(f)=e1.0+e0.2+e0.5\sum \exp(f) = e^{1.0} + e^{0.2} + e^{0.5}exp(f)=e1.0+e0.2+e0.5

👉 数值:

  • e¹ = 2.718
  • e⁰·² ≈ 1.221
  • e⁰·⁵ ≈ 1.649

👉 总和:

=5.588 = 5.588 =5.588


✔ loss_B:

=−(1.0−log⁡(5.588))= - (1.0 - \log(5.588))=(1.0log(5.588))log⁡(5.588)≈1.72\log(5.588) ≈ 1.72log(5.588)1.72=−(1.0−1.72)=0.72= - (1.0 - 1.72) = 0.72=(1.01.72)=0.72


② 再算 A

A:t = 10


✔ risk set ( R_A ):

👉 在 A 死之前还活着的人:

👉 A + C

(B 已经死了,不算)


✔ 计算:

f(A)=0.2f(A) = 0.2f(A)=0.2∑exp⁡(f)=e0.2+e0.5\sum \exp(f) = e^{0.2} + e^{0.5}exp(f)=e0.2+e0.5=1.221+1.649=2.87= 1.221 + 1.649 = 2.87=1.221+1.649=2.87


✔ loss_A:

=−(0.2−log⁡(2.87))= - (0.2 - \log(2.87))=(0.2log(2.87))log⁡(2.87)≈1.05\log(2.87) ≈ 1.05log(2.87)1.05=−(0.2−1.05)=0.85= - (0.2 - 1.05) = 0.85=(0.21.05)=0.85


③ C(删失)

👉 event = 0

❌ 不参与 loss


五、总 loss

L=(0.72+0.85)/2≈0.785 L = (0.72 + 0.85) / 2 ≈ 0.785 L=(0.72+0.85)/20.785


六、这整个过程在干什么?(核心理解)

你看 B:

👉 B 死得最早
👉 所以:

✔ 希望:
f(B)>f(A),f(C) f(B) > f(A), f(C) f(B)>f(A),f(C)


但实际:

  • B = 1.0
  • C = 0.5(还可以)
  • A = 0.2(OK)

👉 排序基本对 → loss较小


再看 A:

👉 A 比 C 死得早

✔ 希望:
f(A)>f(C) f(A) > f(C) f(A)>f(C)

但实际:

  • A = 0.2
  • C = 0.5 ❌(错了)

👉 所以 loss_A 比较大


🧠 七、一句话理解这个公式

👉 对每一个“死亡事件”:

模型要保证:

这个人(死得早)的风险 > 所有还活着的人

👉 Cox loss =

✔ 对每个死亡样本
✔ 和“当时还活着的人”比
✔ 排序错 → 惩罚


Logo

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

更多推荐