Recursive Feature Elimination with SVM avec le classifieur SMO de Weka

MLSamb Messages postés 4 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 27 avril 2010 - 26 avril 2010 à 20:48
MLSamb Messages postés 4 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 27 avril 2010 - 27 avril 2010 à 11:57
Salut tout le monde

voici mon problème cela fait presque un mois que je travaille sur un algorithme de sélection d'attribut pour le datamining.
j'ai choisi d'implémenté l'algorithme RFE-SVM (en java) pour tester les performances de cet algorithme sur les emsembles d'apprentissages de Weka, c'est à dire des bases au formats .arff.
voici le code source que j'ai écris:

import java.io.FileReader;
import java.io.IOException;
import weka.classifiers.functions.SMO;
import weka.classifiers.Evaluation;
import weka.core.Instances;
public class algoRFESVM {

/**
* takes an ARFF file as first argument, the number of indices to remove
* as second and thirdly whether to invert or not (true/false).
* Dumps the generated data to stdout.
*/
public static Instances reste;
public static Instances liste;

public static void main(String[] args) throws IOException, Exception
{

// prepare dataset

Instances train = new Instances(new FileReader("data//S//sonartrain.arff"));
train.setClassIndex(train.numAttributes() - 1);
System.out.println("La Base d'apprentissage a: "+train.numAttributes()+" attributs");

Instances test = new Instances(new FileReader("data//S//sonartest.arff"));
test.setClassIndex(test.numAttributes()-1);
System.out.println("La Base teste a: "+test.numAttributes()+" attributs");

reste = train;


while (reste.numAttributes() > 1)
{
// Construction du modéle de Classifieur
SMO smo = new SMO();
smo.buildClassifier(reste);
System.out.println();

System.out.println("Performance du classifieur construit avec "+reste.numAttributes()+" attributs");
// Evaluation du modéle construit
Evaluation evaluation = new Evaluation(reste);
evaluation.evaluateModel(smo, train);
System.out.println(evaluation.toSummaryString());
/*Create a Weka AS Evaluation algorithm */

// weights and indices in sparse format
double[][][] sparseWeights = smo.sparseWeights();
int[][][] sparseIndices = smo.sparseIndices();
// weights into non sparse format
double[] weights = new double[reste.numAttributes()];
for (int i = 0; i < sparseIndices[0][1].length; i++)
weights[sparseIndices[0][1][i]] = sparseWeights[0][1][i];

for( int i = 0; i< reste.numAttributes()-1; i++)
System.out.println("Attribut "+i+" rang "+weights[i]);

// trouver l'attribut ayant le plus petit score
int indice = (int) weights[0];
int numRemove = 0;
for (int i = 1; i < weights.length-1; i++)
{

if (indice < weights[i])
{
indice=(int) weights[i];
numRemove=i;
}
}
System.out.println("L'indice de l'attribut à enlever est: " +numRemove);
System.out.println();

//liste.add(reste.attribute(numRemove));
reste.deleteAttributeAt(numRemove);
System.out.println("Le nombre d'attribut restant est: "+reste.numAttributes());


}
}
}

Maintenat j'attends vos remarques et suggestions car j'ai pas l'habitude d'implémenter ce genre d'algorithmes. Merci d'avance à tous !

2 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
26 avril 2010 à 23:46
Bonsoir, je déplace le sujet sur le bon forum ...

Peg'
Admin Codes-Sources
0
MLSamb Messages postés 4 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 27 avril 2010
27 avril 2010 à 11:57
Merci Admin!!!
0
Rejoignez-nous