Meilleur auteur de réponses
Codification de données avec Accord.Statistics.Filters.Codification

Question
-
Bonjour à tous,
J'ai un tableau double de type string qui contient des données que je récupère depuis un fichier csv. je voudrais codifier ces données pour les faire passer à mon algorithme d'apprentissage.
voici les données que contient le fichier csv :
ssid1 bssid1 rssi1 signal1 GLF_LAPTOP 58:b6:33:a6:a1:b8 -58 69 GLF_ENROLLMENT 58:b6:33:e6:a1:b8 -57 70 GLF_ENROLLMENT d8:38:fc:ff:27:d8 -49 80 GLF_ENROLLMENT 30:87:d9:ed:f3:88 -31 95 GLF_ENROLLMENT 74:3e:2b:f6:35:c8 -46 83 GLF_ENROLLMENT 0c:f4:d5:cd:d5:e8 -48 81 GLF_ENROLLMENT 30:87:d9:ed:f3:88 -36 92 Je veux que le codificateur puisse codifier chaque colonne de chaque élément du tableau avec un type précis tel que les deux premières colonnes c'est des string et les deux dernières c'est des doubles.
Le problème que je rencontre c'est que comment puisse-je appliquer une codification pour chaque colonne du tableau, j'ai essayé avec le code suivant
string[][] data_input_app = input.GetColumns(0, 1, 2, 3); string[] inputNames = new[] { "ssid1", "bssid1", "rssi1", "signal1"}; codebookin = new Codification(inputNames, data_input_app) { CodificationVariable.Ordinal, CodificationVariable.Ordinal, CodificationVariable.Continuous, CodificationVariable.Continuous, };
mais avec ça il applique la première codification pour la première lignes (du coup le premier tableau car il s'agit d'un tableau de double ), la deuxième codification pour la deuxième ligne etc ...or ce que je cherche c'est plutôt appliquer une codification pour chaque colonne du tableau de la ligne "i" et faire de même pour toutes les lignes
Réponses
-
Bonjour,
Après une petite recherche je suppose qu'il s'agit de ça ?
http://accord-framework.net/docs/html/T_Accord_Statistics_Filters_Codification.htm
Comme je viens juste de voir ça je n'ai pas eu l'occasion d'éplucher les exemples qu'ils donnent, alors je l'ai fait "à l'ancienne".
J'ai déclaré une classe
class DonneeImport { public string ssid { get; set; } public string bssid { get; set; } public float rssi { get; set; } public float signal { get; set; } }
puis j'ai lancé le traitement comme ceci :
System.IO.StreamReader file = new StreamReader(Filepath); DonneeImport di = new DonneeImport(); string line = null; while((line = file.ReadLine())!= null) { MessageBox.Show(line); char[] sep = { ';' }; string[] sp = line.Split(sep); di.ssid = sp[0]; di.bssid = sp[1]; di.rssi = float.Parse(sp[2]); di.signal = float.Parse(sp[3]); } MessageBox.Show("Fin de traitement");
Avec un point d'arrêt sur la dernière accolade j'ai pu m'assurer que les champs de di correspondaient bien aux valeurs figurant sur la ligne.
Pour ça, bien entendu, en préparation du traitement, après avoir récupéré les valeurs dans un fichier, j'ai remplacé les tabulations par des points-virgules, et supprimé les espaces.
Après je suppose que l'apport de la plateforme proposée est d'améliorer la productivité du développement, mais avant de me lancer là-dedans je voudrais m'assurer que nous parlons de la même chose.
- Marqué comme réponse Nina ZaekovaMicrosoft contingent staff, Moderator jeudi 19 juillet 2018 06:43
-
Bonjour,
Je vous remercie pour cette réponse.
Au fait, en travaillant avec le machine learning je dois lui passer en paramètre un input de type double[][] ou int[][] et c'est la cause pour laquelle je n'ai pas travaillé avec des classes d'objets.
Comme la semaine passée je devais résoudre le problème au plus vite j'ai carrément récupéré mes données depuis la fichier csv dans un DataTable ce qui facilite de déterminer chaque colonne.
le code que j'ai utilisé et le suivant:
public void LearningAlgorithme(DataTable dt) { codebookin = new Codification() { { "ssid1", CodificationVariable.Ordinal}, { "bssid1", CodificationVariable.Ordinal}, { "rssi1", CodificationVariable.Continious}, { "signal1", CodificationVariable.Continious}, }; codebookin.Learn(dt); int[][] inputs = codebookin.Apply(dt, "ssid1", "bssid1", "signal1", "ssid2", "bssid2","signal2", "ssid3", "bssid3", "signal3", "ssid4", "bssid4", "signal4").ToJagged().To<int[][]>(); int[] outputs = codebookin.Apply(dt, "position").ToVector().To<int[]>(); var learner = new RandomForestLearning(); var randomForest = learner.Learn(inputs, outputs); }
- Marqué comme réponse Nina ZaekovaMicrosoft contingent staff, Moderator jeudi 19 juillet 2018 06:43
Toutes les réponses
-
Bonjour,
Après une petite recherche je suppose qu'il s'agit de ça ?
http://accord-framework.net/docs/html/T_Accord_Statistics_Filters_Codification.htm
Comme je viens juste de voir ça je n'ai pas eu l'occasion d'éplucher les exemples qu'ils donnent, alors je l'ai fait "à l'ancienne".
J'ai déclaré une classe
class DonneeImport { public string ssid { get; set; } public string bssid { get; set; } public float rssi { get; set; } public float signal { get; set; } }
puis j'ai lancé le traitement comme ceci :
System.IO.StreamReader file = new StreamReader(Filepath); DonneeImport di = new DonneeImport(); string line = null; while((line = file.ReadLine())!= null) { MessageBox.Show(line); char[] sep = { ';' }; string[] sp = line.Split(sep); di.ssid = sp[0]; di.bssid = sp[1]; di.rssi = float.Parse(sp[2]); di.signal = float.Parse(sp[3]); } MessageBox.Show("Fin de traitement");
Avec un point d'arrêt sur la dernière accolade j'ai pu m'assurer que les champs de di correspondaient bien aux valeurs figurant sur la ligne.
Pour ça, bien entendu, en préparation du traitement, après avoir récupéré les valeurs dans un fichier, j'ai remplacé les tabulations par des points-virgules, et supprimé les espaces.
Après je suppose que l'apport de la plateforme proposée est d'améliorer la productivité du développement, mais avant de me lancer là-dedans je voudrais m'assurer que nous parlons de la même chose.
- Marqué comme réponse Nina ZaekovaMicrosoft contingent staff, Moderator jeudi 19 juillet 2018 06:43
-
-
Bonjour,
Je vous remercie pour cette réponse.
Au fait, en travaillant avec le machine learning je dois lui passer en paramètre un input de type double[][] ou int[][] et c'est la cause pour laquelle je n'ai pas travaillé avec des classes d'objets.
Comme la semaine passée je devais résoudre le problème au plus vite j'ai carrément récupéré mes données depuis la fichier csv dans un DataTable ce qui facilite de déterminer chaque colonne.
le code que j'ai utilisé et le suivant:
public void LearningAlgorithme(DataTable dt) { codebookin = new Codification() { { "ssid1", CodificationVariable.Ordinal}, { "bssid1", CodificationVariable.Ordinal}, { "rssi1", CodificationVariable.Continious}, { "signal1", CodificationVariable.Continious}, }; codebookin.Learn(dt); int[][] inputs = codebookin.Apply(dt, "ssid1", "bssid1", "signal1", "ssid2", "bssid2","signal2", "ssid3", "bssid3", "signal3", "ssid4", "bssid4", "signal4").ToJagged().To<int[][]>(); int[] outputs = codebookin.Apply(dt, "position").ToVector().To<int[]>(); var learner = new RandomForestLearning(); var randomForest = learner.Learn(inputs, outputs); }
- Marqué comme réponse Nina ZaekovaMicrosoft contingent staff, Moderator jeudi 19 juillet 2018 06:43
-
-
-
-
-