Classificatore K-NN 1

Похожие документы
Corso di Riconoscimento di Forme. Sommario: Matrice di confusione Cross validation Prestazioni nel KNN

Laboratorio di Apprendimento Automatico. Fabio Aiolli Università di Padova

Sistemi per la gestione delle basi di dati

6. Partial Least Squares (PLS)

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

Classificazione Mario Guarracino Laboratorio di Sistemi Informativi Aziendali a.a. 2006/2007

Naïve Bayesian Classification

Algoritmi di classificazione supervisionati

Business Intelligence per i Big Data

Valutazione e Selezione del Modello

Stima della qualità dei classificatori per l analisi dei dati biomolecolari

Validazione dei modelli Strumenti quantitativi per la gestione

Riconoscimento immagini con Keras e Tensorflow Gabriele Baldi

Analisi Discriminante Strumenti quantitativi per la gestione

Backpropagation in MATLAB

Programmare con MATLAB c Parte 5 Cicli: for e while

Riconoscimento automatico di oggetti (Pattern Recognition)

5.1 Strutture, predittori e identificazione con le rappresentazioni di stato in Matlab

Multi classificatori. Prof. Matteo Golfarelli Alma Mater Studiorum - Università di Bologna

Valutazione delle Prestazioni di un Classificatore. Performance Evaluation

Lab. di Sistemi Operativi - Esercitazione - Comandi Shell

1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso

FemCode: libreria Matlab per FEM

RETI NEURALI MATLAB & OCTAVE. Benzi Francesco

Laboratorio di Python

Esempi di applicazioni di reti neurali

Progetto: Dama. 1 - Descrizione. 2 - Regole del gioco. Appello di febbraio 2003

Esempio di prova di laboratorio

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Esercizi di MatLab. Sommario Esercizi di introduzione a MatLab per il corso di Calcolo Numerico e Laboratorio, A.A

Classificazione. Classificatore di Bayes Approccio parametrico (distribuzione Multinormale) Approccio non parametrico (Parzen Window)

- comando sort: con chiavi di ordinamento -

Introduzione al MATLAB c Parte 3 Script e function

Analisi discriminante in R. Strumenti quantitativi per la gestione

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Транскрипт:

Classificatore K-NN 1

