返回列表

Brief 3rd place solution (Kha Vo view)

378. University of Liverpool - Ion Switching | liverpool-ion-switching

开始: 2020-02-24 结束: 2020-05-25 药物研发 数据算法赛
简述第三名解决方案 (Kha Vo 视角)

简述第三名解决方案 (Kha Vo 视角)

作者: Kha Vo (队友: group16, zidmie) | 比赛: Liverpool Ion Switching

首先,我要感谢 Kaggle、主办方 @richardbj、所有的竞争对手,特别是我的两位出色的队友 @group16@zidmie,他们拥有我有幸合作过的最敏捷、最聪明的思维方式。最后,考虑到我们在这次比赛中作为优化过程所付出的巨大努力,我们对排名前两位的团队中存在的数据泄露感到有些失望。我的队友们正在撰写一篇关于该解决方案的非常详细的博客文章。现在是他们的睡觉时间,所以我将简要写下我们的解决方案。

----------------- 简要解决方案 ---------------------

预处理

我们消除了漂移,添加了偏移/增益以使 signal-round(signal) = noise,并且我们去除了一些正弦波峰,特别是 50Hz。我们还在 350Hz 和 1150Hz 附近发现了一些小波峰。去除所有这些并不是一个完美的过程,所以我们通过不同的方法来做到这一点。最后,我们得到了一些略有不同的信号用于建模。

模型

Ptran 和状态发现

我们使用单个 HMM(隐马尔可夫模型),配合高度定制的 forward-backward(前向-后向)算法。建模过程的关键是将高类别的信号分解为低类别的子过程。让我们将信号类别表示为 cat 1, 2, 3, 4, 5, 6,对应的最大 open_channels 为 1, 1, 3, 5, 10, 4(cat 6 仅出现在测试集中)。从具有状态 [0, 0, 1, 1] 的 4x4 矩阵 Ptran 的 cat1 开始,我们将此矩阵扩展为每个更高类别的更大矩阵。例如:cat3 由三个 cat1 过程组合而成,那么它具有大小为 20x20 的 Ptran,其中每个状态可以取值 [0, 1, 2, 3],它是 0 或 1 的 3 个状态的组合,也就是 [0, 0, 1, 1] 的 3 个过程的 3 个状态的组合。对 cat4 和 cat5 进行类似的操作,其中 cat4 的 Ptran 大小为 56x56,cat5 的 Ptran 大小为 286x286。我们将原始矩阵 (4x4) 作为一个优化问题进行优化。

算法

我们制作了一个高度定制的 fw-bw(前向-后向)算法。如果我们将时间 t 的信号落入每个状态的概率表示为 s(t)(其中每个状态是扩展 Ptran 矩阵中的一行),那么正常的前向传递是(粗略地,为了简单起见,这里我跳过了每个时间步计算的归一化步骤),我们表示 alpha0(t) = alpha0(t-1) x Ptran。类似地,在 t 停止的正常后向传递将是 beta0(t) = beta0(t+1) x Ptran^T,然后 pred(t) = alpha(t) * beta(t) * Psig。这里,Psig 是每个时间点噪声的高斯发射,我们可以将其作为参数进行优化,pred 是预测值。

我们发现通过在后向传递中整合前向的“记忆”,可以提高分数。所以定制过程是:

beta1(t) = [(beta1(t+1) x Ptran^T )^coef1] * [(alpha0(t))^(1 - coef1)]。

这个过程让我们得到了更好的 beta。类似地,我们执行另一轮传递,将 beta1 用作 alpha2 的“堆叠”特征,即:

alpha2(t) = [(alpha2(t-1) x Ptran )^coef2] * [(beta1(t))^(1 - coef2)]。

最后,这些 alpha 和 beta 的定制总和给了我们最终结果:

pred = [ c1 * (beta1) + (1-c1-c2) * alpha2 + c2 * (beta1 * alpha2) ] * Psig,

其中 c1, c2 也是需要优化的参数。

混合与阈值处理

给定 pred,现在我们有了每个状态的概率(这里的状态是 cat1 的 4 个状态 [0 0 1 1] 之一,或 cat 3 的

同比赛其他方案