# مباحث متفرقه برنامه نویسی > برنامه نویسی Matlab >  همپوشان

## sama.66

سلام
چجوری میتونم یک پلاک (پلاک خودرو که به صورت مستطیله) روبه 3مربع همپوشان تقسیم کنم

----------


## sama.66

میشه راهنمایی کنید ممنون میشم Capture.PNG

----------


## sama.66

لطفا یکی راهنمایی کنه!!!!!!!!! :ناراحت:  :ناراحت: 
میخوام ازیک پلاک مستطیل شکل ،3تامربع همپوشان درست کنم طبق شکلی که فرستادم،بعدهیستوگرام 59نقطه ای و241نقطه ای بگیره،یعنی 3تامربع که هرکدام59+241نقطه داره

----------


## rahnema1

اگه pelak تصویر پلاک باشه و مربعها هم با m1,m2,m3 مشخص بشه

tool=size(pelak,2);
arz=size(pelak,1);
m1=pelak(:,1:arz);
m2=pelak(:,tool/2-arz/2:tool/2+arz/2);
m3=pelak(:,tool-arz:tool);

----------


## sama.66

الان این کدنمایشش به این صورته
 یه سری اعداد مشخص نیست وبه صورت شکلی که فرستادم براتون نیست

----------


## rahnema1

با این حساب باید مستطیل همپوشان درست کنیم درسته؟

----------


## sama.66

بله باید همپوشان باشه

----------


## rahnema1

tool=size(pelak,2);
arz=size(pelak,1);
m1=pelak(:,1:tool/2.5);
m2=pelak(:,tool/2-tool/2.5/2:tool/2+tool/2.5/2);
m3=pelak(:,tool-tool/2.5:tool);

----------


## sama.66

مرسی ،منظورازهیستوگرام 59نقطه ای و241 نقطه ای چیه ؟؟که باید واسه هرمربع یه هیستوگرام 59+241نقطه ای بگیرم و ذخیره کنم تو یه فایل

----------


## rahnema1

توی بحث lbp یکی از گزینه ها u2 بود که اگر با 8 همرا باشه تعداد خانه های هسیتوگرامش 59 تا میشه و اگه با 16 همراه باشه تعداد خانه هیستوگرام 243 میشه

getmapping(8,'u2');
getmapping(16,'u2');

----------


## sama.66

میشه این لطفم بکنید میخوام هیستوگرام هر مربع رو بگیرم(مربع های مساوی) یعنی 3تامربع که هرکدام 59+241نتقطه داره،یعنی یک پلاک دارای  (59+241)*3 داده باشه

----------


## rahnema1

> میشه این لطفم بکنید میخوام هیستوگرام هر مربع رو بگیرم(مربع های مساوی) یعنی 3تامربع که هرکدام 59+241نتقطه داره،یعنی یک پلاک دارای  (59+241)*3 داده باشه


دستورالعمل lbp که داخل فایلش بود این جوره

map1=getmapping(8,'u2');
map2=getmapping(16,'u2');
SP=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];
H11=LBP(m1,SP,map1,'h');
H12=LBP(m1,SP,map2,'h');
H21=LBP(m2,SP,map1,'h');
H22=LBP(m2,SP,map2,'h');
H31=LBP(m3,SP,map1,'h');
H32=LBP(m3,SP,map2,'h');
H=[H11,H12;H21,H22;H31,H32];

----------


## sama.66

این برنامه کامل اجرانمیشه ،میشه به صورت کلی کداروبذارید اینجاببینم مشکلم چیه

----------


## rahnema1

> این برنامه کامل اجرانمیشه ،میشه به صورت کلی کداروبذارید اینجاببینم مشکلم چیه


اون m ها را که از پلاک به دست آوردیم

----------


## sama.66

بله mبدست اومد این کدهم واسه هیستوگرامشه ولی اجرانمیشه

----------


## rahnema1

> بله mبدست اومد این کدهم واسه هیستوگرامشه ولی اجرانمیشه


کجا خطا می ده؟

----------


## sama.66

توی  workspacفقط H11  رومیخونه بقیه ارورمیده

----------


## rahnema1

لطفا دقیقا بگید چه خطاییه یا یه عکس از صفحه بگیرید بذارید تا بدونم چه خطاییه

----------


## sama.66

Error in Untitled (line 21)
H12=LBP(m1,SP,map2,'h');

----------


## rahnema1

> Error in Untitled (line 21)
> H12=LBP(m1,SP,map2,'h');


اصلاح شد

H11=LBP(m1,1,8,map1,'h');
H12=LBP(m1,2,16,map2,'h');
H21=LBP(m2,1,8,map1,'h');
H22=LBP(m2,2,16,map2,'h');
H31=LBP(m3,1,8,map1,'h');
H32=LBP(m3,2,16,map2,'h');

----------


## sama.66

مرسی،Hبه اینصورت نشون داده میشه3333333.PNG

----------


## sama.66

:تشویق:  :تشویق:  :تشویق:

----------


## sama.66

اگه بخوام  (241+59)  lbp روی کل مستطیل اجرابشه به این صورت میشه؟؟tool=size(pelak,2);

arz=size(pelak,1);

map1=getmapping(8,'u2');
map2=getmapping(16,'u2');
SP=[-1 -1; -1 0; -1 1; 0 -1; -0 1; 1 -1; 1 0; 1 1];

H11=LBP(m1,1,8,map1,'h');
H12=LBP(m1,2,16,map2,'h');

----------


## rahnema1

> مرسی،Hبه اینصورت نشون داده میشه


فکر کنم باید این دستور اجرا بشه:
plot(H')

----------


## rahnema1

> اگه بخوام  (241+59)  lbp روی کل مستطیل اجرابشه به این صورت میشه؟؟



map1=getmapping(8,'u2');
map2=getmapping(16,'u2');
H11=LBP(pelak,1,8,map1,'h');
H12=LBP(pelak,2,16,map2,'h');
H=[H11,H12];

----------


## sama.66

نیازی هست که حتما کد size بنویسم سایزشوبرگردونه؟؟؟

----------


## rahnema1

> نیازی هست که حتما کد size بنویسم سایزشوبرگردونه؟؟؟


نه دیگه چون نیازی به همپوشان نداریم

----------


## sama.66

مرسی خیلی لطف دارید که وقتتون رو دراختیارمون میذارید واقعا ممنونم
یه سوال دیگه هم دارم،چطوری میتونم مجموع این lbpهارو(3مربع+یک مستطیل) تو یک برنامه داشته باشم (  (241+59)*3   +  59+241   )؟باید Hهارو باهم جمع کنم؟؟؟

----------


## rahnema1

مثلا اسم اون که 3*59+243 هست H1 باشه و اون دومی هم H2 باشه دستور ترکیب دو تا ماتریس این جوریه
H3=[H1;H2];

----------


## sama.66

هیستوگرامی که تو مقاله گرفته شده به این شکله8888.PNG

----------


## sama.66

ولی واسه برنامه ما به این شکل درمیادبایدداده های مختلف داشته باشه  مشکل ازکجاست؟؟999999.PNG

----------


## rahnema1

بالاخره معلوم نشد شما چیکار می خواهید بکنید
اون مقاله اومده بافت lbpرا برای کل تصویر به دست آورده( با شعاع 1و 8 نقطه نمونه)  سپس اون تصویر lbp شده را به 9 قسمت همپوش تقسیم کرده و برای هر قسمت هیستوگرام به دست آورده و نهایتا هیستوگرامها را به هم چسبونده. بعد اومده یک هیستوگرام با شعاع 2و 8 نقطه نمونه برای کل تصویر و یک هیستوگرام دیگه با شعاع 2و16 نقطه نمونه برای کل تصویر به دست آورده و نهایتا این سه تا را به هم چسبونده

----------


## sama.66

درسته ولی من میخوام بدونم چرا هیستوگرام ما اینقدداده هاش کمه؟؟به نظرنمیاداستاندارد باشه

----------


## rahnema1

> درسته ولی من میخوام بدونم چرا هیستوگرام ما اینقدداده هاش کمه؟؟به نظرنمیاداستاندارد باشه


فکر نکنم کم باشه. اگه هیستو گرامهای مختلف را به هم پیوند بزنیم زیاد میشه :)

