Я пытаюсь проверить свою модель с новым набором данных. Я сделал тот же шаг предварительной обработки, что и для создания моей модели. Я сравнил два файла, но проблем нет. У меня есть все атрибуты (обучение и набор тестовых данных) в том же порядке, те же имена атрибутов и типы данных. Но все же я не могу решить проблему. Оба файла train и test кажутся похожими, но проводник weka выдает мне ошибку, говоря, что Train и тестовый набор несовместимы. Как решить эту ошибку? Есть ли способ сделать файл test.arff форматом train.arff? Пожалуйста, помогите мне.
Поезд и тестовый набор несовместимы с ошибкой в weka?
Ответы (6)
То же самое с комментарием, который я оставил после постановки задачи:
Все три атрибута являются номинальными атрибутами, за которыми следуют все возможные значения, заключенные в кавычки '{}'. Одна из моих догадок заключается в том, что возможные значения не совпадают. Например, для атрибута RESOURCE в тестовом файле нет 199, а в обучающем файле он есть.
После борьбы с той же проблемой в течение дня. Я нашел два способа заставить обученную модель работать с предоставленным тестовым набором.
Способ 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
См. следующее ">ответ, ваш train.arff и test.arff должны иметь одинаковый заголовок. По вашему сравнению они похожи, но не одинаковы.
Я только что столкнулся с той же проблемой, и я нашел простое решение. Формат моего файла — .csv, и я просто открываю свои файлы (для обучения и тестирования соответственно) и использую кнопку «Сохранить» на панели предварительной обработки WEKA, чтобы сохранить их в формате .arff. Тогда проблема решена.
Посмотрите, есть разница между подобным и одинаковым, ваши train.arrf и test.arrf должны иметь одинаковый заголовок, а если нет, то вы должны скопировать заголовок train.arrf и вставить его в свой test.arrf как новый заголовок.
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) атрибут класса должен быть в последнем столбце для обоих наборов данных.
RESOURCE
в тестовом файле нет199
, а в обучающем файле он есть. Как вы думаете? - person Annie Kim   schedule 16.07.2013