多類線性分類器算法原理及代碼實現 MATLAB

多類線性分類器算法原理及代碼實現 MATLAB

一、算法原理

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
下面舉例說明為何藍圈部分在case2中是確定的而在case1中不確定:
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

二、代碼實現

1、HK函數

function [] = HK(w1_data,w2_data)
%w1_data為第一類數據集  w2_data為第二類數據集
%此函數的作用為用HK算法對輸入的數據集w1_data,w2_data做二分類,并畫出分界面lr=0.5 ;%學習率
MaxIter = ceil(20000/lr);%最大迭代次數
Eps = 1e-5; %精度%% 增廣化
w1_data=[w1_data';ones(1,size(w1_data,1))]';
w2_data=[w2_data';ones(1,size(w2_data,1))]';Y=[w1_data;-w2_data];%待分類數據,w1在決策平面的正側
[xmin,~]=min(Y,[],1); %求出橫坐標最小值
[xmax,~]=max(Y,[],1); %求出橫坐標最大值
b=rand(size(Y,1),1);
Y_flag=(Y'*Y)\Y';
% Y_flag=pinv(Y);N=length(b);
C=0;%迭代次數
while(C < MaxIter)a=Y_flag*b;e=Y*a-b;zeronum = sum(e<Eps & e>-Eps);nenum = sum(e<0);if  zeronum==N %all is 0break;elseif nenum ==Nbreak;enddelta=lr*(e+abs(e));b = b + delta; %更新bC=C+1; %迭代次數+1
end
if C ==MaxIterif sum(e>-Eps)==N % all is larger than or equal to 0.fprintf('It has cost all iterartions(%d), and all elements are larger than or equal to 0. The sample is linear to be classified!\n',MaxIter);elseif sum(e<=Eps) ==N% all is less than or equal to 0.fprintf('It has cost all iterartions(%d), and all elements are less than or equal to 0. The sample is non-linear to be classified!\n',MaxIter);elsefprintf('It has cost all iterartions(%d), the sample is uncertain to be classified!\n',MaxIter);endend
end%% 畫出分界面
x1=(xmin-8:0.1:xmax+20);
if abs(a(2))<1e-7x1=-a(3)/a(1);x2=(-1:0.1:1);x1=ones(size(x2))*x1;
elsex2=(a(1)*x1+a(3))/(-a(2));
end
plot(x1,x2,'LineWidth',1);
hold on;

2、case1

clc;
close all;
clear;
%% 生成數據
rng(2020);   %指定一個種子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一個300*2的矩陣,每一列的數據分別以03為均值,標準差都為0.5rng(2021);  %指定一個種子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一個300*2的矩陣,每一列的數據分別以67為均值,標準差都為0.5rng(2022);  %指定一個種子
mu3 = [5 -5];
sigma3 = [0.5 0; 0 0.5];
data3 = mvnrnd(mu3,sigma3,300); %生成一個300*2的矩陣,每一列的數據分別以5-5為均值,標準差都為0.5HK(data1,[data3;data2]); %data1為一類,其他所有數據為另一類
HK(data2,[data1;data3]); %data2為一類,其他所有數據為另一類
HK(data3,[data1;data2]); %data3為一類,其他所有數據為另一類%% 畫出點集
plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(data3(:,1),data3(:,2),'m^');hold on;

實驗結果:

在這里插入圖片描述

3、case2

clc;
close all;
clear;
%% 生成數據
rng(2020);   %指定一個種子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一個300*2的矩陣,每一列的數據分別以03為均值,標準差都為0.5rng(2021);  %指定一個種子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一個300*2的矩陣,每一列的數據分別以67為均值,標準差都為0.5rng(2022);  %指定一個種子
mu3 = [5 -5];
sigma3 = [0.5 0; 0 0.5];
data3 = mvnrnd(mu3,sigma3,300); %生成一個300*2的矩陣,每一列的數據分別以5-5為均值,標準差都為0.5HK(data1,data2); %對data1,data2作二分類
HK(data2,data3); %對data2,data3作二分類
HK(data3,data1); %對data1,data3作二分類%% 畫出點集
plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(data3(:,1),data3(:,2),'m^');hold on;

實驗結果:

在這里插入圖片描述

4、case3

clc;
close all;
clear;%% 生成數據
rng(1800);   %指定一個種子
mu1 = [0 3];
sigma1 = [0.5 0; 0 0.5];
data1 = mvnrnd(mu1,sigma1,300); %生成一個300*2的矩陣,每一列的數據分別以03為均值,標準差都為0.5rng(1900);  %指定一個種子
mu2 = [6 7];
sigma2 = [0.5 0; 0 0.5];
data2 = mvnrnd(mu2,sigma2,300); %生成一個300*2的矩陣,每一列的數據分別以67為均值,標準差都為0.5rng(2022);  %指定一個種子
mu3 = [5 -5];
sigma3 = [0.5 0; 0 0.5];
data3 = mvnrnd(mu3,sigma3,300); %生成一個300*2的矩陣,每一列的數據分別以5-5為均值,標準差都為0.5%% 
Label1=ones(length(data1),1);   %為data1的每個數據生成一個標簽
Label2=ones(length(data2),1)+1; %為data2的每個數據生成一個標簽
Label3=ones(length(data3),1)+2; %為data3的每個數據生成一個標簽
Data=[data1;data2;data3]; %將三個數據集整合起來
Label=[Label1;Label2;Label3]; %將三個標簽集整合起來
[xmin,ymin]=min(Data,[],1); %提取出數據集橫坐標最小值,縱坐標最小值
[xmax,ymax]=max(Data,[],1); %提取出數據集橫坐標最大值,縱坐標最大值
Data=[Data,ones(size(Data,1),1)]; %為每個數據增加一維,增加的一維取值為1%%
[N,M]=size(Data);
A=randn(M,3); %隨機初始化三類的三個權向量 每一列是一個權向量
p=1; %學習率
t=0; %迭代器
MaxInt=1000; %最大迭代次數
while(t<MaxInt)C=0; %分類正確計算器for i=1:Ny=Data(i,:)'; %提取出第i個數據tmp=A'*y; %計算數據在三個判別器中的值[v,ind]=max(tmp); %提取出最大判別器的值和序號if ind==Label(i) % 如果最大判別器就是該類的判別器C=C+1; %該數據正確分類elseA(:,ind)=A(:,ind)-p*y;A(:,Label(i))=A(:,Label(i))+p*y; %套用公式,更新相應的權向量endendt=t+1; %迭代次數+1if C==N %如果樣本全部正確分類,則退出循環break;end
end%% 求交點
A_=A(1:2,:)';
b_=-A(3,:)';
pt=(A_'*A_)\A_'*b_; %求一個向量,令三個判別器的值全為零,該向量就是交點%注意A的每一列是增廣的權向量,真正的權是前兩行,第三行其實是w0%%
w1=A(:,1)-A(:,2);
w2=A(:,1)-A(:,3);
w3=A(:,2)-A(:,3);
X1=xmin-30:0.1:pt(1);
X2=pt(1):0.1:xmax+30;
Y1=(-w1(1)*X2-w1(3))/(w1(2));
Y2=(-w2(1)*X1-w2(3))/(w2(2));
Y3=(-w3(1)*X2-w3(3))/(w3(2));%% 畫出三個數據集的點
plot(data1(:,1),data1(:,2),'r+');hold on;
plot(data2(:,1),data2(:,2),'b*');hold on;
plot(data3(:,1),data3(:,2),'m^');hold on;%% 畫出三個分類平面
plot(X2,Y1,'k-');hold on;
plot(X1,Y2,'k-.');hold on;
plot(X2,Y3,'k--');hold on;%% 畫出交點
plot(pt(1),pt(2),'.','MarkerSize',24);
axis equal;

實驗結果:

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(轉) C#如何使用異步編程

怎么使用異步&#xff0c;就是用委托進行處理&#xff0c;如果委托對象在調用列表中只有一個方法&#xff0c;它就可以異步執行這個方法。委托類有兩個方法&#xff0c;叫做BeginInvoke和EndInvoke&#xff0c;它們是用來異步執行使用。 異步有三種模式 等待模式&#xff0c;在…

javascript 的 ~ 操作符作用

2019獨角獸企業重金招聘Python工程師標準>>> "~" operator in javascript. For anyone else who also didnt know what it does: it converts -1 to 0&#xff0c;可以節省用來比較-1的情況&#xff0c;如 if (~event.origin.indexOf(http://yoursite.com…

駐定相位原理(POSP)以及線性調頻信號的頻譜

最近看論文遇到了駐定相位原理&#xff0c;問老師直接給了我一本書讓我看&#xff0c;看半天只有一段…不是這個方向的&#xff0c;半路出家做畢業設計需要用到這個定理&#xff0c;有錯誤的話請不吝賜教。 一、駐定相位原理 在數字信號處理中&#xff0c;經常需要將一個時域…

vue怎么合并兩個視頻_【軟件分享】視頻分割合并軟件哪款好用呢?怎么剪切合并視頻?...

現在有很多小伙伴都喜歡喜歡自己拍視頻上傳到各大視頻平臺&#xff0c;有時候會遇到關于視頻剪輯方面的難題&#xff0c;比如說&#xff0c;視頻怎么剪切&#xff1f;怎么將兩段小視頻合并成一個呢&#xff1f;這些都是一些比較常常遇到的問題&#xff0c;今天小編就給大家介紹…

怎樣根據字段域查找到其在數據庫中關系與屬性

Infor SyteLine ERP中&#xff0c;很多時候需要做維護&#xff0c;我們需要從打開的window窗口的form中某一個輸入Textbox域或是DropDownList域&#xff0c;去找到它是綁定了數據庫中的哪一張表&#xff0c;哪一個字段的&#xff1f; 其相關的關系或是屬性等。比如下面這個form…

【手勢交互】9. PS Move

索尼研發體感控制技術已有10年&#xff0c;在過去那么多年里。嘗試了3D攝像頭、超聲波和電磁感應等各種技術。最后還是覺得眼下的MOVE所使用的技術最為合適。PS Move是索尼于2010年9月份推出。用來讓PS3主機具備動態感應功能的控制器。他利用動態控制器&#xff08;手柄&#x…

多普勒效應及多普勒頻移的簡單推導

多普勒效應及多普勒頻移的簡單推導 fd≡fR?fT(1)f_d\equiv f_R-f_T \tag{1} fd?≡fR??fT?(1) ??式中&#xff0c;fdf_dfd?表示多普勒頻移&#xff0c;fRf_RfR?表示目標回波的頻率&#xff08;Hz),fTf_TfT?表示發射信號的頻率&#xff08;Hz&#xff09;。 多普勒頻移…

amazons3 檢查連接是否_鋼筋機械連接接頭如何檢查是否合格?抽檢數量、合格率是多少?...

一、鋼筋機械連接介紹1、鋼筋機械連接在連接區段內接頭率的規定(35d)&#xff1a;★接頭宜設置在結構構件中受拉應力較小的部位&#xff0c;當需要在高應力部位設置時&#xff0c;在同一連接區段內Ⅲ接頭的接頭率不應大于25%&#xff0c;Ⅱ接頭率不應大于50%&#xff0c;Ⅰ接頭…

學容器必須懂 bridge 網絡 - 每天5分鐘玩轉 Docker 容器技術(32)

上一節我們討論了 none 和 host 類型的容器網絡&#xff0c;本節學習應用最廣泛也是默認的 bridge 網絡。 Docker 安裝時會創建一個 命名為 docker0 的 linux bridge。如果不指定--network&#xff0c;創建的容器默認都會掛到 docker0 上。 當前 docker0 上沒有任何其他網絡設備…

駐定相位原理(POSP)的簡單應用

在SAR雷達成像中&#xff0c;POSP是相當基礎重要的一個定理&#xff0c;一般在對回波做傅里葉變換時經常用到&#xff0c;一般在論文的開頭就會出現。 ??下面簡單復習一下POSP的步驟&#xff1a; 1&#xff1a;列出傅里葉變換表達式 2&#xff1a;對相位在駐定相位點處泰勒展…

(轉)Unity3DUnity3D在android下調試

轉自&#xff1a;http://blog.csdn.net/zuoyamin/article/details/11827309 一、工具準備 1.JDK——由于android是基于Java平臺開發的&#xff0c;jdk是必須要安裝的。下載地址&#xff1a;http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32…

Windows系統時間同步出錯解決辦法

有時候我們設置本地時間與Internet時間同步時&#xff0c;經常連接服務器time.windows.com超時&#xff0c;導致時間同步失敗&#xff0c;解決辦法如下&#xff1a; 利用快捷鍵"WinR"調出運行框&#xff0c;輸入&#xff1a;w32tm /register按回車&#xff0c;執行完…

vs2019 更新安裝錯誤_本月Windows 10累積更新再出BUG:安裝時跳出錯誤代碼

在本月的補丁星期二活動日中&#xff0c;微軟為所有支持的 Windows 10 系統帶來了新一輪的累積更新。和以往一樣&#xff0c;本次發布的 KB4566782 和 KB4565351 兩個累積更新又出現了新的 BUG。根據用戶反饋&#xff0c;Windows10 Version 2004/1909/1903 功能更新安裝這些累積…

【python】畫一個愛心

python畫愛心 做二級python題目的時候&#xff0c;遇到了一個畫愛心編程題&#xff0c;感覺挺有趣的&#xff0c;把它搬到這里來。 from turtle import * def curvemove():for i in range(200):right(1)forward(1) setup(600,600,400,400) hideturtle() pencolor(black) fill…

上天入海又怎樣?阿里的運動達人紛紛表示不服

6月23日是國際奧林匹克日。奧林匹克精神其實是一個普遍的概念。所有能使人變得更好的原則&#xff0c;都包容它明亮的光環里。2017年1月19日&#xff0c;阿里巴巴和國際奧委會在洛桑共同宣布top合作伙伴計劃&#xff0c;開啟了為期12年的阿里奧運之旅。阿里將給世界帶來“云上的…

VC++中內存對齊

我們經常看到求 sizeof(A) 的值的問題&#xff0c;其中A是一個結構體&#xff0c;類&#xff0c;或者聯合體。 為了優化CPU訪問和優化內存&#xff0c;減少內存碎片&#xff0c;編譯器對內存對齊制定了一些規則。但是&#xff0c;不同的編譯器可能有不同的實現&#xff0c;本文…

iOS:轉載:IOS謂詞--NSPredicate

IOS謂詞--NSPredicate 分類&#xff1a; IOS應用2013-02-19 17:24 6792人閱讀 評論(1) 收藏 舉報Cocoa 提供了NSPredicate 用于指定過濾條件&#xff0c;謂詞是指在計算機中表示計算真假值的函數&#xff0c;它使用起來有點兒像SQL 的查詢條件&#xff0c;主要用于從集合中分揀…

cordova 更改app版本_Cordova打包Android應用流程(MAC)

擴展閱讀基于Cordova批量打場景包(MAC)APP包名稱命名規則1. 安裝cordova打包應用brew install cordova2. 創建cordova項目執行命令 create app com.githen.app 測試app * app 項目的目錄名稱 ( 下面所有目錄均以此目錄為根目錄說明 ) * com.githen.app 項目包名稱 * 測試app 項…

二級Python 第三方庫

?\color{salmon}\clubsuit? 本文總結了二級Python中經常考察的一些第三方庫的功能和分類&#xff0c;做到一半發現39&#xff0c;40知識點基本固定&#xff0c;突發奇想做個總結&#xff0c;有缺的話應該是前幾套 功能用途第三方庫數據可視化mayavi TVTK matplotlib vispy g…

深入理解Elasticsearch(原書第2版)》一1.2 何為Elasticsearch

本節書摘來華章計算機《深入理解Elasticsearch&#xff08;原書第2版&#xff09;》一書中的第1章 &#xff0c;第1.2節&#xff0c;[美]拉斐爾酷奇&#xff08;Rafal Ku&#xff09; 馬雷克羅戈任斯基&#xff08;Marek Rogoziski&#xff09;著 張世武 余洪淼 商旦 譯 更…