سه شنبه 21 مرداد 1399 | Tuesday 11 th of August 2020 صفحه اصلی گروه الکترونیکی کامپیوتر
پیوست

   در این فصل قصد دارم مراحل پیاده ساری پروژه ام را از ابتدا تا انتها توضیح دهم .

پس از مطالعات  مقالات متعددی در زمینه  متد انتخاب ویژگی ، متد ERGSرا برگزیدم . که کد ان را به قرار زیر نوشتم و توسط نرم افزار متلب اجرا نمودم ، در اینجا هر یک از مراحل را به تفکیک برای مجموعه اموزش توضیح می دهم . مراحل برای مجموعه تست هم به همین صورت است با این تفاوت که تعداد نمونه ها در مجموعه  اموزش 38 و در مجموعه تست 35 تا می باشد که از این 35 نمونه ، 21 تای ان جزء کلاس  ALL  و 14 تای ان جزء کلاس AMLمی باشد .

 مرحله میانگین گیری

for i=3:7131

sum=0        

for k=1:27

sum= sum+train(i,k)

end

miangin(i,1)=sum/27

sum=0

for k=28:38

sum= sum+train(i,k)

end

miangin(i,2)=sum/11

end

 محاسبه  انحراف معیار

for i=3:7131

sum=0

for k=1:27

sum=sum+power(train(i,k) -miangin(i,1),2)

end

mystd(i,1)=sqrt(sum/27)

sum=0

for k=28:38

sum=sum+power(train(i,k) -miangin(i,2),2)

end

mystd(i,2)=sqrt(sum/11)

end

 محدوده موثر

for i=3:7131

   for j=1:2

NR(i,j)=miangin(i,j)- (1.732 * (1-p(j))*mystd(i,j ))

  ))PR(i,j)=miangin(i,j)+ (1.732 * (1-p(j))*mystd(i,j

   end

MaxPR(i)=max(PR(i))

MinNR(i)=min(NR(i))

end

 ناحیه اشتراک  و ضریب ناحیه

j=1

k=2

for i=3:7131

   ))if (PR(i,j)>NR(i,k

      )fi(j,k)=PR(i,j)-NR(i,k

     else

       fi(j,k)=0

    end

   )OA(i)=fi(j,k

    AC(i)= OA(i)/MaxPR(i)-MinNR(i)

end

 بیشترین مقدار ضریب ناحیه

MaxAc=max(AC)

 ضریب ناحیه استاندارد و وزن

for i=3:7131

    NAC(i)=AC(i)/MaxAC

   )W(i)=1-NAC(i

End

 مرتب سازی نزولی  وزن ها

WT=W '

SW=sort(WT,'descend')

 به دست اوردن شماره ردیف ژن

for j=1:80

        for i=3:7131

            ))if (SW(j)==WT(i

                iset(j)= i

              end

        end

 end

پس از اجرای متد انتخاب ویژگی و انتخاب 80  عدد از مهم ترین ویژگیها به مرحله دسته بندی با SVM  می رسیم که ابتدا باید تعدادی از داده ها را  train  کنیم و تعدادی را برای تست باقی بگداریم .

به این منظور از دو تابع  متلب استفاده می کنیم که فرمت کلی انها به قرار زیر می باشد :

SVMStruct = svmtrain(..., 'Method', MethodValue, 'Kernel_Function', Kernel_FunctionValue)

Group = svmclassify(SVMStruct, Sample)

در اینجا نحوه استفاده از این توابع را در پروژه خودم بیان می نمایم .

load input.mat

load output.mat

load xtest.mat

load ytest.mat

percent=0;

while percent<98

nt=size(find(ytest==1),1);

traindata=input;

trainoutput=output;

nn=floor(nt/2);

f = ceil(nt.*rand(nn,1));

        traindata=[traindata;xtest(f,:)];

        trainoutput=[trainoutput;ytest(f,:)];

nt2=size(find(ytest),1)-nt;

nn=floor(nt2/2);

f = ceil(nt2.*rand(nn,1));

        traindata=[traindata;xtest(f+nt,:)];

        trainoutput=[trainoutput;ytest(f+nt,:)];

svmStruct = svmtrain(traindata,trainoutput,'METHOD','smo/qp/ls','Kernel_Function', 'linear/rbf/polynomial');

ypred = svmclassify(svmStruct,xtest);

 end

با استفاده از هسته  linear   و همه متد های smo، ls، qp  به دقت 94.28    رسیدم  و با استفاده از هسته  polynomial   و متدهای مذکور به دقت 97.14 رسیدم که این تابع به  این صورت می باشد :

svmStruct = svmtrain(traindata,trainoutput,'METHOD','ls','Kernel_Function', 'polynomial');

اما  تابع  svmclassify  در هر دو حالت به یک شکل می باشد .

قطعه کد زیر نیز دقت دسته بندی را به دست می اورد :

count=0;

for i=1:35

    if ypred(i)==ytest(i)

        count=count+1;

    end

end

percent=count*100/35

Compatability by:
آخرین به روز رسانی سایت: سه شنبه, 22 اسفند 1391 - 00:26