En machine learning se le llama "discretizar array por percentiles", que consiste en uniformizar los valores numéricos de un array a escala [0:1]. Esta transformación es usada para ayudar en el aprendizaje automático de máquinas (machine learning) ya que adapta los términos absolutos del array a términos porcentuales.
Ejemplo:
Arrays iniciales:
array1 (numérico): 0 1 2 5 7 10
array2 (numérico): 653.7 1382 2403 4214 8890 9935
...
...
Arrays ya uniformizados (discretizados por percentiles):
array1 (percentil): 0% 0.1% 0.2% 0.5% 0.7% 1%
array2 (percentil): 0% 0.07% 0.18% 0.38% 0.89% 1%
...
...
La diferencia entre los valores del array1 y array2 iniciales son dispares. Una vez transformados los campos numéricos a percentiles se observa de que los campos son más semejantes entre sí (misma escala).
Código java: (DiscretizarNormalizar.java)
//Transformar un campo numérico a categórico usando percentiles
package discretizarnormalizar;
public class DiscretizarNormalizar {
public static void main(String[] args) {
int nRegistros = 10;
double[] v = new double[nRegistros];
//crear array aleatorio
for (int i = 0; i < nRegistros; i++) {
v[i] = Math.random() * 10000;
}
//buscar valores minimos y maximos del array
double min = v[0];
double max = v[0];
for (int i = 0; i < nRegistros; i++) {
if (min > v[i]) {
min = v[i];
}
if (max < v[i]) {
max = v[i];
}
}
//normalizacion-descretizar?
double[] v2 = new double[nRegistros];
for (int i = 0; i < nRegistros; i++) {
v2[i] = (v[i] - min) / (max - min);
}
//mostrar resultado
System.out.println("Array inicial:\t\tArray transformado:");
for (int i = 0; i < nRegistros; i++) {
System.out.println(i + "- " + v[i] + "\t" + v2[i]);
}
}
}
Resultado:
run:
Array inicial: Array transformado:
0- 7671.886736201123 0.8019001791662852
1- 9479.117533535893 1.0
2- 4876.0856974944645 0.4954381126326166
3- 6808.418910630855 0.7072510497947576
4- 356.28849851238044 0.0
5- 6556.185784681601 0.6796024854096415
6- 5931.890253043281 0.6111702557535137
7- 8510.956094814934 0.8938748676529962
8- 589.2424296425359 0.02553527313027795
9- 1432.7279151298521 0.11799403589444743
BUILD SUCCESSFUL (total time: 0 seconds)
Nota: Atributo discreto: tiene un rango finito o contable de valores.
Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.
Archivo del blog
jueves, 16 de marzo de 2017
miércoles, 15 de marzo de 2017
Copiar arrays. Uso de la instrucción "System.arraycopy".
Código java (CopiaArray.java):
package copiaarray;
public class CopiaArray {
public static void main(String[] args) {
double[] array1 = new double[5];
double[] array2 = new double[10];
double[] array3 = new double[array1.length + array2.length];
//rellena array1
for (int i = 0; i < array1.length; i++) {
array1[i] = i;
}
//rellena array2
for (int i = 0; i < array2.length; i++) {
array2[i] = Math.random();
}
/*
Parametros del System.arraycopy:
Array origen,
Posición inicial del array origen,
Array destino,
Posición incial en el array de destino,
Numero de elementos a copiar del array origen al array destino
*/
System.arraycopy(array1, 0, array3, 0, array1.length);
System.arraycopy(array2, 0, array3, array1.length, array2.length);
//mostrar resultados
System.out.println("\nArray1");
for (int i = 0; i < array1.length; i++) {
System.out.println(i + "- " + array1[i]);
}
System.out.println("\nArray2");
for (int i = 0; i < array2.length; i++) {
System.out.println(i + "- " + array2[i]);
}
System.out.println("\nArray3");
for (int i = 0; i < array3.length; i++) {
System.out.println(i + "- " + array3[i]);
}
}
}
Resultado:
run:
Array1
0- 0.0
1- 1.0
2- 2.0
3- 3.0
4- 4.0
Array2
0- 0.5287887048803938
1- 0.46771014928163135
2- 0.8333523729100707
3- 0.4965787587571521
4- 0.26861092247251583
5- 0.822652997195613
6- 0.5053721779352607
7- 0.896713025382418
8- 0.9093387247823286
9- 0.8910677970677133
Array3
0- 0.0
1- 1.0
2- 2.0
3- 3.0
4- 4.0
5- 0.5287887048803938
6- 0.46771014928163135
7- 0.8333523729100707
8- 0.4965787587571521
9- 0.26861092247251583
10- 0.822652997195613
11- 0.5053721779352607
12- 0.896713025382418
13- 0.9093387247823286
14- 0.8910677970677133
BUILD SUCCESSFUL (total time: 0 seconds)
package copiaarray;
public class CopiaArray {
public static void main(String[] args) {
double[] array1 = new double[5];
double[] array2 = new double[10];
double[] array3 = new double[array1.length + array2.length];
//rellena array1
for (int i = 0; i < array1.length; i++) {
array1[i] = i;
}
//rellena array2
for (int i = 0; i < array2.length; i++) {
array2[i] = Math.random();
}
/*
Parametros del System.arraycopy:
Array origen,
Posición inicial del array origen,
Array destino,
Posición incial en el array de destino,
Numero de elementos a copiar del array origen al array destino
*/
System.arraycopy(array1, 0, array3, 0, array1.length);
System.arraycopy(array2, 0, array3, array1.length, array2.length);
//mostrar resultados
System.out.println("\nArray1");
for (int i = 0; i < array1.length; i++) {
System.out.println(i + "- " + array1[i]);
}
System.out.println("\nArray2");
for (int i = 0; i < array2.length; i++) {
System.out.println(i + "- " + array2[i]);
}
System.out.println("\nArray3");
for (int i = 0; i < array3.length; i++) {
System.out.println(i + "- " + array3[i]);
}
}
}
Resultado:
run:
Array1
0- 0.0
1- 1.0
2- 2.0
3- 3.0
4- 4.0
Array2
0- 0.5287887048803938
1- 0.46771014928163135
2- 0.8333523729100707
3- 0.4965787587571521
4- 0.26861092247251583
5- 0.822652997195613
6- 0.5053721779352607
7- 0.896713025382418
8- 0.9093387247823286
9- 0.8910677970677133
Array3
0- 0.0
1- 1.0
2- 2.0
3- 3.0
4- 4.0
5- 0.5287887048803938
6- 0.46771014928163135
7- 0.8333523729100707
8- 0.4965787587571521
9- 0.26861092247251583
10- 0.822652997195613
11- 0.5053721779352607
12- 0.896713025382418
13- 0.9093387247823286
14- 0.8910677970677133
BUILD SUCCESSFUL (total time: 0 seconds)
Suscribirse a:
Entradas (Atom)
Con la tecnología de Blogger.