使用未知标签对数据进行分类并在 matlab 中验证结果

Posted

技术标签:

【中文标题】使用未知标签对数据进行分类并在 matlab 中验证结果【英文标题】:classify data with unknown labels and validate the result in matlab 【发布时间】:2014-04-30 20:35:05 【问题描述】:

我有 8 个文本文件,每个文件都包含 300 名玩家在游戏中使用的 8 个不同领域的数据(特别是他们随机游走的坐标)。我想开发和实施一种计算机算法来确定不同玩家使用的不同策略。

我开始使用 k-means,其中 6 个文本文件用于训练,其余用于测试。但是,我不知道如何验证我的结果。换句话说,我想首先知道我应该有多少不同的类来最小化错误,但我不知道如何在这里定义错误。非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

我。轨迹上的 k 均值

k-Means 无疑是一种流行且简单的算法,但它也是一个相当弱的算法。特别是,它往往擅长对空间内的行为集群进行分类。您拥有的玩家轨迹(“随机游走”)可能不适合 k - 意味着您希望玩家之前的位置会影响他们的下一个位置。从本质上讲,您的数据结构不仅涉及空间,还涉及时间,这对于 k-means 来说可能很困难。考虑从您的轨迹中提取一些特征(多么不稳定、多快等)并在这些维度上进行聚类,或者使用一种针对时间相关性的算法,例如隐马尔可夫模型。

二。验证

在机器学习中,最常见的验证类型是保留验证。这是指您拥有一组正确分类的数据,并且您将其中的一部分用于训练,并将其中的一部分作为经过训练的模型必须努力实现的“目标”。

此方法不适用于您的情况,但检查它很重要。您尝试让您的模型与保留集相匹配的原因是,如果您只寻求最小化模型中对所见数据的误差,那么大多数 ML 算法将过拟合。这意味着他们将无限地更好地猜测他们所看到的数据,而在预测新数据方面变得越来越糟糕。这样的模型看起来很棒,但实际上毫无价值。

即使是“无监督”设置,您的情况也可能发生类似情况,因此我们没有标记的训练集。如果您决定最小化 k-means 模型的误差并且您有 N 个训练点,那么 k 的最佳选择是 k = N。当然,这样的模型将与您的训练数据完全相同,因此对任何未来的分类都无用。

通常处理这种情况的方法是通过规范化。不是最小化错误,而是最小化错误加上一个使用更多集群的惩罚项(即使像error + k^2 这样的东西也会是某种归一化项)。这意味着您的算法将受到限制,不能选择过高的 k,因为惩罚项最终会抹去赢利。

在标准化优化方案下,您可能会发现自己处于存在有意义的最优值的偶然情况。现在这是正确的答案吗?

遗憾的是,没有办法知道。无监督机器学习本身并没有目标。例如,批评者可能会说您错误地选择了标准化。但是,它可能有用吗?好吧,假设确实有一些 l 种不同的玩家行为可供您的特征识别,那么如果 k 接近 l 那么您的模型一切正常——但所有这些假设都只是机器中的鬼魂。

【讨论】:

非常感谢您的精彩回答。你认为这个问题可以用期望最大化算法来解决吗?对我来说,最困难的任务是如何提取一些轨迹以便相应地对它们进行聚类?非常感谢您的帮助! EM 就像一把锤子,但你的问题更多在于选择是建房子还是建游泳池。在任何一种情况下,EM 都可能是必要的,也可能不是必要的。如果我是你,我真的会研究 HMM——它是从轨迹中提取特征的自然模型,然后你可以尝试对 HMM 参数进行分类。

以上是关于使用未知标签对数据进行分类并在 matlab 中验证结果的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB:使用 fitctree 训练的分类器对新数据进行标签预测

使用 LIBSVM 进行测试

对监督学习和非监督学习的理解

处理标签编码的未知值

在 MATLAB 中使用感知器对数据进行分类

用matlab对数据分类汇总