Matlab KNNC分类共识

时间:2015-05-31 16:36:45

标签: matlab machine-learning knn consensus

我使用knnclassify共识。我尝试使用共识在类标签中找到缺失的值。

这是我的代码;

Rb = randperm(120);
Rm = randperm(120);

labeled = labeled(Rb,:);
unlabeled = unlabeled(Rm,:);

cnt = 0;
sonuc = zeros(120,1);

for i=1:120
    pred=knnclassify(unlabeled,labeled,labeledClass,10,'correlation','consensus');
    if pred>=1
        cnt=cnt+1;
        sonuc(i)= pred;
    end
end

cnt;

这是我的工作区;

我的工作区良性和恶性我的班级价值观   http://imgbox.com/EmWvlqnv

代码未返回错误但是pred在所有行中返回NaN并返回一个警告;

Warning: Some points in data have small relative standard deviations,
making them effectively constant. Correlation metric may not be appropriate
for these points. 
> In pdist2 at 304
  In ExhaustiveSearcher.knnsearch at 207
  In knnsearch at 142
  In knnclassify at 162
  In CancerKNNConsensus at 11 

我尝试欧几里德,余弦,城市街区和相关。 如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

错误消息告诉您某些数据具有小std和常量,这会在使用相关距离时导致一些问题。

matlab中的相关距离将首先减去数据的平均值。因此,对于常数数据向量,减去平均值将导致零向量,并且未定义常量向量与任何其他数据向量的相关性。

我建议解决此问题如下:

  1. 根据std识别这些数据点,并在使用knn clusfier之前用小std删除这些数据;
  2. 规范化您的数据也可能有所帮助;
  3. 尝试其他距离指标。
  4. 希望这有用。