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

Posted

技术标签:

【中文标题】我们如何在数据集上使用无监督学习技术,然后标记集群?【英文标题】:How can we use unsupervised learning techniques on a data-set, and then label the clusters? 【发布时间】:2012-09-29 08:12:52 【问题描述】:

首先,这肯定是功课(所以请不要提供完整的代码示例)。那就是……

我需要使用 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'

【问题讨论】:

【参考方案1】:

this video 有什么帮助吗?它没有回答您的问题,但它表明甚至可能需要人工交互才能选择集群数量。自动标记集群更加困难。

如果您考虑一下,并不能保证会根据描述的数字进行聚类。网络可能会根据线的宽度或字体的平滑度等对数字进行分组。

【讨论】:

视频好像不见了。【参考方案2】:

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

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

您可以尝试对标签集进行不同的扰动,并将比较模式的平均误差(或准确度)降至最低。使用集群,您可以以任何您喜欢的方式标记集群。可以将其想象为尝试不同的标签分配,直到您最小化指定的性能指标。

“当我这样做时,我是否试图将其转变为监督学习问题?”

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

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

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

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

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

【讨论】:

以上是关于我们如何在数据集上使用无监督学习技术,然后标记集群?的主要内容,如果未能解决你的问题,请参考以下文章

K-Means算法:基于聚类的无监督机器学习算法

无监督学习

无监督学习和监督学习的区别

无监督学习——聚类算法

Machine Learning——Unsupervised Learning(机器学习之非监督学习)

监督学习、无监督学习、回归