【问题标题】:How do I classify data points without label information?如何对没有标签信息的数据点进行分类?
【发布时间】:2015-10-21 00:07:51
【问题描述】:

Based on the previous question from here

我还有一个问题。分类准确率?

【问题讨论】:

  • CD 矩阵应该由来自矩阵 AB 的元素组成,我假设。否则,将没有用于对其进行分类的信息。
  • 如果不知道CD的标签信息是什么,就无法确定分类准确率。在我回答您的问题之前,请验证是否真的想找到分类准确度,因为如果您不知道标签先验,则无法找到。
  • @angela baby 最好在你的代码中提供一个简单的例子。

标签: matlab grouping classification data-analysis


【解决方案1】:

我将首先解决您的最后一点,以免妨碍它。如果您不知道分类标签是从什么开始的,那么就无法评估分类准确性。你怎么知道正确的标签是否被分配给CD中的点如果你不知道它是从什么标签开始?在这种情况下,我们将不得不放弃它。

但是,您可以做的是计算矩阵 CD 中被分类为 AB 的值的百分比,以了解它们两者中的样本分布情况。具体来说,如果例如在矩阵C 中,大多数样本被分类为属于矩阵A 定义的组,那么这可能很好地表明C 在分布中非常类似于A .

无论如何,我可以建议您分类CD 中的哪些点属于AB 是使用k-nearest neighbours algorithm。具体来说,您有一堆源数据点,即属于矩阵AB 的源数据点,其中AB 有自己的标签。在您的情况下,A 中的样本被分配标签 1,B 中的样本被分配标签 -1。要确定一个未知点属于某个组的位置,您可以简单地使用AB 中的所有值在特征空间中找到该点之间的距离。 AB 中与未知点最接近的任何点,然后该点属于源点中的任何组,这就是您将应用于此未知点的组。

因此,只需将CD 连接成一个N x 1000 矩阵,将k-最近邻应用到另一个带有AB 的连接矩阵,并找出它最近的点在这个其他级联矩阵中。然后,读出标签是什么,这会给你未知点的标签可能是什么。

在 MATLAB 中,使用统计工具箱中的 knnsearch 函数。不过,我鼓励你看看我之前关于解释k-最近邻算法的帖子:Finding K-nearest neighbors and its implementation

无论如何,假设 ABCD 已定义,您将如何应用我上面所说的内容:

labels = [ones(size(A,1),1); -ones(size(B,1),1)]; %// Create labels for A and B

%// Create source and query points
sourcePoints = [A; B];
queryPoints = [C; D];

%// Perform knnsearch
IDX = knnsearch(sourcePoints, queryPoints);

%// Extract out the groups per point
groups = labels(IDX);

groups 将包含与queryPoints 提供的每个点相关联的标签。 knnsearch 返回sourcePoints 中与查询点最匹配的源点的 位置。因此,输出的每个值都会告诉您源点矩阵中的哪个点与该特定查询点最匹配。最终,这会返回标签数组中我们需要的位置,以确定实际标签是什么。

因此,如果您想查看为C 中的点分配了哪些标签,您可以这样做:

labelsC = groups(1:size(C,1));
labelsD = groups(size(C,1)+1:end);

因此,在labelsClabelsD 中,它们包含为两个矩阵中的每个未知点分配的标签。任何值为 1 表示特定点类似于矩阵 A 中的点。同样,任何值为 -1 的值都意味着特定点类似于矩阵 B 中的点。

如果您想将所有这些都绘制在一起,只需将您在上一个问题中所做的与您在此问题中的新数据结合起来:

%// Code as before
[coeffA, scoreA] = pca(A);
[coeffB, scoreB] = pca(B);
numDimensions = 2;
scoreAred = scoreA(:,1:numDimensions);
scoreBred = scoreB(:,1:numDimensions);

%// New - Perform dimensionality reduction on C and D
[coeffC, scoreC] = pca(C);
[coeffD, scoreD] = pca(D);
scoreCred = scoreC(:,1:numDimensions);
scoreDred = scoreD(:,1:numDimensions);


%// Plot the data
plot(scoreAred(:,1), scoreAred(:,2), 'rx', scoreBred(:,1), scoreBred(:,2), 'bo');
hold on;
plot(scoreCred(labelsC == 1,1), scoreCred(labelsC == 1,2), 'gx',  ...
     scoreCred(labelsC == -1,1), scoreCred(labelsC == -1,2), 'mo'); 
plot(scoreDred(labelsD == 1,1), scoreDred(labelsD == 1,2), 'kx',  ...
     scoreDred(labelsD == -1,1), scoreDred(labelsD == -1,2), 'co');

以上是二维的情况。我们绘制了AB,它们的尺寸减小到2。类似地,我们将PCA 应用于CD,然后将所有内容绘制在一起。第一行通常绘制AB。接下来,我们必须使用hold on;,以便我们可以多次调用plot 并将结果附加到同一个图形。我们必须四次调用plot 来说明四种不同的组合:

  • 矩阵C 具有来自A 的标签
  • 矩阵C 具有来自B 的标签
  • 矩阵D 具有来自A 的标签
  • 矩阵D 具有来自B 的标签

每个案例我都放置了不同的颜色,但使用相同的标记来表示每个点属于哪个类:x 用于组Ao 用于组B

我将把它扩展到三个维度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2019-08-29
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多