Данное ядерное преобразование более сложно, т.к. в нём используются сомножители всех возможных сочетаний входных значений.
Код на Java:
package libvmr; /** * Сложное полиминальное ядерное преобразование * @author Yury V. Reshetov * @version 1.0 */ public class BigKernelTrick implements KernelTrick{ /** * Идентификаторы используемых переменных */ private String[] variables = null; /** * Возвращает идентификаторы используемых переменных * @return идентификаторы переменных */ public String[] getVariables() { return this.variables; } /** * Преобразовать двумерный массив * @return */ public double[][] getTransformData(double[][] samples, double[] results) { int count = 1; for (int i = 0; i < (samples[0].length); i++) { count = count * 2; } double[][] result = new double[samples.length][count]; this.variables = new String[count]; for (int i = 0; i < samples.length; i++) { for (int j = 0; j < count; j++) { this.variables[j] = ""; double pp = 1d; int z = j; for (int n = 0; n < samples[0].length; n++) { if ((z % 2) == 1) { pp = pp * samples[i][n]; this.variables[j] = this.variables[j] + " * x" + n; } z = z / 2; } result[i][j] = pp; } } return result; } /** * Преобразовать одномерный массив * @return */ public double[] getTransformData(double[] sample) { int count = 1; for (int i = 0; i < (sample.length); i++) { count = count * 2; } double[] result = new double[count]; for (int i = 0; i < count; i++) { double pp = 1d; int z = i; for (int n = 0; n < sample.length; n++) { if ((z % 2) == 1) { pp = pp * sample[n]; } z = z / 2; } result[i] = pp; } return result; } }
Комментариев нет:
Отправить комментарий