Last active
August 29, 2015 14:21
-
-
Save jogonba2/5ddf3b6280d6b63ffc73 to your computer and use it in GitHub Desktop.
Multinomial classificator Octave.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/octave -qf | |
if(nargin!=1) | |
printf("Usage: multinomial.m <data_filename>"); | |
exit(1); | |
end | |
arglist=argv(); | |
datafile=arglist{1}; | |
disp("Loading data..."); | |
load(datafile); | |
disp("Data load complete."); | |
## Aleatorización de las filas para escoger luego los conjuntos de train/test ## | |
[nrows,ncols] = size(data); | |
rand("seed",23); | |
perm=randperm(nrows); | |
pdata=data(perm,:); | |
## Obtención del 90% de filas para test y 10% de filas para train ## | |
trper=0.9; | |
ntr=floor(nrows*trper); | |
nte=nrows-ntr; | |
tr=pdata(1:ntr,:); # Conjunto de entrenamiento # | |
te=pdata(ntr+1:nrows,:); # Conjunto de test # | |
################################################################################# | |
[nrows,ncols] = size(tr); | |
rows_ham = tr(find(tr(:,end)==0),1:end-1); | |
rows_spam = tr(find(tr(:,end)==1),1:end-1); | |
prior_ham = rows(rows_ham)/nrows; | |
prior_spam = rows(rows_spam)/nrows; | |
sum_ham = sum(rows_ham); | |
sum_spam = sum(rows_spam); | |
p_ham = (1/sum(sum_ham,2))*sum_ham; | |
p_spam = (1/sum(sum_spam,2))*sum_spam; | |
disp(prior_ham),disp(prior_spam); | |
################ Pruebas de clasificacion con bucle ################ | |
log_p_ham = log(p_ham); | |
log_p_spam = log(p_spam); | |
n_errors = 0; | |
for i=1:rows(te) | |
x = te(i,1:end-1); | |
g_ham = log_p_ham*x' + log(prior_ham); | |
g_spam = log_p_spam*x' + log(prior_spam); | |
if(max(g_ham,g_spam)==g_ham) | |
if(te(i,end)==1) | |
n_errors = n_errors + 1; | |
end | |
else | |
if(te(i,end)==0) | |
n_errors = n_errors + 1; | |
end | |
end | |
endfor | |
error = n_errors/rows(te); | |
disp("El % de error es: "),disp(error); | |
########################################################## | |
################ Pruebas de clasificacion con operaciones matriciales ################ | |
x = te(:,1:end-1); | |
log_p_ham = log(p_ham); | |
log_p_spam = log(p_spam); | |
g_ham = (log_p_ham*x')+prior_ham; | |
g_spam = (log_p_spam*x')+prior_spam; | |
correct_clases = g_ham > g_spam; | |
correct_clases = correct_clases == te(:,end)'; | |
error = sum(correct_clases)/length(correct_clases); | |
disp("El % de error con ops matriciales es: "),disp(error); | |
########################################################## |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment