1

我使用 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 

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

4

1 回答 1

1

错误消息告诉您,您的某些数据的标准差和常数较小,这在使用相关距离时会导致一些问题。

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

我解决这个问题的建议如下:

  1. 根据std识别这些数据点,在使用knn clusfier之前用小的std去掉这些数据;
  2. 标准化您的数据也可能有所帮助;
  3. 尝试其他距离度量。

希望这会有所帮助。

于 2015-05-31T18:33:43.480 回答