Matlab - División aleatoria de un conjunto de datos

 
Vista:
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

División aleatoria de un conjunto de datos

Publicado por Fabián (19 intervenciones) el 02/03/2018 06:14:02
Cordial saludo estimados.

Tengo una matriz de M renglones x N columnas; necesito dividir la matriz de manera aleatoria en conjuntos de 60% y 40% respectivamente manteniendo los valores de los renglones sin modificar; por ejemplo mi matriz al 100% es:

1 2 3
4 5 6
7 8 9
a b c
d e f

y en la división tener ahora dos matrices así (aleatorias sin repetirse)

submatriz 1 (40%)

7 8 9
1 2 3

submatriz 2 (60%)

d e f
a b c
4 5 6

He intentado con randperm; pero me señala el error "Error using randperm
Inputs must be nonnegative scalar integers."; valga la aclaración que necesito trabajar con decimales y valores positivos y negativos.

De antemano, mil gracias.

Fabián
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

División aleatoria de un conjunto de datos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 02/03/2018 12:09:58
1
2
3
4
5
6
7
8
9
clear all
M=10; N=2;
u=randi([1 9],[M,N])
porcentaje=round((40/100)*size(u,1));
v=randi([1 size(u,1)],[porcentaje,1]);
u1=u(v,:)
w=u;
w(v,:)=[];
u2=w

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
>> particion_vectores
 
u =
 
     9     9
     1     1
     7     3
     7     1
     6     4
     2     1
     6     9
     3     2
     2     1
     2     3
 
 
u1 =
 
     6     4
     1     1
     2     3
     7     1
 
 
u2 =
 
     9     9
     7     3
     2     1
     6     9
     3     2
     2     1










Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

División aleatoria de un conjunto de datos

Publicado por Fabián (19 intervenciones) el 02/03/2018 12:48:02
Gracias Jose; eres muy amable.

Fabián
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

División aleatoria de un conjunto de datos

Publicado por Fabián (19 intervenciones) el 03/03/2018 03:21:26
Cordial saludo.

Cuando aumento la longitud de la matriz MxN; me aumenta el número de datos en u2 (porcentaje restante); por ejemplo; si tengo 10000 datos en total y saco el 20% en un grupo; allí me quedan 2000 datos y en el restante; me genera más de 8000 datos.

Gracias.

Fabián
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

División aleatoria de un conjunto de datos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 03/03/2018 04:53:48
Tengo una matriz de M renglones x N columnas; necesito dividir la matriz de manera aleatoria en conjuntos de 60% y 40% respectivamente manteniendo los valores de los renglones sin modificar; por ejemplo mi matriz al 100% es:

El código está hecho según pregunta original las que es 40% y 60%. Ud esta cambiando la pregunta original al poner 20%, de echo el código no va funcionar, pero puede hacer una modificación al código que he puesto para que soporte cualquier porcentaje, para ello revise linea por linea y vea que hace linea y lo modifica.

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

División aleatoria de un conjunto de datos

Publicado por Fabián (19 intervenciones) el 03/03/2018 20:15:18
Jose; disculpa por no comunicar de manera asertiva los valores; pensé que el mismo no infería en el resultado en la lógica del programa; fue un error mio; mis más sinceras excusas; sin embargo; previa ejecución de mi parte planteé el siguiente código modificado para trabajar con el 20% y respectivamente con el 80%:

1
2
3
4
5
6
porcentaje=round((20/100)*size(a,1));
v=randi([1 size(a,1)],[porcentaje,1]);
prueba_a=a(v,:)
w=a;
w(v,:)=[];
entrenamiento_a=w

mi matriz a, tiene un tamaño de 4000x3

la salidas son:
prueba_a=800x3 (20%)
entrenamiento_a=3279x3 (que debería ser el 80% equivalente a 3200x3)

mi inquietud es si estoy haciendo algo equivocado en la lógica de modificación del programa; por que no comprendo ese excedente de 79 datos en la salida de entrenamiento_a; que sobrepasan la matriz a inicialmente planteada.

Muchas gracias a todos por su atención; especialmente a Jose que constantemente nos ayuda en este lenguaje de programación

Cordialmente

Fabián
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar