8
votes

L'ensemble de train et de test ne sont pas une erreur compatible dans Weka?

J'essaie de tester mon modèle avec un nouveau jeu de données. J'ai fait la même étape de prétraitement que j'ai fait pour construire mon modèle. J'ai comparé deux fichiers mais il n'y a pas de problèmes. J'ai tous les attributs (Train VS Test Dataset) dans le même ordre, les mêmes noms d'attribut et types de données. Mais je ne suis toujours pas capable de résoudre le problème. Le train et le test des dossiers semble être similaire, mais l'explorateur Weka me donne une erreur distinction de l'ensemble de train et de test ne sont pas compatibles. Comment résoudre cette erreur? Y a-t-il un moyen de faire un format de fichier test.Arff comme train.Arff? S'il vous plaît quelqu'un m'aider.

Voici la capture d'écran de comparaison de fichiers


5 commentaires

C'est un peu difficile pour moi de comprendre votre question. Pouvez-vous montrer plus de détails?


Bonjour Anniekimless, merci pour votre réponse. J'ai construit un modèle de classification avec Data Set Train.ARFF et j'essaie maintenant de prédire le résultat pour le fichier de test Test.ArFF à l'aide de Weka Explorer. Les deux fichiers Train and Test semble être similaire mais Weka Explorer consiste à lancer une erreur disant que le jeu de train et de test ne sont pas compatibles. Comment résoudre cette erreur? Y a-t-il un moyen de faire un format de fichier test.arf comme train.arff?


Tous les trois attributs sont des attributs nominaux suivis de toutes les valeurs possibles citées par '{}'. Une de mes hypothèses est que les valeurs possibles ne sont pas les mêmes. Par exemple, pour Ressource Attribut Il n'y a pas de 199 dans le fichier de test, s'il s'agit d'un fichier de formation. Qu'est-ce que tu penses?


Bonjour Anniekim, merci beaucoup. Vos intrants étaient vraiment utiles. Comme vous soupçonnez que le problème est avec le type nominal. S'il vous plaît poster votre commentaire comme réponse. Merci beaucoup.


D'accord, vous êtes les bienvenus.


6 Réponses :


2
votes

Voir suivant Réponse , votre train.arff et Test.ArFF devraient avoir la même tête. Selon votre comparaison, ils sont similaires mais non identiques.


1 commentaires

Salut Atilla, j'ai eu la solution. Le problème est des en-têtes sont similaires mais non identiques. J'ai changé et je l'ai vus. Je vous remercie beaucoup pour votre aide.



8
votes

la même chose avec le commentaire que je suis parti après la déclaration de problème:

Tous les trois attributs sont des attributs nominaux suivis de toutes les valeurs possibles citées par '{}'. Une de mes hypothèses est que les valeurs possibles ne sont pas les mêmes. Par exemple, pour l'attribut de ressources, il n'y a pas de 199 dans le fichier de test, tandis que c'est dans le fichier de formation.


0 commentaires

0
votes

Look Il y a une différence entre la même et la même chose, votre train.arrf et votre test.arrf devraient avoir la même en-tête et sinon vous devez copier l'en-tête de train.arrf et la coller dans votre test.arrf en tant que nouveau. En-tête.


0 commentaires

3
votes

Après avoir lu avec le même problème pendant une journée. J'ai compris deux façons de faire fonctionner le modèle formé sur l'ensemble de tests fournis.

Méthode 1. Utilisez le flux de connaissances. Par exemple quelque chose comme ci-dessous: CSVLoader (pour l'ensemble de train) -> ClassAssigner -> TrainingSetMaker -> (classificateur de votre choix) -> Classfierperformancefaluator - TextViewer. CSVLOADER (pour l'ensemble de tests) -> ClassAssigner -> Testgsetmaker -> (la même instance de classificateur ci-dessus) -> PrédictionAppender -> CSVSaver. Ensuite, chargez les données du CSVLOADER ou du ARFFLODER pour le jeu d'entraînement. Le modèle sera formé. Après ces données de charge du chargeur pour le jeu de test. Il évaluera le modèle (classificateur, par exemple) sur le jeu de tests fourni et vous pouvez voir le résultat de la TextViewer (connecté au classificateurFalformanceEvaluator) et obtenir le résultat enregistré à partir du CSVSaver ou de l'ARFFSAVER connecté au prédictionAppender.an Colonne supplémentaire, Le "Classfied as" sera ajouté au fichier de sortie. Dans mon cas, j'ai utilisé "?" Pour la colonne de classe dans le test de test fourni si les étiquettes de classe ne sont pas disponibles.

Méthode 2. Combinez la formation et le test définis dans un seul fichier. Ensuite, le même filtre peut être appliqué à la fois sur la formation et le jeu de tests. Ensuite, vous pouvez séparer l'ensemble de l'entraînement et le test défini en appliquant un filtre d'instance. Depuis que j'utilise "?" comme étiquette de classe dans l'ensemble de tests. Il n'est pas visible dans les indices de filtrage d'instance. Par conséquent, sélectionnez simplement ces indices que vous pouvez voir dans les valeurs d'attribut à supprimer lors de l'application du filtre d'instance. Vous obtiendrez uniquement les données de test seulement. Enregistrez-le et chargez-le dans le test de test de l'alimentation sur la page du classificateur.Cette fois que cela fonctionnera. Je suppose que c'est l'attribut de classe qui provoque le problème de train et de test de test non compatible. Comme beaucoup de classfier nécessitent un attribut de classe nominale. La valeur est convertie en indice aux valeurs disponibles de l'attribut de classe en fonction de http://weka.wikispaces.com/why+do+i+get+THe+Error+Message+%27training+and+test+set+are+not+compatible%27%3f


0 commentaires

1
votes

Je viens de rencontrer le même problème et j'ai trouvé une solution nue-os. Le format de mon fichier est .csv et j'ouvre simplement mes fichiers (pour la formation et les tests, respectivement) et utilisez le bouton Enregistrer sur le panneau de préprocession de Weka pour les enregistrer dans le format .ARFF. Alors le problème est résolu.


0 commentaires

0
votes
    trainPath = ""

    otherPadelPath = ""

    testPath = ""



    trainFile = open(trainPath,"r")

    trainAttributes = trainFile.readlines()[0].split(",")
    trainFile.close()



    otherPadelFile = open(otherPadelPath,"r")


    otherPadelLines = otherPadelFile.readlines()
    otherPadelFile.close()
    otherPadelColumns = []

    testLines = []

    for attribute in trainAttributes:
      if attribute in otherPadelLines[0].split(","):
        otherPadelColumns += [otherPadelLines[0].split(",").index(attribute)]


    for line in otherPadelLines:
      rearrangedLine = []
      for inDex in otherPadelColumns:
        rearrangedLine += [line.split(",")[inDex]]
      testLines += [",".join(rearrangedLine)]




    testFile = open(testPath,"w")
    testFile.writelines(testLines)
    testFile.close()
This script can rearrange your test dataset to contain the same order/number of attribute columns in your training set, provided that each attribute has the same type and title. Also, (in keeping with WEKA default), the class attribute should be in the last column for both datasets.

0 commentaires