----------


## sama.66

کدامون که درسته ولی به استادم نشون دادم میگه هیستوگرامش به این شکل نباید باشهlbp6.PNG

----------


## rahnema1

> کدامون که درسته ولی به استادم نشون دادم میگه هیستوگرامش به این شکل نباید باشهlbp6.PNG


من که گفتم این دستور را بزنید

plot(H')

----------


## sama.66

سلام 
من  متوجه شدم که برنامه رو باید دقیقا مثل برنامه ی توی اون مقاله بنویسم با این تفاوت که به جای 9قسمت همپوش به سه قسمت همپوش تقسیم کنم،ولی این برنامه که با کمک شمانوشتیم یه کمی متفاوته،میشه راهنماییم کنین

----------


## sama.66

درحقیقت کدهاروداریم با کمک شمانوشتیم ولی چون باید طبق مقاله پیش برم یکمی سردرگم شدم

----------


## rahnema1

این جور باید بشه

tool=size(pelak,2);
arz=size(pelak,1);
map1=getmapping(8,'u2');
map2=getmapping(16,'u2');

Ilbp=LBP(pelak,1,8,map1,'i');
m1=Ilbp(:,1:tool/2.5);
m2=Ilbp(:,tool/2-tool/2.5/2:tool/2+tool/2.5/2);
m3=Ilbp(:,tool-tool/2.5:tool);

bins1 = map1.num;
H1=hist(m1(:), 0:(bins-1));
H2=hist(m2(:), 0:(bins-1));
H3=hist(m3(:), 0:(bins-1));
H4=LBP(pelak,2, 8,map1,'h');
H5=LBP(pelak,2, 16,map2,'h');
H=[H1, H2, H3, H4, H5];
plot(H);

----------


## sama.66

این ارور رو میدهIndex exceeds matrix dimensions.

Error in Untitled (line 15)
m3=Ilbp(:,tool-tool/2.5:tool);

----------


## rahnema1

اصلاح شد

tool=size(pelak,2);
arz=size(pelak,1);
map1=getmapping(8,'u2');
map2=getmapping(16,'u2');

Ilbp=LBP(pelak,1,8,map1,'i');
tool=size(Ilbp,2);
arz=size(Ilbp,1);
m1=Ilbp(:,1:round(tool*3/7));
m2=Ilbp(:,round(tool*2/7)+1:round(tool*5/7));
m3=Ilbp(:,round(tool*4/7)+1:tool);

bins = map1.num;
H1=hist(m1(:), 0:(bins-1));
H2=hist(m2(:), 0:(bins-1));
H3=hist(m3(:), 0:(bins-1));
H4=LBP(pelak,2, 8,map1,'h');
H5=LBP(pelak,2, 16,map2,'h');
H=[H1, H2, H3, H4, H5];
plot(H);

----------


## sama.66

ممنونم از شما

----------


## sama.66

قبلا باراهنماییتون کدی نوشتیم که خروجی تو یه فایلی ذخیره میشد،برای اینکه بتونم تواین برنامه هم خروجی رو به صورت رشته سیو کنم کدش به این صورت میشه؟؟


```
image_files=dir(fullfile(cd,'\*.jpg'));
mkdir('lbp');
current_directory=cd;
dimension=size(image_files);
number_of_samples=dimension(1);
for Q=1:number_of_samples

    
    
file_name=image_files(Q).name;
file=strcat(current_directory,'\',file_name);



filesave=strcat(current_directory,'\lbp\hist-',file_name);
dlmwrite('myfile.txt',filesave,H);
end
```

----------


## rahnema1

فکر کنم این جور میشه

image_files=dir(fullfile(cd,'\*.jpg'));
mkdir('lbp');
current_directory=cd;
dimension=size(image_files);
number_of_samples=dimension(1);
for Q=1:number_of_samples

    
    
file_name=image_files(Q).name;
file=strcat(current_directory,'\',file_name);



filesave=strcat(current_directory,'\lbp\hist-',file_name,'.txt');
dlmwrite(filesave,H);
end 


فقط یک نکته اینکه map1 و map2 را تنها یک بار در اول برنامه حساب کنید کافیه ( دیگه نمی خواد مرتبا اونها را حساب کنید)

----------


## sama.66

1:این کدروکه مینویسم ارور میده

```
c=imread('file');
```

2:منظورتون کدgetmapping که یه بار بنویسم؟؟؟

----------


## rahnema1

> 1:این کدروکه مینویسم ارور میده
> 
> ```
> c=imread('file');
> ```
> 
> 2:منظورتون کدgetmapping که یه بار بنویسم؟؟؟


اگه بتونید کد ها را داخل تگ HTML نذارید داخل یه تگ دیگه مثل VB بذارید بهتر نشون داده میشه

file را داخل ' ' قرار ندهید
منظورم map1=getmapping هست

----------


## sama.66

بله چشم.
بازم ارور دادUndefined function or variable 'file'.

Error in Untitled15 (line 17)
c=imread(file);

----------


## rahnema1

دقت کنید داخل فولدر مورد نظر فایلها با پسوند jpg باشند نه JPG در غیر این صورت کد را تغییر بدید
این جور اجرا می کنید و خطا میده؟

image_files=dir(fullfile(cd,'\*.jpg'));
mkdir('lbp');
current_directory=cd;
dimension=size(image_files);
number_of_samples=dimension(1);
for Q=1:number_of_samples

    
    
file_name=image_files(Q).name;
file=strcat(current_directory,'\',file_name);

c=imread(file);

filesave=strcat(current_directory,'\lbp\hist-',file_name,'.txt');
dlmwrite(filesave,H);
end

----------


## sama.66

ارورش رفع شدو همه هیستوگرامهای نهایی سیو میشه تو فولدر،امافقط یکیشو نمایش میده،میخوام همشونو نمایش بده

----------


## rahnema1

قبل از هر دستور plot یه دستور figure بنویسید تا پلات ها در پنجره های جدید ایجاد بشن

----------


## sama.66

سلام
میشه درمورد کلاسیفایر svmراهنماییم کنید؟؟چطوری میتونم داده هامو اموزش بدم؟؟

----------


## sama.66

lotfan mishe komakam konid????????

----------


## rahnema1

شما ابتدا باید یه برنامه svm را گیر بیارید و داده ها را مانند سایر روشها در اون آموزش بدید

----------


## sama.66

توی تولباکس متلب نداره؟؟

----------


## rahnema1

فکر نکنم تولباکس داشته باشه

----------


## sama.66

من این برنامه رو پیداکردم چجوری باید ازش استفاده کنمfunction [D, a_star] = SVM(train_features, train_targets, params, region)

% Classify using (a very simple implementation of) the support vector machine algorithm
% 
% Inputs:
%     features- Train features
%    targets    - Train targets
%    params    - [kernel, kernel parameter, solver type, Slack]
%               Kernel can be one of: Gauss, RBF (Same as Gauss), Poly, Sigmoid, or Linear
%               The kernel parameters are:
%                   RBF kernel  - Gaussian width (One parameter)
%                   Poly kernel - Polynomial degree
%                   Sigmoid     - The slope and constant of the sigmoid (in the format [1 2], with no separating commas)
%                          Linear          - None needed
%               Solver type can be one of: Perceptron, Quadprog
%    region    - Decision region vector: [-x x -y y number_of_points]
%
% Outputs
%    D            - Decision sufrace
%    a            - SVM coeficients
%
% Note: The number of support vectors found will usually be larger than is actually 
% needed because both solvers are approximate.

[Dim, Nf]       = size(train_features);
Dim             = Dim + 1;
train_features(Dim,:) = ones(1,Nf);
z                     = 2*(train_targets>0) - 1; 

%Get kernel parameters
[kernel, ker_param, solver, slack] = process_params(params);

%Transform the input features
y    = zeros(Nf);
switch kernel,
case {'Gauss','RBF'},
   for i = 1:Nf,
      y(:,i)    = exp(-sum((train_features-train_features(:,i)*ones(1,Nf)).^2)'/(2*ker_param^2));
   end
case {'Poly', 'Linear'}
   if strcmp(kernel, 'Linear')
      ker_param = 1;
   end
   
   for i = 1:Nf,
      y(:,i) = (train_features'*train_features(:,i) + 1).^ker_param;
   end
case 'Sigmoid'
    if (length(ker_param) ~= 2)
        error('This kernel needs two parameters to operate!')
    end
    
   for i = 1:Nf,
      y(:,i) = tanh(train_features'*train_features(:,i)*ker_param  (1)+ker_param(2));
   end
otherwise
   error('Unknown kernel. Can be Gauss, Linear, Poly, or Sigmoid.')
end

%Find the SVM coefficients
switch solver
case 'Quadprog'
   %Quadratic programming
   if ~isfinite(slack)
       alpha_star    = quadprog((z'*z).*(y'*y), -ones(1, Nf), [], [], z, 0, 0)';
   else
       alpha_star    = quadprog((z'*z).*(y'*y), -ones(1, Nf), [], [], z, 0, 0, slack)';
   end
   a_star        = (alpha_star.*z)*y';
   
   %Find the bias
   in           = find((alpha_star > 0) & (alpha_star < slack));
   if isempty(in),
       bias = 0;
   else
        B            = z(in) - a_star * y(:,in);
       bias         = mean(B(in));
   end
   
case 'Perceptron'
   max_iter        = 1e5;
   iter            = 0;
   rate        = 0.01;
   xi                = ones(1,Nf)/Nf*slack;
   
   if ~isfinite(slack),
       slack = 0;
   end
   
   %Find a start point
   processed_y    = [y; ones(1,Nf)] .* (ones(Nf+1,1)*z);
   a_star        = mean(processed_y')';
   
   while ((sum(sign(a_star'*processed_y+xi)~=1)>0) & (iter < max_iter))
      iter         = iter + 1;
      if (iter/5000 == floor(iter/5000)),
         disp(['Working on iteration number ' num2str(iter)])
      end
      
      %Find the worse classified sample (That farthest from the border)
      dist            = a_star'*processed_y+xi;
      [m, indice] = min(dist);
      a_star        = a_star + rate*processed_y(:,indice);
      
      %Calculate the new slack vector
      xi(indice)  = xi(indice) + rate;
      xi                = xi / sum(xi) * slack;
   end
   
   if (iter == max_iter),
      disp(['Maximum iteration (' num2str(max_iter) ') reached']);
   else
      disp(['Converged after ' num2str(iter) ' iterations.'])
    end
   
   bias   = 0; 
   a_star = a_star(1:Nf)';
   
case 'Lagrangian'
    %Lagrangian SVM (See Mangasarian & Musicant, Lagrangian Support Vector Machines)
    tol         = 1e-5;
    max_iter    = 1e5;
    nu          = 1/Nf;
    iter        = 0;

    D           = diag(z);
    alpha       = 1.9/nu;
    
    e           = ones(Nf,1);
    I           = speye(Nf);
    Q           = I/nu + D*y'*D;
    P           = inv(Q);
    u           = P*e;
    oldu        = u + 1;
    
    while ((iter<max_iter) & (sum(sum((oldu-u).^2)) > tol)),
        iter    = iter + 1;
        if (iter/5000 == floor(iter/5000)),
           disp(['Working on iteration number ' num2str(iter)])
        end
        oldu    = u;
        f       = Q*u-1-alpha*u;
        u       = P*(1+(abs(f)+f)/2);
    end
  
    a_star    = y*D*u(1:Nf);
    bias      = -e'*D*u;  
    
otherwise
   error('Unknown solver. Can be either Quadprog or Perceptron')
end

%Find support verctors
sv        = find(abs(a_star) > 1e-10);
Nsv    = length(sv);
if isempty(sv),
   error('No support vectors found');
else
   disp(['Found ' num2str(Nsv) ' support vectors'])
end

%Margin
b    = 1/sqrt(sum(a_star.^2));
disp(['The margin is ' num2str(b)])

%Now build the decision region
N           = region(5);
xx             = linspace (region(1),region(2),N);
yy          = linspace (region(3),region(4),N);
D                 = zeros(N);

for j = 1:N,
   y = zeros(N,1);
   for i = 1:Nsv,
      data         = [xx(j)*ones(1,N); yy; ones(1,N)];
      
      switch kernel,
        case {'Gauss','RBF'},
         y            = y + a_star(i) * exp(-sum((data-train_features(:,sv(i))*ones(1,N)).^2)'/(2*ker_param^2));
        case {'Poly', 'Linear'}
         y            = y + a_star(i) * (data'*train_features(:,sv(i))+1).^ker_param;
        case 'Sigmoid'
         y            = y + a_star(i) * tanh(data'*train_features(:,sv(i))*ker_param(1)+ke  r_param(2));
      end
   end
   D(:,j) = (y + bias);
end


D = D>0;

----------


## rahnema1

توی ابتدای فایل نحوه استفاده را نوشته بسته به داده شما داره
بهتره در مورد svm مطالعه کنید تا بدونید چه ورودی هایی را باید بدید
حالا بگردید شاید از این راحت تر هم باشه که فقط داده ها رابهش بدید و خروجی بگیرید چون تو اینجا پارامترهای پیش فرض نداره حتما باید بدونید چی می خواهید بهش بدید

----------


## sama.66

توی همون کدهایی که فرستاده بودم این فایل برای کلاسیفایربودازاین میتونم استفاده کنم؟؟function [final_accu,PreLabel] = NNClassifier(Samples_Train,Samples_Test,Labels_Tra  in,Labels_Test)

Train_Model = Samples_Train;
Test_Model = Samples_Test;
numTest = size(Test_Model,2);
numTrain = size(Train_Model,2);

current_test = [];
current_comp = [];
PreLabel = [];
current_value = 0;
min_value = 99999;
class_index = 1;

for index2 = 1:numTest
    current_test = Test_Model(:,index2);
    for index3 = 1:numTrain
        current_comp = Train_Model(:,index3);

        current_value = sum(abs(current_test - current_comp));
        if(current_value<min_value)
            min_value = current_value;
            class_index = Labels_Train(1,index3);
        end
    end
        
    PreLabel = [PreLabel,class_index];
    min_value = 99999;
    class_index = 1;
end

Comp_Label = PreLabel - Labels_Test;
Comp_Label = Comp_Label;
accu_count = 0;
for index3 = 1:size(Comp_Label,2)
    if(Comp_Label(1,index3)==0)
        accu_count = accu_count+1;
    end
end

final_accu = (accu_count/double(size(Comp_Label,2)))*100;

----------


## rahnema1

دقیقا چی کار می خواهید بکنید؟

----------


## sama.66

یه سری تصاویر داشتم ،ازشون lbp گرفتم hلان میخوام  ایناروبه یک svm بدم

----------


## rahnema1

حالا svm میخواد چیکار کنه؟

----------


## sama.66

که به عنوان یه ویژگی ازش استفاده کنم
svmتومطلب دستورداره ولی نمیدونم چجوری استفاده کنم لطفا راهنماییم کنید
svmtrainبرای اموزش 

و svmclassifyبرای ازمایش

----------


## rahnema1

> که به عنوان یه ویژگی ازش استفاده کنم(دو دسته داده دارم پلاک و غیر پلاک وقتی svm بتونه با دقت بالا جداشون کنه یعنی توی تصویر هم میتونه این کار رو بکنه.,یعنی اگر یک پنجره رو توی تصویر بلغزونم svm می تونه پیداش کنه و آشکارش کنه)
> svmتومطلب دستورداره ولی نمیدونم چجوری استفاده کنم لطفا راهنماییم کنید
> svmtrainبرای اموزش 
> 
> و svmclassifyبرای ازمایش


توی هلپش فکر کنم توضیح داده حالا من متلب ندارم  و از octave استفاده می کنم که چنین دستوری نداره شاید دوستان دیگه بتونند توضیح بیشتری بدهند شما خودتون یه کم جلو ببرید هر جا اشکال داشتید بگید

----------


## sama.66

helpe matlabo k mikhunam yekami gij misham kasi hast betune komakam kone?????

----------


## rahnema1

> helpe matlabo k mikhunam yekami gij misham kasi hast betune komakam kone?????


ببینید الان توی اینترنت این صفحه هلپ svclassify هست (فکر کنم هلپ متلب هم همین طوره )آخر صفحه را نگاه کنید یک نمونه کد برای اجرا گذاشته شده همون را اجرا کنید
بعد داده های خودتون را مطابق همین بذارید داخل کد
اشکال کجاشت؟

http://www.mathworks.com/help/stats/​svmclassify.html

----------


## sama.66

manzuretun in code?
load fisheriris
xdata = meas(51:end,3:4);
group = species(51:end);
svmStruct = svmtrain(xdata,group,'ShowPlot',true);
dadamo k mizaram tuye workspace vali chejuri ouno mikhune?

----------


## rahnema1

> manzuretun in code?
> load fisheriris
> xdata = meas(51:end,3:4);
> group = species(51:end);
> svmStruct = svmtrain(xdata,group,'ShowPlot',true);
> dadamo k mizaram tuye workspace vali chejuri ouno mikhune?


شما تعدادی هیستوگرام برای پلاکها داریدمثلا 50 تا هر کدوم به ابعاد یک در 512
حالا تمام اینها را بچسبونید به هم تا یک ماتریس 50 در 512 ایجاد بشه
و برای غیر پلاکها هم مثلا 30 تا هیستوگرام غیر پلاک دارید اونها را هم به انتهای اون قبلی اضافه کنید تا نهایتا یک ماتریس 80 در 512 ایجاد بشه
که این در دستور svmtrain تشکیل پارامتر xdataرا میده 
بعد باید یک ماتریس به ابعاد 80 در یک ایجاد کنید که 50 تا عضو اول اون یک و مابقی صفر باشن و اسم ماتریس را هم بذارید group 
بعد مانند کدی که گذاشتید اجرا کنید به همین راحتی

----------


## sama.66

(درکل 660 تا پلاک و 1200تا غیرپلاک دارم،ابعاد یک در479هستن)
من میخوام مثلا دوتادرمیان دوتا غیرپلاک و یکی پلاک روبدم بهsvm،
یعنی باید هردفعه دوتاغیرپلاک و یکی پلاک رو بهم بچسبونم؟؟( که ابعادش میشه 3در479)بعدیک ماتریس به ابعاد3در479ایجادکنم که 2تاغیرپلاک روصفربزارم اون یه دونه پلاک رو هم یک بزارم،به این شکل درسته؟؟؟

----------


## rahnema1

> (درکل 660 تا پلاک و 1200تا غیرپلاک دارم،ابعاد یک در479هستن)
> من میخوام مثلا دوتادرمیان دوتا غیرپلاک و یکی پلاک روبدم بهsvm،
> یعنی باید هردفعه دوتاغیرپلاک و یکی پلاک رو بهم بچسبونم؟؟( که ابعادش میشه 3در479)بعدیک ماتریس به ابعاد3در479ایجادکنم که 2تاغیرپلاک روصفربزارم اون یه دونه پلاک رو هم یک بزارم،به این شکل درسته؟؟؟


شما باید ابتدا از پلاک و غیر پلاک هر کدومشون دو سوم اونها را واسه آموزش و یک سوم را برای آزمایش جدا کنید یعنی 440 پلاک به همراه 800 غیر پلاک  ( جمعا 1240) را برای آموزش و مابقی (220 پلاک و 400 غیر پلاک جمعا 620 ) را برای آزمایش نگه دارید
اینکه دو در میون باشن ترتیبشون مهم نیست همون بهتره که مثلا ماتریس که 1240 در 479 هست، تعداد 440 تای اولی پلاک و مابقی غیر پلاک باشن یعنی لازم نیست یک در میون بذارید چون وارد برنامه که میشه اصلا ربطی به ترتیب نداره
بنابراین شما در ابتدا یک اتریس 1240 در 479 به نام xdata برای svmtrain ایجاد می کنید سپس یک ماتریس 1240 در یک به نام group ایجاد می کنید که 440 تای اولی یک باشه و بقیه صفر باشه 
سپس با svmclassify داده هایی که برای آزمایش نگه داشته بودید را طبقه بندی می کنید و کارآیی روش را به دست می آورید

----------


## sama.66

اتصال مثلا 2تا ماتریس به این شکله؟

 C=cat(1,A,B) 

چجوری ایناروبهم بچسبونم

----------


## rahnema1

> اتصال مثلا 2تا ماتریس به این شکله؟
> 
>  C=cat(1,A,B) 
> 
> چجوری ایناروبهم بچسبونم


این داده ها کجا هستند توی فایلند یا جای دیگه؟

----------


## sama.66

نه منظورم  اینه  E=cat(1,A,B)

 نمیدونم چرا به اون شکل نمایش داده شد

----------


## rahnema1

> نه منظورم  اینه  E=cat(1,A,B)
> 
>  نمیدونم چرا به اون شکل نمایش داده شد


مثلا شما یه ماتریس a,b دارید می خواهید به هم بچسبونید
که اگه بخواهید ستون به ستون باشه میشه c اگه بخواهید سطر به سطر باشه میشه d

a=[1 2 3];
b=[4 5 6];
c=[a b];
d=[a; b];

یه مثال دیگه من یک ماتریس خالی به ابعاد 10 در سه میسازم و می خوام سطرهای اون را با ماتریس های یک در سه پر کنم
توجه: دستور rand یه سری عدد تصادفی میسازه که برای این مثال به کار بردم

a= zeros(10,3);

for i=1:10
	b=rand(1,3);
	a(i,:)=b;
end

----------


## sama.66

خب 1240تارو چجوری بهم بچسبونم متوجه نمیشم

----------


## rahnema1

> خب 1240تارو چجوری بهم بچسبونم متوجه نمیشم


من هم دارم همین میگم این داده ها کجا هستند؟ توی workspace یا توی فایل ذخیره شدن؟

----------


## sama.66

من توی فایل دارم این داده هارو،نمیدونم باید بیارم توی workspace یا نه؟؟؟؟؟؟

----------


## rahnema1

من فرض کردم دو تا فولدر هست به نام pelak و nonpelak و پسوند فایلها هم txt هست
اطلاعات هر کدوم را می ریزه داخل دو تا ماتریس
حالا کاری که شما می کنید اینکه که به همون ترتیبی که گفتم داده ها را از این ماتریس ها استخراج کرده و در ماتریس xdata میذارید اگه به مشکل برخوردید اطلاع بدید

cd pelak;
fil=dir('*.txt');
for i=1:numel(fil)
	pelakdata(i,:)=dlmread(fil(i).name);
end

cd nonpelak;
fil=dir('*.txt');
for i=1:numel(fil)
	nonpelakdata(i,:)=dlmread(fil(i).name);
end

----------


## sama.66

فقط اولی رو میخونه
Error using cd
Cannot CD to nonpelak (Name is nonexistent or not a directory).

Error in Untitled (line 9)
cd nonpelak;

----------


## rahnema1

این را بذارید

cd ..
cd nonpelak;

----------


## sama.66

قبلا تو یه فایلی به همون ترتیبی که فرمودید برای ازمایش و یه فایلم برای اموزش جدا کردم،ولی الان چجوری باید ازتوی ماتریس واسه اموزش و ازمایش جداکنم؟

----------


## rahnema1

> قبلا تو یه فایلی به همون ترتیبی که فرمودید برای ازمایش و یه فایلم برای اموزش جدا کردم،ولی الان چجوری باید ازتوی ماتریس واسه اموزش و ازمایش جداکنم؟


خیلی خوب. حالا بگید فایل آموزش شامل چیه و فایل آزمایش شامل چیه ( منظورم تعداد سطر و ستون وها هست)
استخراج سطرها و ستون یک ماتریس دیگه از اساسی ترین دستورهای متلب هست که حتما باید یاد بگیرید

----------


## sama.66

متوجه نشدم،ببینید من فایلامو جداکردم ولی به ماتریس تبدیل نکردم،نمیدونم میشه بگید مراحلش به چه صورت باید باشه دقیقا؟اول باید پلاک و نان پلاک رو به ماتریس تبدیل کنم طبق کدی که دادید و ازتوش واسه اموزش و ازمایش جداکنم؟؟؟؟یا اینکه فایلایی رو که ازقبل  جداکردم به عنوان ازمایش و اموزش  رو  بزارم تو این کد وبه ماتریس تبدیل کنم ؟؟؟

----------


## rahnema1

> متوجه نشدم،ببینید من فایلامو جداکردم ولی به ماتریس تبدیل نکردم،نمیدونم میشه بگید مراحلش به چه صورت باید باشه دقیقا؟اول باید پلاک و نان پلاک رو به ماتریس تبدیل کنم طبق کدی که دادید و ازتوش واسه اموزش و ازمایش جداکنم؟؟؟؟یا اینکه فایلایی رو که ازقبل  جداکردم به عنوان ازمایش و اموزش  رو  بزارم تو این کد وبه ماتریس تبدیل کنم ؟؟؟


ببینید همون طور که گفتم باید فایلها را به ماتریس تبدیل کنید تا بتونید وارد svm کنید
طبق همون کدی که گذاشتم فرض کنید فایلهای شما در دو فولدر باشه شما دو تا ماتریس درست کنید و اسم اون ماتریسها را هر چه دلتون خواست بذارید و نهایتا به من بگید این ماتریسهایی که ایجاد شده هر کدوم شامل چه داده هایی هست و تعداد سطر و ستون اون را بگویید تا برسیم به مرحله بعدی

----------


## rahnema1

دقیقا بگید در فولدرها چی گذاشتید در هر فولدری چه تعداد فایل هست

----------


## sama.66

من دوتا فولدر دارم

از کدوم دسته استفاده کنم؟؟؟؟

----------


## rahnema1

کد برای دسته اوله

----------


## sama.66

ok chejuri bayad vase amuzesho azmayesh az tu matrisa joda konam??

----------


## rahnema1

xdataamoozesh=[pelakdata(1:440,:);nonpelakdata(1:800,:)];
xdataazmayesh=[pelakdata(441:end,:);nonpelakdata(801:end,:)];
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];

----------


## sama.66

الان من حلقه رو چجوری بنویسم؟؟a= zeros(1240,1);
 
for i=1:440
    b=rand( ,);
    a(i,:)=b;
end

----------


## rahnema1

> الان من حلقه رو چجوری بنویسم؟؟a= zeros(1240,1);
>  
> for i=1:440
>     b=rand( ,);
>     a(i,:)=b;
> end


من کد pelak و nonpelak را برای شما گذاشتم دیگه نمیخواد چیزی اضافه بشه فقط همون ها را اجرا کنید

----------


## sama.66

بعدش  بایداینطور نوشت؟؟svmStruct = svmtrain(xdataamoozesh,groupamoozesh,'showplot',tr  ue);
groupazmayesh = svmclassify(SVMStruct,Sample,'Showplot',true)

----------


## rahnema1

> بعدش  بایداینطور نوشت؟؟svmStruct = svmtrain(xdataamoozesh,groupamoozesh ,'showplot',true);
> groupazmayesh = svmclassify(SVMStruct,Sample,'Showplot',true)


بله همین روش
به علاوه اینها

azmayesh=svmclassify(svmStruct,xdataazmayesh ,'ShowPlot',true);
[x,y,auc]=perfcurve(azmayesh,groupazmayesh,1);
plot(x,y)
xlabel('False positive rate'); ylabel('True positive rate')
title('ROC for classification by SVM')
disp(auc)

اگه شاخص auc از 80 درصد بیشتر بود معلومه کارایی روش خوب بوده

----------


## sama.66

auc یه ماتریسه که به این صورت دراومده؟؟
1
1
0
خب میشه بگید این یعنی چی؟؟؟

----------


## rahnema1

حالا نمودار را کشید نمودار چه شکلیه؟
auc هم فقط باید یک عدد باشه قاعدتا نه سه تا و بین 0.5 تا 1 باید باشه

----------


## rahnema1

ببخشید یه اشتباه شده این خط را اصلاح کنید
[x,y,auc]=perfcurve(groupazmayesh,azmayesh,1);

----------


## sama.66

auc همانطورکه گفتم به این صورته {1,1,0}
اینم نمودارشCapture.PNG

----------


## rahnema1

این اشتباه را هم اصلاح کنید
نمودار نشون میده کارآیی بسیار عالی بوده چون منحنی به سمت گوشه بالا سمت چپ کاملا نزدیک شده

[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

واقعا خیلی لطف میکنید شما،درست شد الان شده   0.9803

----------


## sama.66

یه سوال؟چجوری باید بفهمم که جواب ازمایشsvmclassifyنسبت به جواب واقعی چند درصد ه؟؟

----------


## rahnema1

> یه سوال؟چجوری باید بفهمم که جواب ازمایشsvmclassifyنسبت به جواب واقعی چند درصد ه؟؟


منظور شما را متوجه نمیشم

----------


## sama.66

یعنی اینکه میخوام  خروجی swmclassify رو با خروجی واقعی که باید باشه مقایسه کنم و در صد بگیرم

----------


## rahnema1

> یعنی اینکه میخوام  خروجی swmclassify رو با خروجی واقعی که باید باشه مقایسه کنم و در صد بگیرم


ماتریس ابهام اینجور بدست میاد
C= confusionmat(groupazmayesh ,azmayesh)

----------


## sama.66

khoroji  c be in surete??

[397,3,7,213]

میشه بگید این ماتریس منظورش چیه

----------


## rahnema1

> khoroji  c be in surete??
> 
> [397,3,7,213]
> 
> میشه بگید این ماتریس منظورش چیه


همون چیزی که به دنبالش بودید
اینها را مطالعه کنید:
http://fa.wikipedia.org/wiki/ماتریس_درهم‌ریختگی

http://en.wikipedia.org/wiki/Confusion_matrix

----------


## sama.66

مرسی،اونجا نوشته بود هر ستون نمونه ای ازمقدارپیش بینی شده است ،ستون اول میشه 7+397 خب این جمعش میشه 404ولی ما 400 تا غیرپلاک داشتیم  یه توضیح کوچیک میدین من متوجه بشم قضیه به چه صورته؟؟

----------


## rahnema1

> مرسی،اونجا نوشته بود هر ستون نمونه ای ازمقدارپیش بینی شده است ،ستون اول میشه 7+397 خب این جمعش میشه 404ولی ما 400 تا غیرپلاک داشتیم  یه توضیح کوچیک میدین من متوجه بشم قضیه به چه صورته؟؟


397+3
213+7

----------


## sama.66

هر ستون از ماتریس، نمونه‌ای از مقدار پیش بینی شده را نشان می‌دهد. در صورتی که هر سطر نمونه‌ای واقعی (درست) را در بر دارد.
اینی که شما نوشتید واسه سطره نمونه ی واقعیه من میخوام ببینم داده های تست نسبت به واقعی چنددرصد شده باید ستونی درنظربگیرم؟؟؟؟

----------


## sama.66

میتونم اینجوری حساب کنم که کل داده 620تابوده و213+397=610تا در svmجواب داده  که میشه 98%

----------


## rahnema1

> میتونم اینجوری حساب کنم که کل داده 620تابوده و213+397=610تا در svmجواب داده  که میشه 98%


این شاخص auc پیچیده تر از این محاسبه ساده هست توی همون pdf هم از این شاخص استفاده شده

----------


## sama.66

یعنی  نسبت خروجی svm به خروجی  واقعی 98%  نیست ؟

----------


## rahnema1

> یعنی  نسبت خروجی svm به خروجی  واقعی 98%  نیست ؟


ببنید نسبت فکر نکنم شاخص خوبی باشه همون auc شاخص خیلی خوبی هست که همه چیز را در نظر می گیره الان هم که 98 درصد اومده خیلی خوبه
شما می گین نسبت. نسبت چی؟ نسبت طبقه بندی درست از میان طبقه بندی واقعی
یا نسبت طبقه بندی غلط از میان طبقه بندی واقعی
هر کدوم باشه ماتریس ابهام به شما نسبت را میده
یعنی منظور اینه که تنها اکتفا به نسبت کار درستی نیست
ولی این شاخص auc هست که شما باید استفاده کنید که تمام موارد بالا را در نظر می گیره

----------


## sama.66

ممنونم از راهنماییتون

----------


## sama.66

salam
har dafe k in barnamaro run mikonam auc taghir mikone,ye darsade sabeti nadare,bayad chikar kard??

----------


## rahnema1

> salam
> har dafe k in barnamaro run mikonam auc taghir mikone,ye darsade sabeti nadare,bayad chikar kard??


لطفا برنامه را بذارید اینجا

----------


## sama.66

سسسسسسسسسسسسسسسسسس

----------


## rahnema1

قبل از خط 

svmStruct = svmtrain(xdataamoozesh,groupamoozesh,'showplot',tr  ue);

این را بذارید دیه فکر کنم هر دفعه جواب یکسان بده

rng(100);

----------


## sama.66

بازم تغییرکرده،الان 66% شده

----------


## rahnema1

> بازم تغییرکرده،الان 66% شده


این دستور را بزنید

save xdataazmayesh.mat xdataazmayesh
save xdataamoozesh.mat xdataamoozesh

دو تا فایل mat ایجاد میشه اونها را زیپ کنید بفرستید

----------


## sama.66

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

----------


## rahnema1

من در یک جای دیگه غیر متلب اتحان کردم مشکلی نبود
بهتره از کتابخانه libsvm استفاده کنید
از اینجا دانلود کنید
http://www.csie.ntu.edu.tw/~cjlin/cg...lin/libsvm+zip
وقتی اکسترکت کردید در فولدر windows فایلهای مربوطه قرار داره ( البته برای ویندوز 64 بیتی هست)
دو تا فایل mat که درست کردید را بذارید داخل همون فولدر و اون فولدر را مسیر جاری قرار بدید
بعد این دستورات را بزنید

load xdataazmayesh.mat
load xdataamoozesh.mat
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain(groupamoozesh, double(xdataamoozesh), '-c 0');
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

روش دیگه ای نداره؟؟ اخه متلبم رو ویندوز64 من نصب نمیشه،(خیلی از درایورام واسه ویندوز64 کمیابه )

----------


## rahnema1

این هم نسخه 32 بیتی
http://www.csie.ntu.edu.tw/~cjlin/li...-mat-3.0-1.zip

----------


## sama.66

سلام 
من نتونستم فایلی ک فرمودید داخل ویندوز هست را پیداکنم،اگه میشه مراحلشو بگید که این libsvm رو چجوری نصب کنم؟بعداینکه برناممو اجراکنم یا اینکه همون چند خطی که فرستادین اونو فقط اجرا کنم؟؟

----------


## rahnema1

> سلام 
> من نتونستم فایلی ک فرمودید داخل ویندوز هست را پیداکنم،اگه میشه مراحلشو بگید که این libsvm رو چجوری نصب کنم؟بعداینکه برناممو اجراکنم یا اینکه همون چند خطی که فرستادین اونو فقط اجرا کنم؟؟


فایل zip که لینکش را براتون فرستادم یه جا اکسترکت کنید . دو تا فایل mat هم داخل اون بذارید و فولدر جاری را هم همون فولدر قرار بدید
سپس همون برنامه آخری که فرستادم را کافیه اجرا کنید

----------


## sama.66

in karo krardam vali error dad
Error: C <= 0
model file should be a struct array
Error using perfcurve
Argument 'scores' failed validation
@(x)~isempty(x)&&(isnumeric(x)||iscell(x)).

Error in perfcurve (line 313)
p.parse(labels,scores,posClass,varargin{:});

Error in Untitled7 (line 7)
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1); 
>>

----------


## rahnema1

این را بزنید:
size(azmayesh)
چه جوابی میاد؟

----------


## sama.66

Error: C <= 0
model file should be a struct array
Error using perfcurve
Argument 'scores' failed validation
@(x)~isempty(x)&&(isnumeric(x)||iscell(x)).

Error in perfcurve (line 313)
p.parse(labels,scores,posClass,varargin{:});

Error in Untitled7 (line 7)
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);
 
>>

----------


## rahnema1

فقط این را بزنید:
size(azmayesh)
چه جوابی میاد؟

----------


## sama.66

Undefined function or variable 'azmayesh'.

Error in Untitled7 (line 1)
size(azmayesh)

----------


## rahnema1

من گفتم این کد را اجرا کنید

load xdataazmayesh.mat
load xdataamoozesh.mat
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain(groupamoozesh, double(xdataamoozesh), '-c 0');
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

اگه همین دستور را زده اید احتمالا باید خطاهای بیشتری هم داده باشه
لطفا کل خطا ها را بذارید

----------


## sama.66

in code ro k mizanam in khataro mide
Error: C <= 0
model file should be a struct array
Error using perfcurve
Argument 'scores' failed validation
@(x)~isempty(x)&&(isnumeric(x)||iscell(x)).

Error in perfcurve (line 313)
p.parse(labels,scores,posClass,varargin{:});

Error in Untitled10 (line 7)
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## rahnema1

اصلا تک تک خط ها را در متلب کپی و پیست کنید اولین مورد که خطا داد گزارش کنید

----------


## sama.66

خط 6 این ارورو میده(یکی مونده به اخری)
Error: C <= 0
model file should be a struct array
خط اخرم این ارور رو میده
Error: C <= 0
model file should be a struct array
Error using perfcurve
Argument 'scores' failed validation
@(x)~isempty(x)&&(isnumeric(x)||iscell(x)).

Error in perfcurve (line 313)
p.parse(labels,scores,posClass,varargin{:});

Error in Untitled10 (line 9)
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1); 

بقیه خط ها ارور نمیده

----------


## rahnema1

فایل svmtrain.mexw32  را به svmtrain2.mexw32 تغییر نام بدهید سپس این کد را اجرا کنید

load xdataazmayesh.mat
load xdataamoozesh.mat
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(groupamoozesh, double(xdataamoozesh), '-c 0');
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

دوباره ارور داد
Error: C <= 0
model file should be a struct array
Error using perfcurve
Argument 'scores' failed validation
@(x)~isempty(x)&&(isnumeric(x)||iscell(x)).

Error in perfcurve (line 313)
p.parse(labels,scores,posClass,varargin{:});

Error in Untitled11 (line 7)
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## rahnema1

این دستورات خود libsvm هست . ببینید اجرا میشه؟

 [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
 model = svmtrain2(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
 [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model)
 

چه چیزی چاپ میشه؟

----------


## sama.66

فقط همین کدروزدم اررور دادError using svmtrain2
Matrix API is called with negative size or index.

Error in Untitled2 (line 4)
model = svmtrain2(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');

----------


## rahnema1

فایل heart_scale را داخل همون فولدر اکسترکت کنید
http://www.sharefile.ir/uploads/1408827087.zip

----------


## sama.66

Accuracy = 86.6667% (234/270) (classification)

دیگه ارور ندادولی قبلا 98% بود الان 86%

----------


## rahnema1

پس مشکلی نیست. این کد را اجرا کنید:

load xdataazmayesh.mat
load xdataamoozesh.mat
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(double(groupamoozesh), double(xdataamoozesh), '-c 0');
[azmayesh, accuracy, dec_values] = svmpredict(double(groupazmayesh), double(xdataazmayesh), svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

بازم ارور داد
Error: C <= 0
model file should be a struct array
Error using perfcurve
Argument 'scores' failed validation
@(x)~isempty(x)&&(isnumeric(x)||iscell(x)).

Error in perfcurve (line 313)
p.parse(labels,scores,posClass,varargin{:});

Error in Untitled3 (line 9)
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## rahnema1

این هم ارور میده؟

load xdataazmayesh.mat
load xdataamoozesh.mat
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(double(groupamoozesh), double(xdataamoozesh));
[azmayesh, accuracy, dec_values] = svmpredict(double(groupazmayesh), double(xdataazmayesh), svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

in error nadad
Accuracy = 64.5161% (400/620) (classification)

vali darsadesh kheyli omade peiyn

----------


## rahnema1

accuracy را ولش کن auc را ببین چند شده؟

----------


## sama.66

auc=0.5000

----------


## rahnema1

این که افتضاحه معلوم نیست مشکل کجاست جون من یه جا دیگه امتحان کردم فقط دو مورد اشتباه طبقه بندی شده بود

----------


## sama.66

خب پس چیکارمیشه کرد

----------


## rahnema1

ای یکی چه طوره؟

load xdataazmayesh.mat
load xdataamoozesh.mat
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(double(groupamoozesh), double(xdataamoozesh),'-s 2');
[azmayesh, accuracy, dec_values] = svmpredict(double(groupazmayesh), double(xdataazmayesh), svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

auc=0.4988

----------


## rahnema1

صبر کنید من تست می کنم فردا خبر میدم

----------


## sama.66

ok mrc  :لبخند:

----------


## rahnema1

این را امتحان کنید ابتدا باید داده ها نرمالیزه می شدند

miangin=mean(xdataamoozesh);
enherafmeyar=std(xdataamoozesh);
xdataamoozesh=(xdataamoozesh-miangin)/enherafmeyar;
xdataazmayesh=(xdataazmayesh-miangin)/enherafmeyar;
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(groupamoozesh, doublexdataamoozesh);
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

error dad
Undefined function or variable 'xdataamoozesh'.

Error in Untitled6 (line 1)
miangin=mean(xdataamoozesh);

----------


## rahnema1

> error dad
> Undefined function or variable 'xdataamoozesh'.
> 
> Error in Untitled6 (line 1)
> miangin=mean(xdataamoozesh);


یه کم به برنامه دقت کنید باید داده ها را load کنید تو پست قبلی بود دیگه

----------


## sama.66

اشتباه از من بوده چون پلاک ها همسایز نبوده،میخوام نرمالایزهم بکنم که دیگه کامل مطمئن بشم چطوربایدداده هامونرمالیزه کنم؟

----------


## rahnema1

> اشتباه از من بوده چون پلاک ها همسایز نبوده،میخوام نرمالایزهم بکنم که دیگه کامل مطمئن بشم چطوربایدداده هامونرمالیزه کنم؟


ببینید من تست کردم 99 و خورده ای درصد مدل دقت داشت دستور load را بذارید منظورم این بود

load xdataazmayesh.mat
load xdataamoozesh.mat

miangin=mean(xdataamoozesh);
enherafmeyar=std(xdataamoozesh);
xdataamoozesh=(xdataamoozesh-miangin)/enherafmeyar;
xdataazmayesh=(xdataazmayesh-miangin)/enherafmeyar;
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(groupamoozesh, doublexdataamoozesh);
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

سایز پلاک رو که تغییر دادم ازکتابخانه استفاده نکردم ازهمون برنامه قبلی استفاده کردم auc یک شده،ازاین برنامه هم که استفاده میکنم ارور میده
Error using  - 
Matrix dimensions must agree.

Error in Untitled2 (line 6)
xdataamoozesh=(xdataamoozesh-miangin)/enherafmeyar;

----------


## rahnema1

توی اکتاو متفاوت بود 

load xdataazmayesh.mat
load xdataamoozesh.mat

miangin=mean(xdataamoozesh);
enherafmeyar=std(xdataamoozesh);
xdataamoozesh=bsxfun(@rdivide,bsxfun(@minus ,xdataamoozesh,miangin),enherafmeyar);
xdataazmayesh=bsxfun(@rdivide,bsxfun(@minus ,xdataazmayesh,miangin),enherafmeyar);
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(groupamoozesh, doublexdataamoozesh);
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

Undefined function or variable 'doublexdataamoozesh'.

Error in Untitled3 (line 10)
svmStruct  = svmtrain2(groupamoozesh, doublexdataamoozesh);


bazam eror dad.in dastur normalize ham mikone?

----------


## rahnema1

ببخشید نام متغیر اشتباه بود
با میانگین و انحراف معیار نرمال می کنیم

load xdataazmayesh.mat
load xdataamoozesh.mat

miangin=mean(xdataamoozesh);
enherafmeyar=std(xdataamoozesh);
xdataamoozesh=bsxfun(@rdivide,bsxfun(@minus ,xdataamoozesh,miangin),enherafmeyar);
xdataazmayesh=bsxfun(@rdivide,bsxfun(@minus ,xdataazmayesh,miangin),enherafmeyar);
groupamoozesh=[ones(440,1);zeros(800,1)];
groupazmayesh=[ones(220,1);zeros(400,1)];
svmStruct  = svmtrain2(groupamoozesh, xdataamoozesh);
[azmayesh, accuracy, dec_values] = svmpredict(groupazmayesh, xdataazmayesh, svmStruct);
[x,y,T,auc]=perfcurve(groupazmayesh ,azmayesh,1);

----------


## sama.66

mrc az shoma,auc=0.9977

----------


## sama.66

ye soale dg nemishe code svm k ghablan neveshtim ba in code ro betunim hamzaman ejra konim?k dg nayaym aval svm k ghablan neveshtim ro run konim bad in cod ro run konim

----------


## rahnema1

> ye soale dg nemishe code svm k ghablan neveshtim ba in code ro betunim hamzaman ejra konim?k dg nayaym aval svm k ghablan neveshtim ro run konim bad in cod ro run konim


اون قبلی را لازم نیست دیگه اجرا کنید همین یکی کافیه

----------


## hhamidy

سلام.

برای کد roc or auc نوشتم :

 [X,Label,auc]=perfcurve(Ytest,class_est ,1);

و این خطا رو داشت:

Error using perfcurve>preparedata (line 1192)
Array of labels must be a vector.


Error in perfcurve (line 330)
[scores,labels,weights,ncv] = preparedata(scores,labels,weights);

----------


## ah.ketabdar

با سلام خدمت همه دوستان
یک سوال من از کد LBP (local binary pattern) برای تشخیص سرطان در پردازش تصویر استفاده کردم 
اما تو این کد تابع get map را متوجه نشدم ؟ اصلا برای چی از این تابع استفاده می کنیم؟
دو خط از این تابع اصلا برام مفهوم نیست ممنون میشم علتش را بگین
با تشکر
j = bitset(bitshift(i,1,samples),1,bitget(i,samples));
    numt = sum(bitget(bitxor(i,j),1:samples))

----------

