Anteprima
Vedrai una selezione di 6 pagine su 21
Esercitazione con codice per l’ammissione all’esame scritto di Data mining - Classificazione semi-supervisionata  Pag. 1 Esercitazione con codice per l’ammissione all’esame scritto di Data mining - Classificazione semi-supervisionata  Pag. 2
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Esercitazione con codice per l’ammissione all’esame scritto di Data mining - Classificazione semi-supervisionata  Pag. 6
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Esercitazione con codice per l’ammissione all’esame scritto di Data mining - Classificazione semi-supervisionata  Pag. 11
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Esercitazione con codice per l’ammissione all’esame scritto di Data mining - Classificazione semi-supervisionata  Pag. 16
Anteprima di 6 pagg. su 21.
Scarica il documento per vederlo tutto.
Esercitazione con codice per l’ammissione all’esame scritto di Data mining - Classificazione semi-supervisionata  Pag. 21
1 su 21
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Calcolo delle metriche di valutazione

double TP, FP, FN, TN;

double totalePrecisione, totaleTP0, totaleTP1, totaleTP2, totaleFP0, totaleFP1, totaleFP2;

totalePrecisione = totaleTP0 = totaleTP1 = totaleTP2 = totaleFP0 = totaleFP1 = totaleFP2 = TP = FP = FN = TN = 0;

double MediaPrecisione, MediaTP0, MediaTP1, MediaTP2, MediaFP0, MediaFP1, MediaFP2;

MediaPrecisione = MediaTP0 = MediaTP1 = MediaTP2 = MediaFP0 = MediaFP1 = MediaFP2 = 0;

Nel processo di 10-fold cross-validation, il set di dati viene suddiviso in 10 parti (folds). Il modello viene addestrato su 9 di queste parti e testato sulla restante. Questo processo viene ripetuto 10 volte, ogni volta con un diverso fold come set di test.

// Inizializzo l'oggetto trainingSet. Questo oggetto verrà popolato con i dati di addestramento

// Inizializzo l'oggetto testSet. Questo verrà utilizzato per i dati di test.

Instances trainingSet = null;

Instances testSet = null;

