Files
coco 85d885e008 a
2026-07-03 16:29:47 +08:00

63 lines
13 KiB
Plaintext

class DecisionTreeClassifier {
private int[] lChilds;
private int[] rChilds;
private double[] thresholds;
private int[] indices;
private int[][] classes;
public DecisionTreeClassifier(int[] lChilds, int[] rChilds, double[] thresholds, int[] indices, int[][] classes) {
this.lChilds = lChilds;
this.rChilds = rChilds;
this.thresholds = thresholds;
this.indices = indices;
this.classes = classes;
}
public int predict(double[] features) {
return this.predict(features, 0);
}
public int predict(double[] features, int node) {
if (this.thresholds[node] != -2) {
if (features[this.indices[node]] <= this.thresholds[node]) {
return predict(features, this.lChilds[node]);
} else {
return predict(features, this.rChilds[node]);
}
}
return findMax(this.classes[node]);
}
private int findMax(int[] nums) {
int index = 0;
for (int i = 0; i < nums.length; i++) {
index = nums[i] > nums[index] ? i : index;
}
return index;
}
public static void main(String[] args) {
if (args.length == 50) {
// Features:
double[] features = new double[args.length];
for (int i = 0, l = args.length; i < l; i++) {
features[i] = Double.parseDouble(args[i]);
}
// Parameters:
int[] lChilds = {1, 2, 3, 4, 5, 6, -1, -1, 9, -1, -1, 12, 13, 14, -1, 16, -1, -1, 19, 20, -1, -1, 23, 24, 25, 26, -1, -1, 29, 30, -1, -1, 33, 34, -1, 36, -1, -1, 39, -1, -1, 42, -1, -1, -1, 46, -1, -1, 49, 50, 51, -1, -1, 54, -1, 56, -1, 58, -1, -1, -1, 62, 63, 64, 65, -1, 67, 68, -1, 70, -1, -1, -1, -1, 75, -1, 77, -1, -1, 80, 81, 82, -1, -1, 85, 86, 87, 88, -1, -1, -1, -1, 93, -1, -1, 96, -1, 98, -1, 100, -1, -1, 103, 104, 105, 106, 107, 108, -1, -1, 111, 112, 113, 114, -1, 116, -1, -1, -1, 120, 121, -1, -1, -1, 125, -1, 127, -1, 129, -1, 131, -1, -1, 134, -1, -1, 137, 138, 139, 140, 141, -1, -1, 144, -1, 146, 147, -1, 149, -1, -1, 152, 153, -1, 155, -1, -1, -1, 159, -1, 161, -1, -1, 164, 165, 166, -1, -1, -1, 170, -1, -1, 173, -1, -1, 176, 177, 178, -1, -1, 181, 182, 183, -1, 185, 186, -1, -1, -1, -1, -1, 192, -1, 194, -1, -1, 197, 198, 199, 200, 201, -1, -1, 204, 205, 206, 207, -1, -1, 210, -1, 212, 213, -1, -1, -1, -1, -1, 219, -1, -1, 222, -1, 224, -1, -1, 227, 228, 229, 230, -1, 232, -1, -1, 235, -1, -1, 238, 239, 240, 241, -1, -1, 244, -1, 246, 247, -1, -1, -1, -1, -1, 253, 254, 255, -1, -1, 258, 259, 260, -1, -1, 263, 264, -1, -1, 267, 268, -1, 270, 271, -1, -1, 274, -1, -1, 277, -1, -1, 280, -1, 282, -1, -1, 285, 286, 287, -1, 289, 290, -1, -1, -1, -1, 295, 296, 297, 298, -1, -1, -1, 302, -1, 304, 305, -1, -1, -1, 309, -1, -1};
int[] rChilds = {102, 61, 48, 11, 8, 7, -1, -1, 10, -1, -1, 45, 18, 15, -1, 17, -1, -1, 22, 21, -1, -1, 44, 41, 28, 27, -1, -1, 32, 31, -1, -1, 38, 35, -1, 37, -1, -1, 40, -1, -1, 43, -1, -1, -1, 47, -1, -1, 60, 53, 52, -1, -1, 55, -1, 57, -1, 59, -1, -1, -1, 79, 74, 73, 66, -1, 72, 69, -1, 71, -1, -1, -1, -1, 76, -1, 78, -1, -1, 95, 84, 83, -1, -1, 92, 91, 90, 89, -1, -1, -1, -1, 94, -1, -1, 97, -1, 99, -1, 101, -1, -1, 196, 175, 136, 133, 110, 109, -1, -1, 124, 119, 118, 115, -1, 117, -1, -1, -1, 123, 122, -1, -1, -1, 126, -1, 128, -1, 130, -1, 132, -1, -1, 135, -1, -1, 172, 163, 158, 143, 142, -1, -1, 145, -1, 151, 148, -1, 150, -1, -1, 157, 154, -1, 156, -1, -1, -1, 160, -1, 162, -1, -1, 169, 168, 167, -1, -1, -1, 171, -1, -1, 174, -1, -1, 191, 180, 179, -1, -1, 190, 189, 184, -1, 188, 187, -1, -1, -1, -1, -1, 193, -1, 195, -1, -1, 226, 221, 218, 203, 202, -1, -1, 217, 216, 209, 208, -1, -1, 211, -1, 215, 214, -1, -1, -1, -1, -1, 220, -1, -1, 223, -1, 225, -1, -1, 252, 237, 234, 231, -1, 233, -1, -1, 236, -1, -1, 251, 250, 243, 242, -1, -1, 245, -1, 249, 248, -1, -1, -1, -1, -1, 284, 257, 256, -1, -1, 279, 262, 261, -1, -1, 266, 265, -1, -1, 276, 269, -1, 273, 272, -1, -1, 275, -1, -1, 278, -1, -1, 281, -1, 283, -1, -1, 294, 293, 288, -1, 292, 291, -1, -1, -1, -1, 308, 301, 300, 299, -1, -1, -1, 303, -1, 307, 306, -1, -1, -1, 310, -1, -1};
double[] thresholds = {-14.5, 0.5, 8.5, -4.5, 10.0, -13.5, -2.0, -2.0, -30.0, -2.0, -2.0, 1.5, -35.5, -0.5, -2.0, -16.0, -2.0, -2.0, -81.5, -19.0, -2.0, -2.0, 41.0, 5.5, -75.5, -12.5, -2.0, -2.0, -5.5, -13.5, -2.0, -2.0, -11.5, 1.5, -2.0, -3.5, -2.0, -2.0, -20.5, -2.0, -2.0, -24.5, -2.0, -2.0, -2.0, -3.5, -2.0, -2.0, 1.5, -2.0, -5.5, -2.0, -2.0, -18.5, -2.0, -0.5, -2.0, -17.5, -2.0, -2.0, -2.0, -17.5, -0.5, -14.5, -6.5, -2.0, 1.5, -18.5, -2.0, -4.0, -2.0, -2.0, -2.0, -2.0, 4.0, -2.0, 3.0, -2.0, -2.0, -4.5, -20.5, -9.5, -2.0, -2.0, 4.5, -1.5, -17.5, -0.5, -2.0, -2.0, -2.0, -2.0, -14.0, -2.0, -2.0, 1.5, -2.0, 60.5, -2.0, 14.5, -2.0, -2.0, 24.5, 2.5, -18.5, 0.5, -1.5, -50.0, -2.0, -2.0, 5.5, -13.5, -1.0, -19.5, -2.0, 2.0, -2.0, -2.0, -2.0, 21.0, 5.5, -2.0, -2.0, -2.0, -6.5, -2.0, 11.5, -2.0, 69.0, -2.0, -0.5, -2.0, -2.0, 5.5, -2.0, -2.0, 26.5, 6.5, 8.5, -0.5, -38.5, -2.0, -2.0, -4.5, -2.0, 4.5, 4.5, -2.0, -5.5, -2.0, -2.0, -16.5, -56.5, -2.0, 0.5, -2.0, -2.0, -2.0, -25.0, -2.0, 3.5, -2.0, -2.0, -2.0, -20.5, -10.5, -2.0, -2.0, -2.0, -4.0, -2.0, -2.0, -24.5, -2.0, -2.0, 16.5, -238.0, -14.5, -2.0, -2.0, 2.5, 54.0, 13.5, -2.0, -84.5, 33.0, -2.0, -2.0, -2.0, -2.0, -2.0, 6.0, -2.0, -2.0, -2.0, -2.0, 47.5, 34.5, 17.5, -114.5, 28.0, -2.0, -2.0, 85.5, 79.0, -97.5, -55.5, -2.0, -2.0, 0.5, -2.0, -90.5, 40.0, -2.0, -2.0, -2.0, -2.0, -2.0, 38.0, -2.0, -2.0, -168.5, -2.0, -31.0, -2.0, -2.0, 39.5, -102.5, 5.5, -3.5, -2.0, 44.0, -2.0, -2.0, 4.5, -2.0, -2.0, 43.0, -15.0, -19.5, 4.5, -2.0, -2.0, 18.5, -2.0, -19.5, 2.0, -2.0, -2.0, -2.0, -2.0, -2.0, -70.5, 64.5, -26.0, -2.0, -2.0, 79.5, 35.5, 75.0, -2.0, -2.0, 4.5, 60.5, -2.0, -2.0, -2.5, -15.5, -2.0, -8.0, 56.0, -2.0, -2.0, -230.5, -2.0, -2.0, -72.5, -2.0, -2.0, 29.5, -2.0, 82.0, -2.0, -2.0, 28.5, 33.5, -94.5, -2.0, -121.5, -0.5, -2.0, -2.0, -2.0, -2.0, -0.5, 19.5, 62.5, -12.5, -2.0, -2.0, -2.0, -17.5, -2.0, 2.5, 10.5, -2.0, -2.0, -2.0, 1.5, -2.0, -2.0};
int[] indices = {2, 3, 46, 3, 12, 29, -2, -2, 38, -2, -2, 32, 42, 22, -2, 33, -2, -2, 24, 42, -2, -2, 23, 14, 20, 5, -2, -2, 21, 5, -2, -2, 0, 26, -2, 41, -2, -2, 38, -2, -2, 49, -2, -2, -2, 39, -2, -2, 30, 39, 30, -2, -2, 1, -2, 43, -2, 1, -2, -2, -2, 49, 12, 45, 30, -2, 3, 36, -2, 48, -2, -2, -2, -2, 22, -2, 30, -2, -2, 12, 45, 36, -2, -2, 15, 33, 42, 8, -2, -2, -2, -2, 37, -2, -2, 11, -2, 22, -2, 4, -2, -2, 2, 45, 36, 39, 30, 23, -2, -2, 46, 6, 21, 37, -2, 28, -2, -2, -2, 23, 15, -2, -2, -2, 41, -2, 40, -2, 22, -2, 48, -2, -2, 28, -2, -2, 3, 3, 10, 17, 20, -2, -2, 46, -2, 9, 3, -2, 12, -2, -2, 36, 19, -2, 44, -2, -2, -2, 20, -2, 32, -2, -2, 12, 49, 45, -2, -2, -2, 23, -2, -2, 12, -2, -2, 0, 47, 31, -2, -2, 46, 38, 5, -2, 30, 37, -2, -2, -2, -2, -2, 41, -2, 7, -2, -2, 36, 0, 21, 12, 5, -2, -2, 47, 20, 12, 3, -2, -2, 39, -2, 3, 2, -2, -2, -2, -2, -2, 36, -2, -2, 3, -2, 31, -2, -2, 45, 12, 33, 16, -2, 20, -2, -2, 44, -2, -2, 12, 4, 34, 29, -2, -2, 0, -2, 11, 27, -2, -2, -2, -2, -2, 3, 37, 40, -2, -2, 12, 2, 37, -2, -2, 29, 24, -2, -2, 22, 34, -2, 13, 38, -2, -2, 21, -2, -2, 30, -2, -2, 0, -2, 47, -2, -2, 5, 12, 40, -2, 39, 27, -2, -2, -2, -2, 21, 12, 36, 34, -2, -2, -2, 9, -2, 44, 41, -2, -2, -2, 8, -2, -2};
int[][] classes = {{3050, 2752, 3635, 2985, 6642}, {0, 0, 5, 666, 6387}, {0, 0, 5, 562, 654}, {0, 0, 3, 550, 73}, {0, 0, 3, 8, 29}, {0, 0, 2, 0, 29}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 29}, {0, 0, 1, 8, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 8, 0}, {0, 0, 0, 542, 44}, {0, 0, 0, 540, 30}, {0, 0, 0, 4, 10}, {0, 0, 0, 3, 0}, {0, 0, 0, 1, 10}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 10}, {0, 0, 0, 536, 20}, {0, 0, 0, 1, 4}, {0, 0, 0, 0, 4}, {0, 0, 0, 1, 0}, {0, 0, 0, 535, 16}, {0, 0, 0, 535, 14}, {0, 0, 0, 511, 7}, {0, 0, 0, 5, 3}, {0, 0, 0, 5, 0}, {0, 0, 0, 0, 3}, {0, 0, 0, 506, 4}, {0, 0, 0, 1, 1}, {0, 0, 0, 0, 1}, {0, 0, 0, 1, 0}, {0, 0, 0, 505, 3}, {0, 0, 0, 495, 1}, {0, 0, 0, 490, 0}, {0, 0, 0, 5, 1}, {0, 0, 0, 5, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 10, 2}, {0, 0, 0, 0, 2}, {0, 0, 0, 10, 0}, {0, 0, 0, 24, 7}, {0, 0, 0, 24, 0}, {0, 0, 0, 0, 7}, {0, 0, 0, 0, 2}, {0, 0, 0, 2, 14}, {0, 0, 0, 2, 0}, {0, 0, 0, 0, 14}, {0, 0, 2, 12, 581}, {0, 0, 2, 8, 581}, {0, 0, 2, 2, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 2, 0}, {0, 0, 0, 6, 581}, {0, 0, 0, 0, 556}, {0, 0, 0, 6, 25}, {0, 0, 0, 0, 24}, {0, 0, 0, 6, 1}, {0, 0, 0, 6, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 4, 0}, {0, 0, 0, 104, 5733}, {0, 0, 0, 15, 5444}, {0, 0, 0, 5, 5439}, {0, 0, 0, 3, 5439}, {0, 0, 0, 1, 0}, {0, 0, 0, 2, 5439}, {0, 0, 0, 2, 70}, {0, 0, 0, 0, 67}, {0, 0, 0, 2, 3}, {0, 0, 0, 0, 3}, {0, 0, 0, 2, 0}, {0, 0, 0, 0, 5369}, {0, 0, 0, 2, 0}, {0, 0, 0, 10, 5}, {0, 0, 0, 8, 0}, {0, 0, 0, 2, 5}, {0, 0, 0, 0, 5}, {0, 0, 0, 2, 0}, {0, 0, 0, 89, 289}, {0, 0, 0, 79, 37}, {0, 0, 0, 1, 24}, {0, 0, 0, 0, 24}, {0, 0, 0, 1, 0}, {0, 0, 0, 78, 13}, {0, 0, 0, 76, 2}, {0, 0, 0, 76, 1}, {0, 0, 0, 2, 1}, {0, 0, 0, 0, 1}, {0, 0, 0, 2, 0}, {0, 0, 0, 74, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 2, 11}, {0, 0, 0, 0, 11}, {0, 0, 0, 2, 0}, {0, 0, 0, 10, 252}, {0, 0, 0, 6, 0}, {0, 0, 0, 4, 252}, {0, 0, 0, 0, 250}, {0, 0, 0, 4, 2}, {0, 0, 0, 4, 0}, {0, 0, 0, 0, 2}, {3050, 2752, 3630, 2319, 255}, {2, 12, 3618, 2319, 255}, {0, 0, 1, 2318, 255}, {0, 0, 0, 136, 197}, {0, 0, 0, 87, 196}, {0, 0, 0, 48, 4}, {0, 0, 0, 0, 4}, {0, 0, 0, 48, 0}, {0, 0, 0, 39, 192}, {0, 0, 0, 31, 32}, {0, 0, 0, 7, 28}, {0, 0, 0, 2, 28}, {0, 0, 0, 0, 27}, {0, 0, 0, 2, 1}, {0, 0, 0, 2, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 5, 0}, {0, 0, 0, 24, 4}, {0, 0, 0, 24, 1}, {0, 0, 0, 24, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 0, 3}, {0, 0, 0, 8, 160}, {0, 0, 0, 4, 0}, {0, 0, 0, 4, 160}, {0, 0, 0, 2, 0}, {0, 0, 0, 2, 160}, {0, 0, 0, 0, 151}, {0, 0, 0, 2, 9}, {0, 0, 0, 2, 0}, {0, 0, 0, 0, 9}, {0, 0, 0, 49, 1}, {0, 0, 0, 49, 0}, {0, 0, 0, 0, 1}, {0, 0, 1, 2182, 58}, {0, 0, 1, 2179, 42}, {0, 0, 1, 1991, 14}, {0, 0, 1, 1976, 8}, {0, 0, 0, 1, 2}, {0, 0, 0, 1, 0}, {0, 0, 0, 0, 2}, {0, 0, 1, 1975, 6}, {0, 0, 1, 0, 0}, {0, 0, 0, 1975, 6}, {0, 0, 0, 1903, 2}, {0, 0, 0, 1840, 0}, {0, 0, 0, 63, 2}, {0, 0, 0, 63, 0}, {0, 0, 0, 0, 2}, {0, 0, 0, 72, 4}, {0, 0, 0, 8, 4}, {0, 0, 0, 0, 3}, {0, 0, 0, 8, 1}, {0, 0, 0, 8, 0}, {0, 0, 0, 0, 1}, {0, 0, 0, 64, 0}, {0, 0, 0, 15, 6}, {0, 0, 0, 13, 0}, {0, 0, 0, 2, 6}, {0, 0, 0, 0, 6}, {0, 0, 0, 2, 0}, {0, 0, 0, 188, 28}, {0, 0, 0, 187, 4}, {0, 0, 0, 2, 4}, {0, 0, 0, 0, 4}, {0, 0, 0, 2, 0}, {0, 0, 0, 185, 0}, {0, 0, 0, 1, 24}, {0, 0, 0, 0, 24}, {0, 0, 0, 1, 0}, {0, 0, 0, 3, 16}, {0, 0, 0, 3, 0}, {0, 0, 0, 0, 16}, {2, 12, 3617, 1, 0}, {1, 6, 3616, 1, 0}, {1, 2, 0, 0, 0}, {0, 2, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 4, 3616, 1, 0}, {0, 4, 3616, 0, 0}, {0, 3, 3616, 0, 0}, {0, 0, 3561, 0, 0}, {0, 3, 55, 0, 0}, {0, 3, 2, 0, 0}, {0, 0, 2, 0, 0}, {0, 3, 0, 0, 0}, {0, 0, 53, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 1, 0}, {1, 6, 1, 0, 0}, {0, 6, 0, 0, 0}, {1, 0, 1, 0, 0}, {0, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {3048, 2740, 12, 0, 0}, {146, 1916, 0, 0, 0}, {34, 1887, 0, 0, 0}, {20, 1884, 0, 0, 0}, {10, 25, 0, 0, 0}, {0, 25, 0, 0, 0}, {10, 0, 0, 0, 0}, {10, 1859, 0, 0, 0}, {8, 1859, 0, 0, 0}, {7, 1859, 0, 0, 0}, {4, 68, 0, 0, 0}, {0, 68, 0, 0, 0}, {4, 0, 0, 0, 0}, {3, 1791, 0, 0, 0}, {0, 1632, 0, 0, 0}, {3, 159, 0, 0, 0}, {3, 16, 0, 0, 0}, {3, 0, 0, 0, 0}, {0, 16, 0, 0, 0}, {0, 143, 0, 0, 0}, {1, 0, 0, 0, 0}, {2, 0, 0, 0, 0}, {14, 3, 0, 0, 0}, {0, 3, 0, 0, 0}, {14, 0, 0, 0, 0}, {112, 29, 0, 0, 0}, {0, 28, 0, 0, 0}, {112, 1, 0, 0, 0}, {0, 1, 0, 0, 0}, {112, 0, 0, 0, 0}, {2902, 824, 12, 0, 0}, {49, 433, 12, 0, 0}, {23, 8, 12, 0, 0}, {1, 7, 12, 0, 0}, {0, 0, 12, 0, 0}, {1, 7, 0, 0, 0}, {0, 7, 0, 0, 0}, {1, 0, 0, 0, 0}, {22, 1, 0, 0, 0}, {22, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {26, 425, 0, 0, 0}, {15, 425, 0, 0, 0}, {10, 425, 0, 0, 0}, {6, 2, 0, 0, 0}, {0, 2, 0, 0, 0}, {6, 0, 0, 0, 0}, {4, 423, 0, 0, 0}, {3, 0, 0, 0, 0}, {1, 423, 0, 0, 0}, {1, 3, 0, 0, 0}, {0, 3, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 420, 0, 0, 0}, {5, 0, 0, 0, 0}, {11, 0, 0, 0, 0}, {2853, 391, 0, 0, 0}, {2611, 125, 0, 0, 0}, {8, 59, 0, 0, 0}, {0, 59, 0, 0, 0}, {8, 0, 0, 0, 0}, {2603, 66, 0, 0, 0}, {2494, 19, 0, 0, 0}, {7, 6, 0, 0, 0}, {7, 0, 0, 0, 0}, {0, 6, 0, 0, 0}, {2487, 13, 0, 0, 0}, {5, 1, 0, 0, 0}, {5, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {2482, 12, 0, 0, 0}, {2473, 11, 0, 0, 0}, {1523, 0, 0, 0, 0}, {950, 11, 0, 0, 0}, {1, 10, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 10, 0, 0, 0}, {949, 1, 0, 0, 0}, {0, 1, 0, 0, 0}, {949, 0, 0, 0, 0}, {9, 1, 0, 0, 0}, {9, 0, 0, 0, 0}, {0, 1, 0, 0, 0}, {109, 47, 0, 0, 0}, {108, 0, 0, 0, 0}, {1, 47, 0, 0, 0}, {0, 47, 0, 0, 0}, {1, 0, 0, 0, 0}, {242, 266, 0, 0, 0}, {159, 35, 0, 0, 0}, {27, 35, 0, 0, 0}, {20, 0, 0, 0, 0}, {7, 35, 0, 0, 0}, {7, 1, 0, 0, 0}, {0, 1, 0, 0, 0}, {7, 0, 0, 0, 0}, {0, 34, 0, 0, 0}, {132, 0, 0, 0, 0}, {83, 231, 0, 0, 0}, {51, 230, 0, 0, 0}, {4, 163, 0, 0, 0}, {1, 163, 0, 0, 0}, {0, 163, 0, 0, 0}, {1, 0, 0, 0, 0}, {3, 0, 0, 0, 0}, {47, 67, 0, 0, 0}, {0, 65, 0, 0, 0}, {47, 2, 0, 0, 0}, {1, 2, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 2, 0, 0, 0}, {46, 0, 0, 0, 0}, {32, 1, 0, 0, 0}, {0, 1, 0, 0, 0}, {32, 0, 0, 0, 0}};
// Prediction:
DecisionTreeClassifier clf = new DecisionTreeClassifier(lChilds, rChilds, thresholds, indices, classes);
int estimation = clf.predict(features);
System.out.println(estimation);
}
}
}