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

首先,这无疑是一项作业(所以请不要提供完整的代码样本)。不过…

我需要在Matlab的神经网络工具箱中测试一个无监督算法和一个有监督算法。数据集是UCI人工字符数据库。问题在于,我已经接受了有监督算法的良好教程,但在无监督算法上却被放任自流。

所以我知道如何使用selforgmap创建一个自组织映射,然后使用train(net, trainingSet)对其进行训练。我不明白接下来该做什么。我知道它已经将我提供的数据聚类成(希望是)10个聚类(每个字母一个)。

那么有两个问题:

  • 如何标记这些聚类(假设我有一个比较模式)?
    • 这样做时,我是否试图将其转变为一个有监督的学习问题?
  • 如何在(另一个)测试集上创建一个混淆矩阵以与有监督算法进行比较?

我觉得我在这里缺少一些概念上的或术语上的东西——我所有的搜索结果都是有监督学习技术。能指引正确的方向将不胜感激。我现有的代码如下:

P = load('-ascii', 'pattern');T = load('-ascii', 'target');% data needs to be translatedP = 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,这显然是不切实际的,并且会造成巨大的开销!

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

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

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注