簡體   English   中英

如何使用Matlab Contourf繪制二維決策邊界

[英]How to use matlab contourf to draw two-dimensional decision boundary

我完成了SVM培訓,並得到了X,Y之類的數據。X是僅具有2維的特征矩陣,Y是分類標簽。 因為數據只有二維,所以我想畫一個決策邊界來顯示支持向量的表面。

我在Matlab中使用contouf來完成技巧,但實際上很難理解如何使用該函數。

我這樣寫:

#1 try:    
contourf(X);

#2 try:
contourf([X(:,1) X(:,2) Y]);

#3 try:
Z(:,:,1)=X(Y==1,:);
Z(:,:,2)=X(Y==2,:);
contourf(Z);

所有這些事情都不正確。 我檢查了Matlab幫助文件,其中大多數文件都將Z作為函數,所以我真的不知道如何形成正確的Z矩陣。

如果您使用的是來自Bioinformatics Toolbox的svmtrainsvmclassify命令,則可以僅使用附加的輸入參數(...'showplot', true) ,它將顯示一個散點圖,並帶有決策邊界和突出顯示的支持向量。

如果您使用自己的SVM或第三方工具(例如libSVM),則可能需要做的是:

  1. 使用meshgrid命令在2D輸入要素空間中創建點網格
  2. 使用訓練有素的SVM對這些點進行分類
  3. 使用contourf繪制點和分類的網格。

例如,在某種MATLAB但偽代碼中,假設您的輸入功能稱為X1和X2:

numPtsInGrid = 100;
x1Range = linspace(x1lower, x1upper, numPtsInGrid);
x2Range = linspace(x2lower, x2upper, numPtsInGrid);
[X1, X2] = meshgrid(x1Range, x2Range);
Z = classifyWithMySVMSomehow([X1(:), X2(:)]);
contourf(X1(:), X2(:), Z(:))

希望能有所幫助。

我知道已經有一段時間了,但是我會嘗試一下,以防其他人提出該問題。

假設我們有2D訓練集以訓練SVM模型,換句話說,特征空間是2D空間。 我們知道內核SVM模型會導致以下形式的評分(或決策)函數:

f(x)=和i = 1至Na i y i k( xx i ))+ b

其中N是支持向量的數量, x i是第i個支持向量, a i是估計的拉格朗日乘數, y i是相關的類別標簽。 決策函數的值(分數)以方式描述觀測值x距決策邊界的距離。

現在假設對於2D特征空間中的每個點(X,Y),我們都可以找到決策函數的相應得分。 我們可以在3D歐式空間中繪制結果,其中X對應於第一特征向量f 1的值,Y對應於第二特征f 2的值,Z對應於每個點(X,Y)的決策函數的返回。 此3D圖形與Z = 0平面的交點為我們提供了進入二維特征空間的決策邊界。 換句話說,假設決策邊界是由得分等於0的(X,Y)點構成的。看起來邏輯上正確嗎?

現在,在MATLAB中,您可以輕松地做到這一點,方法是首先在X,Y空間中創建一個網格:

d = 0.02;
[x1Grid,x2Grid] = meshgrid(minimum_X:d:maximum_X,minimum_Y:d:maximum_Y);

d是根據所需的網格分辨率選擇的。

然后,對於經過訓練的模型SVMModel,找到每個網格點的分數:

xGrid = [x1Grid(:),x2Grid(:)];
[~,scores] = predict(SVMModel,xGrid);

最后繪制決策邊界

figure;
contour(x1Grid,x2Grid,reshape(scores(:,2),size(x1Grid)),[0 0],'k');

輪廓線為我們提供了2D圖,其中有關第三維的信息在2D平面中以實線表示。 這些線表示等響應值,即具有相同Z值的(X,Y)點。 在我們的場合,輪廓為我們提供了決策邊界。

希望我能使所有這些變得更加清楚。 您可以在以下鏈接中找到非常有用的信息和示例:

MATLAB的例子

決策功能在3D空間中的表示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM