Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 隐函数ezplot的使用问题_Matlab_Machine Learning - Fatal编程技术网

Matlab 隐函数ezplot的使用问题

Matlab 隐函数ezplot的使用问题,matlab,machine-learning,Matlab,Machine Learning,我试图在MATLAB中使用贝叶斯分类器时可视化决策边界。为此,我编写了一个隐式函数,它使用训练数据来确定数据点P=(x,y)属于两个类中的哪一个。这是通过评估函数是正还是负来完成的。决策边界对应于函数为零的点 但是,当尝试使用此函数(存储在单独的.m文件中)时,ezplot无法绘制任何线条,而是发出警告: 警告:未为常量ZData渲染轮廓 我制作了一些示例代码,以便可以重新创建问题: %Create synthetic dataset. Bivariate gaussian mixture p1

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

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

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

%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接近于零的图像,从而得出决策边界的近似值。请参阅附件中的图像

我的怀疑是,函数(由两个knn搜索组成)在任何一点上都不一定精确为零,但我感兴趣的是检测它何时从正反转为负。有没有想法让ezplot达到这个目的,或者通过其他方法


我用一个下载的工具箱解决了这个问题,它运行得非常好:

有关如何获取附图的详细信息,请参见文件包中的pboundary.m:

我用一个下载的工具箱解决了这个问题,它运行得非常好:

有关如何获取附图的详细信息,请参见文件包中的pboundary.m:

%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)]);
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))));