Я хочу сделать классификацию текста с weka. У меня есть поезд и тестовый файл (персидский язык). сначала я загружаю файл поезда, а затем выбираю «string to word vector» в препроцессе. И из-за выбора этого, позиция класса идет в начало. Чтобы переместить класс в его индекс (который равен 2 в файлах), я могу перейти либо к части «Редактировать», и щелкнуть правой кнопкой мыши по столбцу класса и выбрать «атрибут как класс» или просто в меню «Классификация», выбрать (NOM) класс , (если большинство алгоритмов не будет активным). Я запускаю SMO и сохраняю модель. Проблема заключается в том, что после открытия тестового файла и нажмите «переоценить модель на текущем наборе тестов», эта ошибка возникает, когда «индекс класса ... отличается: 1! = 2». Я знаю, это потому, что после открытия тестового файла снова столбец класса переходит в начало. Для части поезда я решил проблему, как я описал выше. Но как я могу решить эту проблему для тестовой части?класс индекс отличается погрешность в weka
ответ
Во-первых, я поменял файлы на вектор на основе 1000 наиболее часто встречающихся слов в файле поезда и сделал числовой файл arff для поезда и тестового файла, затем для обоих из них в разделе «классифицировать» «menu in» Test options «I selected» (Nom).
Вы должны использовать то же преобразование (ы) на вашем testset, прежде чем использовать его, чтобы оценить обученную модель. При использовании графического интерфейса вы можете использовать представление препроцессора из проводника, применять одни и те же преобразования вручную, а не сохранять набор в новый файл arff. Когда вы хотите провести серию экспериментов, я предлагаю написать рутину, которая сделает вашу трансформацию для вас.
Это будет выглядеть немного что-то вроде этого:
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.core.converters.CSVLoader;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.Remove;
import weka.filters.unsupervised.attribute.Reorder;
import weka.filters.unsupervised.attribute.NumericToNominal;
import java.io.File;
public class DataConverter
{
public static void Convert(String sourcepath,String destpath) throws Exception
{
CSVLoader loader = new CSVLoader();
loader.setSource(new File(sourcepath));
Instances data = loader.getDataSet();
Remove remove = new Remove();
remove.setOptions(weka.core.Utils.splitOptions("-R 1"));
remove.setInputFormat(data);
data = Filter.useFilter(data, remove);
Reorder reorder = new Reorder();
reorder.setOptions(weka.core.Utils.splitOptions("-R first-29,31-last,30"));
reorder.setInputFormat(data);
data = Filter.useFilter(data, reorder);
NumericToNominal ntn = new NumericToNominal();
ntn.setOptions(weka.core.Utils.splitOptions("-R first,last"));
ntn.setInputFormat(data);
data = Filter.useFilter(data, ntn);
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(destpath));
//saver.setDestination(new File(destpath));
saver.writeBatch();
}
public static void main(String args[]) throws Exception
{
File folder = new File("..\\..\\data\\output\\learning\\csv\\");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String target = listOfFiles[i].getName();
target = target.substring(0, target.lastIndexOf("."));
System.out.println("converting file " + (i + 1) + "/" + listOfFiles.length);
Convert("..\\..\\data\\output\\learning\\csv\\" + listOfFiles[i].getName(), "..\\..\\data\\output\\learning\\arff\\" + target + ".arff");
}
}
}
}
также: перезаказа фильтр может помочь вам разместить целевой класс в конце файла. В качестве аргументов новый порядок старых индексов. В этом случае вы можете применить Reorder -R 2-last,1
- 1. Weka предсказание же класс
- 2. погрешность поплавковой точки math.cos погрешность
- 3. Что такое индекс класса в WEKA?
- 4. Классификация Weka и предсказанный класс
- 5. Класс libsvm не найден в weka
- 6. Что делает класс ClusterMembership в weka?
- 7. Как добавить класс LibSVM в класс пути WEKA на Mac
- 8. Excel 2010: недопустимая погрешность
- 9. Weka Classification
- 10. Класс Weka не может быть инициализирован: InvocationTargetException
- 11. python-weka-wrapper: ChiSquaredAttributeEval класс не найден
- 12. Оценить класс образца с помощью WEKA
- 13. погрешность, указанная ниже
- 14. Класс объектов запроса Rails отличается?
- 15. Переменный класс отличается внутри функции?
- 16. Weka Gridsearch libsvm не может обрабатывать унарный класс (один класс)
- 17. Laravel foreach с шансом, что индекс отличается
- 18. Mysql, не использующий индекс, когда длина отличается
- 19. погрешность запросов в области медиаданных
- 20. погрешность в алгоритме приближения функции
- 21. JPQl, имеющий погрешность в запросе
- 22. NUnit Assert.AreEqual DateTime Погрешность
- 23. Laravel 5 погрешность.
- 24. JSON погрешность. Неожиданный символ
- 25. Основная погрешность указателя упражнения
- 26. Дата сравнения получение погрешность
- 27. Jquery представить погрешность формы
- 28. R минимизация абсолютной погрешность
- 29. Относительная погрешность и Matlab
- 30. Python: Расчет погрешность Тейлор
@S van Balen, я не знаю java. Есть ли способ решить эту проблему в самой weka, а не писать какой-либо код? спасибо – sara
Абсолютно В принципе, вы просто выполняете фильтр stringToWordVector из графического интерфейса пользователя, сохраняете результат на testet.arff (или что-то еще), а затем выполняете то же упражнение для своего набора тренировок. Затем вы можете загрузить набор поездов в графический интерфейс и настроить любой классификатор для использования сохраненного набора тестов для оценки. –