Skip to content

Instantly share code, notes, and snippets.

@jogonba2
Last active August 29, 2015 14:21
Show Gist options
  • Save jogonba2/5ddf3b6280d6b63ffc73 to your computer and use it in GitHub Desktop.
Save jogonba2/5ddf3b6280d6b63ffc73 to your computer and use it in GitHub Desktop.
Multinomial classificator Octave.
#!/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