二维向量行的随机选择,用于某些值的半均衡

Random Selection of 2D Vector Rows for Semi-Equalization of Certain Values

保留细节,我目前正在开发一个 Java 程序,该程序为排名 SVM 执行成对分类。

为了提供一些背景知识,我已经将 CSV 文件中的内容读取到二维字符串数组列表,对二维数组列表执行了所有必要的计算,并且需要将其写回 CSV 文件。

但是,在将数据写回空白 CSV 文件之前,还有最后一步。每行的最后一个单元格包含两个值之一 - “1”或“-1”。我的 objective 是确保数据被写回文件,这样对于最后一个包含“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”的行数,仅当我的最终结果中包含一定数量的随机行以满足我的 equal/almost 平均分配标准时停止。但是,我不太确定如何设置代码来执行此操作。

谢谢,如果我能提供更多有帮助的详细信息,请告诉我。

这里不用随机化,可以类似下面的操作:

保留2行指针。一个代表+1,一个代表-1。

  1. 输出 +1,然后递增该索引,直到找到以 +1 结尾的另一行。
  2. 输出 -1,然后递增该索引,直到找到另一行以 -1 结尾。
  3. 重复步骤 1。直到您的指针之一无法递增。

另一种方法:

制作2套。一个包含 +1 的行号,另一个包含 -1 的行号。通过从每组中取出一行来交替输出。