Emania

SO SVM

Jan 10th, 2017
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 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. x_trn = [x_trn; zeros(1, N_trn)];
  50.  
  51. while ~done
  52.  
  53. [~, classified] = max(w1*x_trn);
  54. missclassified = classified ~= y_trn;
  55. disp(sum(missclassified));
  56. missclassified_idx = find(missclassified);
  57. done = sum(missclassified) == 0;
  58.  
  59. for i = 1:sum(missclassified)
  60. idx = missclassified_idx(i);
  61. w1(classified(idx),:) = w1(classified(idx),:) - x_trn(:, idx)';
  62. w1(y_trn(idx),:) = w1(y_trn(idx),:) + x_trn(:, idx)';
  63. end
  64. end
  65.  
  66.  
  67. %% clssify and measure label error %%
  68. wrong = 0;
  69. % classified = zeros(1, N_tst);
  70.  
  71. [~, classified] = max(w1*[x_tst;zeros(1, size(x_tst, 2))]);
  72. error = mean(classified == y_tst); % 0.7384
  73. disp(error);
  74.  
  75. %% classify and measure sequence error%%
  76.  
  77. ok_num = 0;
  78. for i = 1:length(TstData)
  79. y = uint8(TstData(i).Y) - 96;
  80. X = [TstData(i).X ; ones(1, length(y))];
  81. [~, y_class] = max((w1*X));
  82. ok_num = ok_num + all(y_class == y);
  83. end
  84. error = 1 - (ok_num/length(TstData)); % 0.6660
  85. disp(error);
  86.  
  87.  
  88. %% learn sequences %%
Advertisement
Add Comment
Please, Sign In to add comment