我们如何在数据集上使用无监督学习技术,然后标记集群?

时间:2012-10-09 03:46:22

标签: machine-learning neural-network matlab unsupervised-learning

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

我需要使用Matlab中的神经网络工具箱测试监督算法旁边的无监督算法。数据集是UCI Artificial Characters Database。问题是,我有一个关于监督算法的好教程,并且在没有监督的情况下被抛弃了。

所以我知道如何使用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'

2 个答案:

答案 0 :(得分:7)

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

  

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

您可以尝试不同的标签集扰动,并保持标准集最小化比较模式的平均误差(或精度)。通过群集,您可以以您喜欢的任何方式标记群集。您可以将其视为尝试不同的标签分配,直到最小化指定的性能指标。

  

“当我这样做时,我是否试图将此转化为有监督的学习问题?”

这取决于。如果在聚类过程中明确使用(已知)数据点,则这是半监督的。如果没有,您只需使用标签信息来评估并与监督方法进行“比较”。它是一种监督形式,但不是基于训练集,而是基于最佳情况预期性能(即“代理人”指定群集的正确标签)。

  

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

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

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

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

答案 1 :(得分:1)

this video可以提供任何帮助吗?它没有回答您的问题,但它表明甚至可能需要人工交互来选择多个聚类。自动标记集群甚至更难。

如果您考虑一下,则无法保证将根据所描述的数字进行群集。网络可能会根据行的宽度或字体的平滑等对数字进行分组。