Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %% LOAD TRAINING DATA %%
- load('ocr_names.mat');
- A = 26;
- pixels = size(TrnData(1).X, 1);
- % training data
- y_trn = [];
- for i = 1:length(TrnData)
- y_trn = strcat(y_trn,TrnData(i).Y);
- end
- N_trn = length(y_trn);
- x_trn = zeros(pixels, N_trn);
- i_tmp = 1;
- for i = 1:length(TrnData)
- x_trn(:,i_tmp:(i_tmp+length(TrnData(i).Y)-1)) = TrnData(i).X;
- i_tmp = i_tmp+length(TrnData(i).Y);
- end
- y_trn = uint8(y_trn)-96;
- %% LOAD TESTING DATA %%
- y_tst = [];
- for i = 1:length(TstData)
- y_tst = strcat(y_tst,TstData(i).Y);
- end
- N_tst = length(y_tst);
- x_tst = zeros(pixels, N_tst);
- i_tmp = 1;
- for i = 1:length(TstData)
- x_tst(:,i_tmp:(i_tmp+length(TstData(i).Y)-1)) = TstData(i).X;
- i_tmp = i_tmp+length(TstData(i).Y);
- end
- y_tst = uint8(y_tst)-96;
- %% #1 - simple perceptron algorithm %%
- w1 = zeros(A, pixels+1); % classifier in matrix form
- max_wrong = 0;
- last_wrong = 0;
- done = 0;
- x_trn = [x_trn; zeros(1, N_trn)];
- while ~done
- [~, classified] = max(w1*x_trn);
- missclassified = classified ~= y_trn;
- disp(sum(missclassified));
- missclassified_idx = find(missclassified);
- done = sum(missclassified) == 0;
- for i = 1:sum(missclassified)
- idx = missclassified_idx(i);
- w1(classified(idx),:) = w1(classified(idx),:) - x_trn(:, idx)';
- w1(y_trn(idx),:) = w1(y_trn(idx),:) + x_trn(:, idx)';
- end
- end
- %% clssify and measure label error %%
- wrong = 0;
- % classified = zeros(1, N_tst);
- [~, classified] = max(w1*[x_tst;zeros(1, size(x_tst, 2))]);
- error = mean(classified == y_tst); % 0.7384
- disp(error);
- %% classify and measure sequence error%%
- ok_num = 0;
- for i = 1:length(TstData)
- y = uint8(TstData(i).Y) - 96;
- X = [TstData(i).X ; ones(1, length(y))];
- [~, y_class] = max((w1*X));
- ok_num = ok_num + all(y_class == y);
- end
- error = 1 - (ok_num/length(TstData)); % 0.6660
- disp(error);
- %% learn sequences %%
Advertisement
Add Comment
Please, Sign In to add comment