使用带隐式函数的ezplot的问题

时间:2011-11-25 16:17:39

标签: matlab machine-learning

我正在尝试在MATLAB中使用贝叶斯分类器时可视化决策边界。为此,我编写了一个隐式函数,它使用训练数据来确定数据点P =(x,y)所属的两个类中的哪一个。这样做是评估功能是积极的还是消极的。决策边界对应于函数为零的点。

但是,当尝试使用此功能(存储在单独的.m文件中)时,ezplot无法绘制任何行,而是发出警告:     警告:轮廓未针对常量ZData进行渲染

In contour>parseargs at 204
  In contour at 72
  In ezplot>ezimplicit at 312
  In ezplot at 155

我已经制作了一些示例代码,以便可以重新创建问题:

%Create synthetic dataset. Bivariate gaussian mixture
p1 = 0.7;
p2 = 1 - p1;

%Number of datapoints
N = 50;

%Means
mu1 = [0; 0];
mu2 = [2.5; 2.5];

%Covariance
Sigma = eye(2);

%Loss matrix
L = [0 1; 1 0];

%Create data, 2 classes
D1 = mvnrnd(mu1, Sigma, round(N*p1));
D2 = mvnrnd(mu2, Sigma, round(N*p2));

% Visualize decision boundary using kNN classifier
f2=figure(2);
plot(D1(:,1),D1(:,2),'b.',D2(:,1),D2(:,2),'r.');
hold on;

k=5;
ezp=ezplot(@(x,y) kNNdbEval(x,y,D1,D2,k,L)); %<----- Problem?
axis tight
title(['k = ' num2str(k)]);

我的函数kNNdbEval是:

function dbEval = kNNdbEval(x,y,X1,X2,k,L);
%Calculates decision boundary by eg. 2.116 in Pattern Recognition
%
%X1:Data from class 1
%X2:Data from class 2
%x:1. coordinate of point to evaluate
%y:2. coordinate of point to evaluate
%k:nearest neighbor parameters

%dbEval=x.^2+y*x+sqrt(x.^2+y.^2);

[N1 d] = size(X1);
[N2 d] = size(X2);

%Estimate priors
N = N1+N2;
p1 = N1/N;
p2 = N2/N;

[~, d1] = knnsearch(X1,[x y],'k',k);
d1 = d1(k);

[~, d2] = knnsearch(X2,[x y],'k',k);
d2=d2(k);

dbEval = (N2*(1/(d2)^d))/(N1*(1/(d1)^d)) ...
    -((p2*(L(2,1)-L(2,2)))/(p1*(L(1,2)-L(1,1)))); 

我相信我的分类器运行正常,因为我可以通过评估点所在的平面中的许多点并绘制kNNdbEval接近零的图像来破解决策边界的近似值。见附图。

我怀疑这个功能(由两个knn-searching组成)在任何时候都不一定完全为零,但我有兴趣检测它何时从正变为负。是否有任何想法让ezplot为此工作,或通过其他方法?

enter image description here

1 个答案:

答案 0 :(得分:1)

我想出了如何使用下载的工具箱来完成它,该工具箱运行得非常好: http://cmp.felk.cvut.cz/cmp/software/stprtool/dwstprtool.html

可以从包中的pboundary.m了解如何继续获取附图的详细信息: enter image description here