You are on page 1of 4

‫گروه مهندیس پزشیک دانشگاه علم و صنعت تهران‬

‫‪@IUST_BIOELECTERIC‬‬

‫‪@IUST_Bioelecteric‬‬ ‫ما را در تلگرام دنبال کنید‬


‫‪iust_bioelecteric‬‬ ‫ما را در اینستاگرام دنبال کنید‬

‫کالسبندی‬

‫‪ -‬الگوریتم ‪:knn‬‬
‫در این قسمت قصد داریم الگوریتم کالس بندی ‪ knn‬را آموزش دهیم‪.‬‬
‫این الگوریتم‪ ،‬کالسبندی را براساس رایگیری بین نزدیکترین نمونه ها در داده های آموزش‬
‫انجام می دهد‪.‬‬
‫الگوریتم‪:‬‬
‫داده ها را به دو قسمت آموزش و تست تقسیم می کنیم‪.‬‬
‫داده های تست را یک به یک بررسی می کنیم‪.‬‬
‫فاصله هر نمونه تست را با همه داده های آموزش پیدا می کنیم‪.‬‬
‫سپس ‪ k‬تا نزدیکترین نمونه آموزش به نمونه تست را انتخاب می کنیم و رای گیری میکنیم‪.‬‬

‫داده تست به کالسی تعلق دارد که بیشترین نمونه را داشته باشد‪.‬‬


‫در زیر سه نمونه از میار فاصله آورده شده است‪:‬‬
‫گروه مهندیس پزشیک دانشگاه علم و صنعت تهران‬
‫‪@IUST_BIOELECTERIC‬‬

‫معیار فاصله براساس داده ها تعیین می شود‪.‬‬


‫مثال اگر داده های ما هر کدام یک منحنی باشند و بخواهیم این منحنی ها را براساس شکل‬
‫منحنی ها در یک کالس قرار بدهیم(دامنه اگر مهم نباشد) در این حالت اگر معیار ما‬
‫کورولیشن باشد نتیجه بهتری خواهیم داشت‪.‬‬
‫انتخاب تعداد نزدیکترین نمونه آموزش بسیار در نتیجه کالس بندی تاثیر خواهد داشت‪.‬‬
‫برای مثال در تصویر زیر ‪ k‬نتیجه کالسبندی را تغییر میدهد‪ .‬مثال اگر ‪( k‬تعداد نمونه ی‬
‫همسایه) ‪ 3‬باشد کالس نمونه تست یک تعیین می شود و اگر مقدار ‪ 5 k‬باشد کالس نمونه‬
‫تست ‪ 2‬خواهد بود!‬

‫در این مثال معیار فاصله‪ ،‬فاصله اقلیدسی است‪.‬‬


‫گروه مهندیس پزشیک دانشگاه علم و صنعت تهران‬
@IUST_BIOELECTERIC

:‫کد متلب‬
%% @IUST_BIOELECTERIC
clc;
clear;
close all;
:‫ تولید داده تست و آموزش‬:‫مرحله اول‬
%% data generating
c1=randn(2,200)*0.5; % .‫ می باشد‬0.5 ‫ و واریانس‬0 ‫میانگین‬
c2=randn(2,200)*0.5+1.5; %.‫ می باشد‬0.5 ‫ و واریانس‬1.5 ‫میانگین‬
X=[c1,c2];
train=X(1:2,[1:100 201:300]);‫نمونه های آموزش‬
test=X(1:2,[101:200 301:400]);‫نمونه های تست‬
%% ploting
plot([train(1,1:100)
,test(1,1:100)],[train(2,1:100),test(2,1:100)],'r*','linewidth',1);
hold on
plot([train(1,101:200)
,test(1,101:200)],[train(2,101:200),test(2,101:200)],'b*','linewidth',1);
axis([-3 3 -4 4])
lable=[ones(1,100),-ones(1,100)]; ‫تعیین لیبل داده های‬

‫ کالسبندی نمونه های تست براساس نمونه های آموزش‬:‫مرحله دوم‬


for i=1:200
a=test(:,i);
c=repmat(a,1,size(train,2));
dis=sqrt(sum(c-train).^2);
[m,idxn]=sort(dis);
o1=idxn(1:6); .‫ همسایه نزدیک استفاده می کنیم‬6 ‫از‬
n1=sum(lable(o1)==1);
n2=sum(lable(o1)==-1);
‫گروه مهندیس پزشیک دانشگاه علم و صنعت تهران‬
‫‪@IUST_BIOELECTERIC‬‬

‫‪if n1>=n2‬‬
‫;‪class(i)=1‬‬
‫‪else‬‬
‫;‪class(i)=-1‬‬
‫‪end‬‬
‫;‪n1=0‬‬
‫;‪n2=0‬‬
‫‪end‬‬
‫;)‪n1=find(class==1‬‬
‫محاسبه میزان خطای کالسبندی در داده های تست ;)‪e1=(sum(class(1:100)==-1)/100‬‬
‫مربوط به کالس اول‬
‫‪figure‬‬
‫;)‪plot(test(1,n1),test(2,n1),'r*','linewidth',1‬‬
‫‪hold on‬‬
‫;)‪n2=find(class==-1‬‬
‫محاسبه میزان خطای کالسبندی در داده های تست ;)‪e2=(sum(class(101:200)==1)/100‬‬
‫مربوط به کالس دو‬
‫;)‪plot(test(1,n2),test(2,n2),'b*','linewidth',1‬‬
‫)]‪axis([-3 3 -4 4‬‬
‫رابطه ی میزان دقت کالسبندی ‪perf=(1-(e1+e2))*100;% >>>==:‬‬
‫)])‪title(['perfomance: ', num2str(perf‬‬

‫نتیجه کالس بندی‪:‬‬

‫موفق باشید‪...‬‬

‫محمد نوری زاده چرلو‬

You might also like