Emania

SO

Jan 9th, 2017
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.88 KB | None | 0 0
  1.  
  2. %% LOAD TRAINING DATA %%
  3.  
  4. load('ocr_names.mat');
  5. A = 26;
  6. pixels = size(TrnData(1).X, 1);
  7.  
  8. % training data
  9. y_trn = [];
  10. for i = 1:length(TrnData)
  11.     y_trn = strcat(y_trn,TrnData(i).Y);
  12. end
  13.  
  14. N_trn = length(y_trn);
  15. x_trn = zeros(pixels, N_trn);
  16. i_tmp = 1;
  17.  
  18.  
  19. for i = 1:length(TrnData)
  20.     x_trn(:,i_tmp:(i_tmp+length(TrnData(i).Y)-1)) = TrnData(i).X;
  21.     i_tmp = i_tmp+length(TrnData(i).Y);
  22. end
  23. y_trn = uint8(y_trn)-96;
  24.  
  25. %% LOAD TESTING DATA %%
  26. y_tst = [];
  27. for i = 1:length(TstData)
  28.     y_tst = strcat(y_tst,TstData(i).Y);
  29. end
  30.  
  31. N_tst = length(y_tst);
  32. x_tst = zeros(pixels, N_tst);
  33. i_tmp = 1;
  34.  
  35.  
  36. for i = 1:length(TstData)
  37.     x_tst(:,i_tmp:(i_tmp+length(TstData(i).Y)-1)) = TstData(i).X;
  38.     i_tmp = i_tmp+length(TstData(i).Y);
  39. end
  40. y_tst = uint8(y_tst)-96;
  41.  
  42. %% #1 - simple perceptron algorithm %%
  43.  
  44. w1 = zeros(A, pixels+1);    % classifier in matrix form
  45.  
  46. max_wrong = 0;
  47. last_wrong = 0;
  48. done = 0;
  49.  
  50. while ~done
  51.     wrong = 0;
  52.     done = 1;
  53.     [i wrong max_wrong last_wrong]
  54.     for i = 1:N_trn
  55.         x = [x_trn(:,i) ; 1];
  56.         [~, y_classified] = max(w1*x);
  57.         if(y_classified ~= y_trn(i))
  58.             done = 0;
  59.             wrong = wrong + 1;
  60.             w1(y_classified,:) = w1(y_classified,:) - x';
  61.             w1(y_trn(i),:) = w1(y_trn(i),:) + x';
  62.         end
  63.     end
  64.     last_wrong = max_wrong;
  65.     max_wrong = wrong;
  66. end
  67.  
  68.  
  69. %% clssify and measure label error %%
  70. wrong = 0;
  71. classified = zeros(1, N_tst);
  72. for i = 1:N_tst
  73.     x = [x_tst(:,i) ; 1];
  74.     [~, classified(i)] = max(w1*x);
  75. end
  76.  
  77. error = mean(classified == y_tst) % 0.7384
  78.  
  79.  
  80. %% classify and measure sequence error%%
  81.  
  82. ok_num = 0;
  83. for i = 1:length(TstData)
  84.     [i ok_num]
  85.     y = uint8(TstData(i).Y) - 96;
  86.     X = [TstData(i).X ; ones(1, length(y))];
  87.     [~, y_class] = max((w1*X))
  88.     ok_num = ok_num + all(y_class == y);
  89. end
  90. error = 1 - (ok_num/length(TstData)) % 0.6660
Advertisement
Add Comment
Please, Sign In to add comment