使用ezplot绘制隐函数时遇到的问题

我在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

我制作了一些示例代码,以便重现这个问题:

%创建合成数据集。双变量高斯混合p1 = 0.7;p2 = 1 - p1;%数据点数量N = 50;%均值mu1 = [0; 0];mu2 = [2.5; 2.5];%协方差Sigma = eye(2);%损失矩阵L = [0 1; 1 0];%创建数据,2个类别D1 = mvnrnd(mu1, Sigma, round(N*p1));D2 = mvnrnd(mu2, Sigma, round(N*p2));% 使用kNN分类器可视化决策边界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)); %<----- 问题?axis tighttitle(['k = ' num2str(k)]);

我的函数kNNdbEval如下:

function dbEval = kNNdbEval(x,y,X1,X2,k,L);%通过模式识别中的公式2.116计算决策边界%%X1:类别1的数据%X2:类别2的数据%x:要评估点的第一个坐标%y:要评估点的第二个坐标%k:最近邻参数%dbEval=x.^2+y*x+sqrt(x.^2+y.^2);[N1 d] = size(X1);[N2 d] = size(X2);%估计先验概率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搜索组成)在任何点上不一定正好为零,但我有兴趣检测它何时从正值变为负值。关于如何让ezplot达到这个目的,或者通过其他方法,有什么建议吗?

enter image description here


回答:

我找到了使用下载的工具箱的方法,效果很好:http://cmp.felk.cvut.cz/cmp/software/stprtool/dwstprtool.html

如何获得附件中图形的详细步骤可以从包中的pboundary.m文件中了解:enter image description here

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注