У меня есть КОД 2, который я хотел бы сделать универсальным.CODE 2 принимает 2d столбцы массива в качестве значений: x1, x2, x3, x4 и R. И генерирует вероятности.Я хотел бы создать код, который делает этот универсальный для 2d массивов с большим количеством столбцов.
В моем КОДЕ 1 я успешно напечатал столбцы 2d-массива в виде 1d-массива, используя первую часть моего кода.
Затем я хотел бы взять каждый из моих столбцов и заменить их на x1, например, в следующей строке: double p1 = network.performQuery("P(+x1|+R)")
.Итак, поскольку у меня есть 4 столбца, я хочу цикл, который повторяется для x1, x2, x3, x4.Обратите внимание, что мой последний столбец называется R.
Я думал об этом коде, но он не работает:
CODE 1
public static void main(String[] args) {
double DATA[][] = {
// x1,x2,x3,x4,R
{ 1, 0, 0, 1, 1 }, // case 1
{ 1, 1, 1, 1, 0 }, // case 2
{ 0, 0, 1, 1, 1 }, // case 3
{ 1, 1, 1, 1, 1 }, // case 4
{ 0, 0, 0, 1, 0 }, // case 5
{ 0, 1, 1, 0, 1 }, // case 6
{ 1, 1, 1, 0, 1 }, // case 7
{ 0, 0, 0, 0, 1 }, // case 8
{ 1, 1, 1, 0, 1 }, // case 9
{ 0, 0, 0, 0, 1 }, // case 10
};
for (int j = 0; j < DATA[0].length; j++) {
double[] cols = new double[DATA.length];
for (int i = 0; i < DATA.length; i++) {
cols[i] = DATA[i][j];
}
System.out.println(Arrays.toString(cols)); //prints it right
MLDataSet data = new BasicMLDataSet(DATA,null);
BayesianNetwork network = new BayesianNetwork();
network.createEvent(cols); // in CODE 2, cols = x1 is written between quotation marks
//TRAINING PART
double p1 = network.performQuery("P(+" + cols +"|+R)");
//double p1 = network.performQuery("P(+x1|R)");
System.out.println("x1 probability : " + network.getEvent("" + cols + "").getTable().findLine(1, new int[] {1}));
System.out.println("Calculated P(+R|+" + cols+ "): " + p1);
//System.out.println("Calculated P(+R|+x1):" + p1);
}
}
CODE 2
double DATA[][] = {
// x1,x2,x3,x4,R
{ 1, 0, 0, 1, 1 }, // case 1
{ 1, 1, 1, 1, 0 }, // case 2
{ 0, 0, 1, 1, 1 }, // case 3
{ 1, 1, 1, 1, 1 }, // case 4
{ 0, 0, 0, 1, 0 }, // case 5
{ 0, 1, 1, 0, 1 }, // case 6
{ 1, 1, 1, 0, 1 }, // case 7
{ 0, 0, 0, 0, 1 }, // case 8
{ 1, 1, 1, 0, 1 }, // case 9
{ 0, 0, 0, 0, 1 }, // case 10
};
MLDataSet data = new BasicMLDataSet(DATA,null);
BayesianNetwork network = new BayesianNetwork();
network.createEvent("x1");
network.createEvent("x2");
network.createEvent("x3");
network.createEvent("x4");
network.createEvent("R");
network.finalizeStructure();
//TRAINING PART
TrainBayesian train = new TrainBayesian(network,data,10);
train.setInitNetwork(BayesianInit.InitEmpty);
while(!train.isTrainingDone()) {
train.iteration();
}
double p1 = network.performQuery("P(+x1|+R)");
double p2 = network.performQuery("P(+x2|+R)");
double p3 = network.performQuery("P(+x3|+R)");
double p4 = network.performQuery("P(+x4|+R)");
System.out.println("x1 probability : " + network.getEvent("x1").getTable().findLine(1, new int[] {1}));
System.out.println("x2 probability : " + network.getEvent("x2").getTable().findLine(1, new int[] {1}));
System.out.println("x3 probability : " + network.getEvent("x3").getTable().findLine(1, new int[] {1}));
System.out.println("x4 probability : " + network.getEvent("x4").getTable().findLine(1, new int[] {1}));
System.out.println("R probability : " + network.getEvent("R").getTable().findLine(1, new int[] {1}));
System.out.println("Calculated P(+R|+x1): " + p1);
System.out.println("Calculated P(+R|+x2): " + p3);
System.out.println("Calculated P(+R|+x3): " + p4);
System.out.println("Calculated P(+R|+x4): " + p5);
Не могли бы вы помочь мне?