Поезд и тестовый набор несовместимы с ошибкой в ​​​​weka?

Я пытаюсь проверить свою модель с новым набором данных. Я сделал тот же шаг предварительной обработки, что и для создания моей модели. Я сравнил два файла, но проблем нет. У меня есть все атрибуты (обучение и набор тестовых данных) в том же порядке, те же имена атрибутов и типы данных. Но все же я не могу решить проблему. Оба файла train и test кажутся похожими, но проводник weka выдает мне ошибку, говоря, что Train и тестовый набор несовместимы. Как решить эту ошибку? Есть ли способ сделать файл test.arff форматом train.arff? Пожалуйста, помогите мне.

Вот скриншот для сравнения файлов


person Suren Raju    schedule 16.07.2013    source источник
comment
Мне немного сложно понять ваш вопрос. Можете ли вы показать более подробно?   -  person Annie Kim    schedule 16.07.2013
comment
Привет AnnieKimless, Спасибо за ваш ответ. Я построил модель классификации с набором данных train.arff, и теперь я пытаюсь предсказать результат для тестового файла test.arff, используя weka explorer. Оба файла train и test кажутся похожими, но weka explorer выдает ошибку, говорящую, что Train и тестовый набор несовместимы. Как решить эту ошибку? Есть ли способ сделать файл test.arf форматом train.arff?   -  person Suren Raju    schedule 16.07.2013
comment
Все три атрибута являются номинальными атрибутами, за которыми следуют все возможные значения, заключенные в кавычки '{}'. Одна из моих догадок заключается в том, что возможные значения не совпадают. Например, для атрибута RESOURCE в тестовом файле нет 199, а в обучающем файле он есть. Как вы думаете?   -  person Annie Kim    schedule 16.07.2013
comment
Привет AnnieKim, большое спасибо. Ваш вклад был действительно полезен. Как вы подозревали, проблема связана с номинальным типом. Пожалуйста, оставьте свой комментарий в качестве ответа. Большое спасибо.   -  person Suren Raju    schedule 16.07.2013
comment
Хорошо, пожалуйста.   -  person Annie Kim    schedule 16.07.2013


Ответы (6)


То же самое с комментарием, который я оставил после постановки задачи:

Все три атрибута являются номинальными атрибутами, за которыми следуют все возможные значения, заключенные в кавычки '{}'. Одна из моих догадок заключается в том, что возможные значения не совпадают. Например, для атрибута RESOURCE в тестовом файле нет 199, а в обучающем файле он есть.

person Annie Kim    schedule 16.07.2013

После борьбы с той же проблемой в течение дня. Я нашел два способа заставить обученную модель работать с предоставленным тестовым набором.

Способ 1. Используйте поток знаний. Например, что-то вроде следующего: CSVLoader (для набора поездов) -> classAssigner -> TrainingSetMaker -> (классификатор по вашему выбору) -> ClassfierPerformanceEvaluator - TextViewer. CSVLoader (для набора тестов) -> classAssigner -> TestgSetMaker -> (тот же экземпляр классификатора выше) -> PredictionAppender -> CSVSaver. Затем загрузите данные из CSVLoader или arffLoder для обучающего набора. Модель будет обучена. После этого загрузите данные из загрузчика для тестового набора. Он оценит модель (например, классификатор) в предоставленном тестовом наборе, и вы сможете увидеть результат из средства просмотра текста (подключенного к ClassifierPerformanceEvaluator) и получить сохраненный результат из CSVSaver или arffSaver, подключенного к PredictionAppender. Дополнительный столбец, «классифицировано как» будет добавлено в выходной файл. В моем случае я использовал "?" для столбца класса в предоставленном наборе тестов, если метки классов недоступны.

Способ 2. Объединить обучающий и тестовый наборы в один файл. Затем один и тот же фильтр можно применить как к обучающему, так и к тестовому набору. Затем вы можете разделить обучающий набор и тестовый набор, применив фильтр экземпляров. Поскольку я использую "?" как метка класса в тестовом наборе. Он не отображается в индексах фильтра экземпляра. Следовательно, просто выберите те индексы, которые вы видите в значениях атрибутов, которые будут удалены при применении фильтра экземпляра. Вы получите только тестовые данные. Сохраните его и загрузите в тестовый набор поставки на странице классификатора. На этот раз он будет работать. Я предполагаю, что это атрибут класса, который вызывает проблему с НЕсовместимым поездом и тестовым набором. Поскольку многие классификаторы требуют номинального атрибута класса. Значение которого преобразуется в индекс доступных значений атрибута класса в соответствии с http://weka.wikispaces.com/Why+do+I+get+the+error+message+%27training+and+тест+набор+не+совместимы%27%3F

person d0_0b    schedule 15.11.2014

См. следующее ">ответ, ваш train.arff и test.arff должны иметь одинаковый заголовок. По вашему сравнению они похожи, но не одинаковы.

person Atilla Ozgur    schedule 16.07.2013
comment
Привет, Атилла, у меня есть решение. Проблема в том, что заголовки похожи, но не одинаковы. Я изменил и проверил это. Большое вам спасибо за вашу помощь. - person Suren Raju; 16.07.2013

Я только что столкнулся с той же проблемой, и я нашел простое решение. Формат моего файла — .csv, и я просто открываю свои файлы (для обучения и тестирования соответственно) и использую кнопку «Сохранить» на панели предварительной обработки WEKA, чтобы сохранить их в формате .arff. Тогда проблема решена.

person Neil    schedule 30.10.2018

Посмотрите, есть разница между подобным и одинаковым, ваши train.arrf и test.arrf должны иметь одинаковый заголовок, а если нет, то вы должны скопировать заголовок train.arrf и вставить его в свой test.arrf как новый заголовок.

person Christina Angel    schedule 12.02.2014

    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()

Этот скрипт может переупорядочить ваш тестовый набор данных, чтобы он содержал одинаковый порядок/количество столбцов атрибутов в вашем обучающем наборе, при условии, что каждый атрибут имеет одинаковый тип и заголовок. Кроме того (в соответствии со значением по умолчанию WEKA) атрибут класса должен быть в последнем столбце для обоих наборов данных.

person Andrew Kessler    schedule 09.07.2020