2016-08-03 2 views
1

, сохраняя детали, в настоящее время я работаю над программой Java, которая выполняет парную классификацию для ранжирования SVM.Случайный выбор двумерных векторных строк для полуограничения определенных значений

Чтобы получить некоторый фон, я прочитал содержимое из CSV-файла в список массивов 2D-строк, выполнил все необходимые вычисления в списке 2D-массивов и вам нужно записать его обратно в файл CSV.

Однако перед тем, как данные будут возвращены в пустой CSV-файл, произойдет один последний шаг. Последняя ячейка каждой строки содержит одно из двух значений: либо «1», либо «-1». Моя цель - убедиться, что данные записаны обратно в файл, так что есть равное количество строк данных (или в диапазоне от 1) относительно последней ячейки, содержащей либо «1», либо «- 1 ", если это имеет смысл.

Чтобы привести несколько примеров, здесь два приемлемых результатов, которые будут записаны обратно в файл:

[10 20 30 -1] 
[12 13 14 1] 
[12 13 14 -1] 
[34 35 36 1] 

и

[10 20 30 -1] 
[12 13 14 1] 
[12 13 14 -1] 
[34 35 36 1] 
[20 34 35 -1] 

Как вы можете видеть, в первом примере, есть равное распределение строк по отношению к последней ячейке каждой строки, либо «1», либо «-1», а во втором - распределение строк, так что разница в количестве строк, где есть « -1 "или" 1 "в последней ячейке отличаются только 1. Это оба приемлемы.

Итак, мне было интересно, может ли кто-нибудь предоставить мне некоторые идеи о том, как я могу это сделать? В настоящее время я думаю о создании генератора случайных чисел для индексатора, который непрерывно включает строки на основе этого случайного индекса, отслеживая количество строк, которые содержат «1» или «-1» в последней ячейке, только останавливаясь, когда в мой конечный результат включается количество случайных строк, так что удовлетворяются мои критерии равного/почти равного распределения. Тем не менее, я не совсем уверен, как бы я мог настроить код для этого.

Спасибо, и, пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию, которая поможет.

+0

Не могли бы вы просто добавить последний индекс каждой строки к текущему подсчету, а после * сделать всю работу * вы не могли бы просто проверить, является ли '-1> = tally <= 1'? Извините, если это полностью не соответствует знаку, этот вопрос несколько запутан. –

ответ

1

нет необходимости рандомизации здесь, вы можете сделать что-то похожее на следующее:

Keep 2 строки указатели. Один для +1, один для -1.

  1. выводьте +1, а затем увеличивайте этот индекс до тех пор, пока он не найдет другую строку, заканчивающуюся на +1.
  2. выведите a -1, затем увеличивайте этот индекс до тех пор, пока он не найдет другую строку, заканчивающуюся на -1.
  3. повторите шаг 1. пока один из ваших указателей не может быть увеличен.

Другой подход:

создать 2 комплекта. Один содержит номер строки для +1, другой содержит номер строки для -1. Альтернативный вывод, взяв одну строку из каждого набора.

+0

Большое спасибо, Колин. – BK201

 Смежные вопросы

  • Нет связанных вопросов^_^