您好,登錄后才能下訂單哦!
今天小編給大家分享一下matlab如何實現二元支持向量機查找多類邊界的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
%% 加載鳶尾花數據集
% 使用花瓣的長度和寬度
load fisheriris
X = meas(:,3:4);
Y = species;
%% 數據的散點圖
figure
gscatter(X(:,1),X(:,2),Y);
h = gca;
lims = [h.XLim h.YLim];
title('{\bf Scatter Diagram of Iris Measurements}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend('Location','Northwest');
% 有三個類,其中之一是線性可分離的
%%
% 對每一類進行一下操作:
% 創建一個邏輯向量表示是否為這個類的一員
% 使用處理好的數據和邏輯向量訓練SVM分類器
% 將分類器存儲在cell數組中
% 預先定義類別順序是比較好的做法
SVMModels = cell(3,1);
classes = unique(Y);
rng(1);
for j = 1:numel(classes)
indx = strcmp(Y,classes(j));
% 為每一類別創建二元分類器
SVMModels{j} = fitcsvm(X,indx,'ClassNames',[false true],'Standardize',true,...
'KernelFunction','rbf','BoxConstraint',1);
end
%%
% |SVMModels|是一個3X1的cell數組
% 每個cell是一個分類器
% 每個分類器的正值就是setosa,versicolor和virginica
%% 將訓練數據的分布坐標劃分為網格,并視為新的觀測
% 使用每個分類器估計新觀測的得分
d = 0.02;
[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
min(X(:,2)):d:max(X(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];
N = size(xGrid,1);
Scores = zeros(N,numel(classes));
for j = 1:numel(classes)
[~,score] = predict(SVMModels{j},xGrid);
Scores(:,j) = score(:,2);
% 第二列包含正值類別得分
end
%% 每一行的得分都有三個,最大的就是這一行對應的類別
[~,maxScore] = max(Scores,[],2);
%% 將每一個類別對應的網格在圖中顯示出來
figure
h(1:3) = gscatter(xGrid(:,1),xGrid(:,2),maxScore,...
[0.1 0.5 0.5; 0.5 0.1 0.5; 0.5 0.5 0.1]);
hold on
h(4:6) = gscatter(X(:,1),X(:,2),Y);
title('{\bf Iris Classification Regions}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend(h,{'setosa region','versicolor region','virginica region',...
'observed setosa','observed versicolor','observed virginica'},...
'Location','Northwest');
axis tight
hold off
以上就是“matlab如何實現二元支持向量機查找多類邊界”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。