for (int i = 0; i < NUMBER_FOLDS; i++) {

01/12/2023 …. - Matricola: …..

Inizializzo

una matrice di confusione (confusionMatrix) utilizzata per valutare le prestazioni del modello di classificazione.

confusionMatrix = new double[Calcoli.NumClusters][Calcoli.NumClusters];
int rows = confusionMatrix.length;
int columns = confusionMatrix[0].length;
String str = ""\t"";

/*Inizializzo tre variabili (Centroide0, Centroide1, Centroide2) utilizzate per contare quanti elementi di ciascuna classe sono associati a un certo centroide con indice 0, per il processo di clustering o classificazione in cui i dati sono assegnati a centroidi monitorandone la distribuzione delle classi nei vari centroidi.*/
int Centroide00 = 0;
int Centroide01 = 0;
int Centroide02 = 0;
int Centroide10 = 0;
int Centroide11 = 0;
int Centroide12 = 0;
int Centroide20 = 0;
int Centroide21 = 0;
int Centroide22 = 0;

/* trainingSet - Restituisce il sottoinsieme del set di dati da utilizzare come set di addestramento durante l'iterazione (fold) della cross-validation. Calcoli.numberOfFolds indica il numero totale di fold */
Instances(trainNoLabel); Filtro.setAttributeIndices("last"); Filtro.setInputFormat(trainNoLabel); Instances dataClusterer = Filter.useFilter(trainNoLabel, Filtro);```html Remove(); EuclideanDistance df = new EuclideanDistance(); Filtro.setAttributeIndices(""" + (trainNoLabel.classIndex() +1)); 01/12/2023 …. - Matricola: ….. Filtro.setInputFormat(trainNoLabel); Instances dataClusterer = Filter.useFilter(trainNoLabel,Filtro); //applico KMeans clustering SimpleKMeans model = new SimpleKMeans(); model.setNumClusters(3); model.setDistanceFunction(df); model.buildClusterer(dataClusterer); Instances centroid = model.getClusterCentroids(); Remove filter2 = new Remove(); filter2.setAttributeIndices(""" + (trainLabel.classIndex() +1)); filter2.setInputFormat(trainLabel); Instances trainLabel2 = Filter.useFilter(trainLabel,filter2); /* dopo aver generato K-Means clustering, considero tutte le istanze etichettate ditraining set e calcolo la distanza di ciascuno di essi dai centroidi. Assegnol'istanza al cluster più vicino*/ for (int j = 0; j < trainLabel2.size(); j++){ Instance InstanceEtic = trainLabel.get(j); Instance instance = ```
trainLabel2.instance(j);
EuclideanDistance e = new EuclideanDistance(centroid);
double[] vettDist1 = new double[3];
vettDist1[0] = e.distance(instance, centroid.get(0));
vettDist1[1] = e.distance(instance, centroid.get(1));
vettDist1[2] = e.distance(instance, centroid.get(2));
int MinimoCentroide = Calcoli.MinimoIndice(vettDist1);
/*identifico l'etichetta di ciascun cluster basandomi sul numero di istanze etichettate
del set di addestramento assegnate ad esso*/
if (MinimoCentroide == 0) {
    if (InstanceEtic.classValue() == 0.0) {
        Centroide00++;
    } else if (InstanceEtic.classValue() == 1.0) {
        Centroide01++;
    } else {
        Centroide02++;
    }
} else if (MinimoCentroide == 1) {
    if (InstanceEtic.classValue() == 0.0) {
        Centroide10++;
    } else if (InstanceEtic.classValue() == 1.0) {
        Centroide11++;
    } else {
        Centroide12++;
    }
} else {
    if (InstanceEtic.classValue() == 0.0) {
        Centroide20++;
    } else if (InstanceEtic.classValue() == 1.0) {
        Centroide21++;
    } else {
        Centroide22++;
    }
}
01/12/2023 …. - Matricola: …..
}}
System.out.println(

"CENTROIDI CONTEGGI"

0: Centroide00 Centroide01 Centroide02

1: Centroide10 Centroide11 Centroide12

2: Centroide20 Centroide21 Centroide22

double[] alfa1 = new double[3];

alfa1[0] = Centroide00;

alfa1[1] = Centroide01;

alfa1[2] = Centroide02;

double[] alfa2 = new double[3];

alfa2[0] = Centroide10;

alfa2[1] = Centroide11;

alfa2[2] = Centroide12;

double[] alfa3 = new double[3];

alfa3[0] = Centroide20;

alfa3[1] = Centroide21;

alfa3[2] = Centroide22;

double[] Centroide = new double[3];

Centroide[0] = (double) (Calcoli.MaggioreIndice(alfa1));

Centroide[1] = (double) (Calcoli.MaggioreIndice(alfa2));

Centroide[2] = (double) (Calcoli.MaggioreIndice(alfa3));

Remove filter3 = new Remove();

filter3.setAttributeIndices("" + (testSet.classIndex() + 1));

filter3.setInputFormat(testSet);

Instances testSet2 = Filter.useFilter(testSet,

filter3);
for (int x = 0; x < testSet2.size(); x++) {
    int count = 1;
    Instance instance = testSet2.get(x);
    Instance InstanceEtic = testSet.get(x);
    EuclideanDistance e = new EuclideanDistance(centroid);
    double[] vettDist2 = new double[3];
    vettDist2[0] = e.distance(instance, centroid.get(0));
    vettDist2[1] = e.distance(instance, centroid.get(1));
    vettDist2[2] = e.distance(instance, centroid.get(2));
    int MinimoCentroide = Calcoli.MinimoIndice(vettDist2);
    double result = Centroide[MinimoCentroide];
    double classValue = InstanceEtic.classValue();
    confusionMatrix[(int) result][(int) classValue] = confusionMatrix[(int) result][(int) classValue] + count;
}
01/12/2023 …. - Matricola: …..
System.out.println("CONFUSION MATRIX: ");
System.out.println("\n");
for (int y = 0; y < rows; y++) {
    for (int z = 0; z < columns; z++) {
        str += confusionMatrix[y][z] + "\t";
    }
    System.out.println(str + "");
    str = "\t";
}
/** Stampo risultati ottenuti*/
double TP0 = Calcoli.numTruePositives(confusionMatrix,
0);
double TP1 = Calcoli.numTruePositives(confusionMatrix, 1);
double TP2 = Calcoli.numTruePositives(confusionMatrix, 2);
double TN0 = Calcoli.numTrueNegatives(confusionMatrix, 0);
double TN1 = Calcoli.numTrueNegatives(confusionMatrix, 1);
double TN2 = Calcoli.numTrueNegatives(confusionMatrix, 2);
double FP0 = Calcoli.numFalsePositives(confusionMatrix, 0);
double FP1 = Calcoli.numFalsePositives(confusionMatrix, 1);
double FP2 = Calcoli.numFalsePositives(confusionMatrix, 2);
double FN0 = Calcoli.numFalseNegatives(confusionMatrix, 0);
double FN1 = Calcoli.numFalseNegatives(confusionMatrix, 1);
double FN2 = Calcoli.numFalseNegatives(confusionMatrix, 2);

System.out.println("<br>");
System.out.println("TP(0): " + TP0);
System.out.println("FP(0): " + FP0);
System.out.println("FN(0): " + FN0);
System.out.println("TN(0): " + TN0);
System.out.println("TP(1): " + TP1);
System.out.println("FP(1): " + FP1);
System.out.println("FN(1): " + FN1);
System.out.println("TN(1): " + TN1);
System.out.println("TP(2): " + TP2);
System.out.println("FP(2): " + FP2);
System.out.println("FN(2): " + FN2);
System.out.println("TN(2): " + TN2);
TP1);
System.out.println("FP(1):" + " " + FP1);
System.out.println("FN(1):" + " " + FN1);
System.out.println("TN(1):" + " " + TN1);
System.out.println("TP(2):" + " " + TP2);
System.out.println("FP(2):" + " " + FP2);
System.out.println("FN(2):" + " " + FN2);
System.out.println("TN(2):" + " " + TN2);
System.out.println("\n");
TP = TP0 + TP1 + TP2;
TN = TN0 + TN1 + TN2;
FP = FP0 + FP1 + FP2;
FN = FN0 + FN1 + FN2;
if (TP + TN + FP + FN > 0){
    accuracy[i] = (TP + TN) / (TP + TN + FP + FN);
}
truePositiveRateA0[i] = Calcoli.truePositiveRate(TP0, FN0);
01/12/2023 …. - Matricola: …..
truePositiveRateA1[i] = Calcoli.truePositiveRate(TP1, FN1);
truePositiveRateA2[i] = Calcoli.truePositiveRate(TP2, FN2);
falsePositiveRateA0[i] = Calcoli.falsePositiveRate(FP0, TN0);
falsePositiveRateA1[i] = Calcoli.falsePositiveRate(FP1, TN1);
falsePositiveRateA2[i] = Calcoli.falsePositiveRate(FP2,
TN2); totalePrecisione += accuracy[i]; totaleTP0 += truePositiveRateA0[i]; totaleTP1 += truePositiveRateA1[i]; totaleTP2 += truePositiveRateA2[i]; totaleFP0 += falsePositiveRateA0[i]; totaleFP1 += falsePositiveRateA1[i]; totaleFP2 += falsePositiveRateA2[i]; } MediaPrecisione = (totalePrecisione / NUMBER_FOLDS) * 100; MediaTP0 = (totaleTP0 / NUMBER_FOLDS) * 100; MediaTP1 = (totaleTP1 / NUMBER_FOLDS) * 100; MediaTP2 = (totaleTP2 / NUMBER_FOLDS) * 100; MediaFP0 = (totaleFP0 / NUMBER_FOLDS) * 100; MediaFP1 = (totaleFP1 / NUMBER_FOLDS) * 100; MediaFP2 = (totaleFP2 / NUMBER_FOLDS) * 100; System.out.println(" FOLD ACCURACY: " + String.format("%.2f%%", MediaPrecisione)); System.out.println("TPR - 0: " + String.format("%.2f%%", MediaTP0)); System.out.println("FPR - 0: " + String.format("%.2f%%", MediaFP0)); System.out.println("TPR - 1 : " + String.format("%.2f%%", MediaTP1)); System.out.println("FPR - 1: " + String.format("%.2f%%", MediaFP1));
MediaFP1));
System.out.println("TPR - 2: " + String.format("%.2f%%", MediaTP2));
System.out.println("FPR - 2: " + String.format("%.2f%%", MediaFP2)+"\nFINE");
} catch (Exception e) {
    e.printStackTrace();
}
}
}
//Calcoli.java
//…..
package we
Dettagli
A.A. 2022-2023
21 pagine
1 download
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher zanzy83-votailprof di informazioni apprese con la frequenza delle lezioni di Data mining e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università telematica "e-Campus" di Novedrate (CO) o del prof Antonelli Michela.