503. Tabular Playground Series - Jul 2022 | tabular-playground-series-jul-2022
以下是我的方法概述;实际代码请查看 https://www.kaggle.com/code/ymatioun/tps22jul-custom-em
只有 14 个变量与聚类相关,其他变量根本没有被使用(这一点在比赛早期就被发现了)。变量 f_07 - f_13 是整数(共 7 个),f_22 - f_28 是浮点数(也是 7 个)。
浮点变量似乎已经呈正态分布,因此无需对它们进行转换。
但整数变量似乎来自某种混合泊松分布。我试图为它们构建模型,但没能想出任何有效的方案(即既能产生负相关又不产生负值,且具有易处理的概率质量函数)。所以我做了和其他人一样的事情——将它们进行幂变换,使其形状更“正态”,并将其视为多元正态变量。这可能是模型最需要改进的地方[如果比赛组织者能告诉我们这些变量究竟是如何构建的就好了,供以后参考]。
数据由 42 个簇组成,结构为 7 组,每组 6 个簇。就聚类标签而言,每个簇组被视为一个簇,从而产生 7 个不同的聚类标签。
整数变量仅因 7 个簇组而异(因此它们真正形成了 7 个簇,而不是 42 个)。它们的均值和协方差在 7 个簇组之间似乎完全独立(有些协方差为零)。
浮点变量有两种不同的分布:对于每个簇组,2 个浮点变量的均值为 0,标准差为 1,并且与任何其他整数或浮点变量不相关。其余 5 个浮点变量的均值为 -1 或 +1,并具有完整的 5x5 协方差矩阵。它们与整数变量不相关,因此完整的 14x14 协方差矩阵由整数变量的 7x7 块、相关浮点变量的 5x5 块和不相关浮点变量的 2x2 单位矩阵组成。
这种数据结构可以通过仅对浮点变量运行 GaussianMixture(n_components=42) 并查看混合分量的均值来轻松揭示。
我是在查看 BayesianGMMClassifier 的源代码时意识到的(大家不都会这么做吗?-:)),试图理解为什么它大大改善了结果,并看到它为 7 个簇中的每一个都使用了相同的 n_components=7,导致总共有 49 个簇。我以为那是一个错误,并让它为每个簇使用 1 个分量,但这大大降低了 LB 分数。这表明真实的数据结构包含 > 7 个簇;进一步的实验表明,每个簇组实际上有 6 个簇,而不是 7 个。
我为高斯混合模型编写了一个自定义的 EM(期望最大化)算法,考虑到了上述数据结构的细节。我硬编码了所有浮点变量的均值(0, -1, 1)以确保收敛到真实的聚类中心。这就是我获得最佳 LB 分数的方法。