我们如何在数据集上使用无监督学习技术,然后对聚类进行标记



首先,这肯定是家庭作业(所以请不要完整的代码示例)。也就是说。。。

我需要使用Matlab中的神经网络工具箱来测试有监督算法旁边的无监督算法。数据集是UCI人工字符数据库。问题是,我已经有了一个很好的关于监督算法的教程,而只能在无监督的情况下学习。

所以我知道如何使用selforgmap创建自组织地图,然后使用train(net, trainingSet)对其进行训练。我不知道下一步该怎么办。我知道它已经将我给它的数据聚类为(希望)10个聚类(每个字母一个)。

两个问题:

  • 然后我如何标记集群(假设我有一个比较模式)?
    • 当我这样做的时候,我是不是想把它变成一个有监督的学习问题
  • 如何在(另一个)测试集上创建混淆矩阵,以与监督算法进行比较

我想我在这里遗漏了一些概念或术语——我所有的搜索都提出了监督学习技术。如果能指出正确的方向,我们将不胜感激。我现有的代码如下:

P = load('-ascii', 'pattern');
T = load('-ascii', 'target');
% data needs to be translated
P = P';
T = T';
T = T(find(sum(T')), :);
mynet = selforgmap([10 10]);
mynet.trainparam.epochs = 5000;
mynet = train(mynet, P);

P = load('-ascii', 'testpattern');
T = load('-ascii', 'testtarget');
P = P';
T = T';
T = T(find(sum(T')), :);
Y = sim(mynet,P);
Z = compet(Y);
% this gives me a confusion matrix for supervised techniques:
C = T*Z'

由于您没有使用标记数据的任何部分,因此根据定义,您正在应用无监督方法。

"我如何标记集群(假设我有比较模式)?">

您可以尝试对标签集进行不同的扰动,并保持使比较模式的平均误差(或准确性)最小化的扰动。使用集群,您可以按照自己喜欢的任何方式标记集群。把它想象成尝试不同的标签分配,直到最小化指定的性能指标。

"当我这样做的时候,我是不是想把它变成一个有监督的学习问题?">

这取决于情况。如果在集群过程中显式地使用(已知的)数据点,那么这是半监督的。如果没有,您只需使用标签信息来评估和"比较"受监督的方法。这是一种监督形式,但不是基于训练集,而是基于最佳情况下的预期性能(即"代理"为集群指定了正确的标签)。

"如何在(另一个)测试集上创建混淆矩阵,以与监督算法进行比较?">

您需要一种方法将集群转换为带标签的类。对于少数集群(例如C <= 5)),您基本上可以创建C!矩阵,并保留最大限度地减少平均分类误差的矩阵。然而,在您的情况下,使用C = 10,,这显然是不切实际的,而且开销很大!

作为替代方案,您可以使用标记集群(从而获得混淆矩阵)

  • 半监督方法,其中聚类可以被先验地标记,或者由属于已知聚类/类的数据引导通过播种过程
  • 对估计的聚类质心和地面实况标签之间的距离进行排序或查找。这将为每个集群分配排名最接近或最相似的标签

这个视频有什么帮助吗?它并不能回答你的问题,但它表明,甚至选择集群的数量都可能需要人工交互。自动标记簇更加困难。

如果你仔细想想,就不能保证集群会基于所描述的数字来完成。网络可能会根据线条的宽度或字体的平滑度等对数字进行分组。

最新更新