Esercizio: Implementare il classificatore K-NN: [labelassegnate_test error_test] = mio_knn( ds_train, ds_test, k) Traccia: La funzione DIST(A,B') del toolbox reti neurali calcola la distanza euclidea fra ciascuna riga di A e ciascuna riga di B Analogamente la funzione prtools DISTM calcola la distanza euclidea (al quadrato) fra ciascuna riga di A e ciascuna riga di B La funzione sort permette di ordinare una matrice e di ricavare gli indici di ordinamento 2

function [labelassegnate_test error_test] =... mio_knn( ds_train, ds_test, k) nclassi= length(ds_train.lablist); npatterns_trn= ds_train.objsize; npatterns_tst= ds_test.objsize; %train_features = ds_train.data %train_labels = ds_train.nlab %calcolo distanze %distanze_eucl(its,itr) = distanza fra il pattern 'its' di test e quello 'itr' di train distanze_eucl = dist (ds_test.data, ds_train.data'); %Ordino le distanze per righe e memorizzo gli indici di ordinamento [distanze_sort idx_sort]=sort(distanze_eucl,2); %NB: % La riga 'idx_sort(its,:)' contiene l'indice dei vicini del pattern 'its' %prendo gli indici dei k più vicini 3

idx_primivicini=idx_sort(:,1:k); % Estraggo le labels dei k pattern piu' vicini % labels_primivicini = ds_train.nlab(idx_primivicini); labelassegnate_test = zeros(npatterns_tst,1); for its=1:npatterns_tst, %classifico il pattern di test i-esimo %conto il numero di occorrenze di ciascuna label for c=1:nclassi, occorrenze(c) = sum(labels_primivicini(its) == c); end %prendo il massimo [tmp, classe_max] = max(occorrenze+rand(1,nclassi)); labelassegnate_test(its) = classe_max; end error_test =mean(labelassegnate_test ~= ds_test.nlab) 4

%il ciclo for interno equivale a % occorrenze = sum([ones(nclassi,1)*labels_primivicini(its)' ==... arrayindiciclassi],2);% %dove % arrayindiciclassi=[1:nclassi]'*ones(1,k); 5

Il K-NN nei PR-Tools help knnc KNNC K-Nearest Neighbor Classifier [W,K,E] = KNNC(A,K) [W,K,E] = KNNC(A) INPUT A Dataset K Number of the nearest neighbors (optional; default: K is optimized with respect to the leave-one-out error on A) OUTPUT W k-nn classifier K Number of the nearest neighbors used E The leave-one-out error of the KNNC 6

Esempio ds = gendatb(100); W = knnc(ds, 5); 7

8

Per il classificatore KNN esiste una funzione specifica di stima dell'errore help testk TESTK Error estimation of the K-NN rule E = TESTK(A,K,T) INPUT A Training dataset K Number of nearest neighbors ( T Test dataset (default leave-one-out) OUTPUT E Estimated error of the K-NN rule DESCRIPTION Tests a dataset T on the training dataset A using the K-NN rule and returns the classification error E. In case no set T is provided, the leave-one-out error estimate on A is returned. The advantage of using TESTK over TESTC is that it enables leave-one-out error estimation. 9

Stima dei paramatri del K-NN La stima dei parametri del K-NN può essere eseguita mediante l'uso di un validation set (come per gli altri classificatori); oppure mediante il metodo del leave-one-out. Il leave-one-out può essere visto come una sorta di numpattern-crossvalidation, in cui ciascun pattern del training set viene classificato utilizzando tutti gli altri pattern dello stesso data set. Nota: Il leave-one-out (per la stima di k) è implementato nella funzione KNNC dei PRTools 10

Esercizio: Stima del valore ottimale di K tramite validation set Scelto un dataset, dividetelo in un set di design e un set di test. Dal set di design estraete un training set ed un validation set. Costruite un set di classificatori k-nn con vari valori di k. Valutate l'errore sul train, test, validation. - quale sarebbe stato l'errore sul test se avessimo scelto il k migliore basandoci sui risultati di errore sul training set? - quale sarebbe stato l'errore sul test se avessimo scelto il k migliore basandoci sui risultati sul VALIDATION set? - tabellate i dati e fate un grafico dell errore al variare di k - Visualizzare la superficie di decisione ottenuta con il valore di K ottimale e col K peggiore %Calcolo andamento delle prestazioni del classificatore KNN al variare del parametro K (TRACCIA) k_max = 20 ds_full = gendatb(200); [ds_trn_full, ds_tst] = gendat(ds_full,0.5); 11

[ds_trn, ds_val]= gendat(ds_trn_full,0.60); for k=1:k_max, train_err(k) = testk(ds_trn, k); val_err(k) = testk(ds_trn, k, ds_val); tst_err(k) = testk(ds_trn, k, ds_tst); end %Calcolo valore ottimale di K [tmp k_best] = min(val_err) %Visulizzo andamento errore figure(1); plot(val_err, 'k'); hold on; plot(tst_err, 'r'); plot(train_err, 'b'); legend('validation', 'test', train ) hold off; 12

%Creo il classificatore e visualizzo la sup. di decisione W = knnc(ds_trn, k_best); figure(2); scatterd(ds_tst); hold on; plotc(w); hold off; figure(3); scatterd(ds_trn); hold on; plotc(w); hold off; 13

Esercizio: Classificate un dataset (spazio delle features a 2 dimensioni) utilizzando un classificatore k-nn ed un classificatore lineare. Calcolate l errore e visualizzate le superfici di decisione TRACCIA o Scegliere il dataset o Dividere dataset in train e test o Visualizzare o Creare classificatore Lineare e KNN (quali parametri?) o Classificare training e test ( label e prob a posteriori) o Calcolo errore o Visualizzazione superficie decisione di entrambi i classificatori, sovrapponendola al training e al test set 14

Esempio di svolgimento A=gendatl([500,200],1.5); [ds_train, ds_test]=gendat(a,0.2); figure(1) scatterd(ds_train) title('training SET') figure(2) scatterd(ds_test) title('test SET') wlin=ldc(ds_train,0.2); [wknn,k, errtrain_knn]=knnc(ds_train); %errore train classificatore lineare errtrain_lin=testc(ds_train*wlin) %classifico il test ris_lin= ds_test*wlin; probpost_lin=+classc(ris_lin) labelassegnate_lin= labeld(ris_lin) 15

ris_knn= ds_test*wknn; probpost_knn=+classc(ris_knn) labelassegnate_knn= labeld(ris_knn) %calcolo errore sul test errtest_lin=testc(ris_lin) % errtest_knn= testc(ris_knn); errtest_knn=testk(ds_train,k,ds_test) errore=[errtrain_lin,errtest_lin ;... errtrain_knn, errtest_knn]*100; % visualizzo superficie decisione figure(1) hold on plotc(wlin); plotc(wknn); figure(2) hold on plotc(wlin); plotc(wknn); 16