SlideShare una empresa de Scribd logo
1 de 13
Programación del algoritmo de agrupamiento K-means
en SQL
Juan Carlos Olivares Rojas
Ismael Rafael Ponce Medellín
Laboratorio de Sistemas Distribuidos
Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET)
Cuernavaca, Morelos, México
{jcolivares04c, rafaxzero04c}@cenidet.edu.mx
En este reporte se resume el diseño y la implementación del algoritmo k-means con
instrucciones de SQL. La implementación se desarrollo en el manejador Oracle 9i a
través de procedimientos almacenados y con SQL dinámico. Para el diseño nos basamos
en el modelo propuesto por [1], en cuyo artículo se comentan una serie de pasos sobre
como sería posible implementarlo; sin embargo adolece de algunos puntos importantes
que no son tan obvios y que son necesarios para poder desarrollarlo.
Como en todo algoritmo, primero se detalla la entrada, seguido de la salida que se
espera obtener, para finalizar explicando lo que se realiza para obtener el resultado.
Entrada
El algoritmo recibe como entrada una tabla Y = {y1, y2, … , yn} la cual contiene d
dimensiones y n puntos (tuplas) que se desean agrupar en k grupos. Por ejemplo1
se
tiene la siguiente tabla:
ALIMENTOS (Nombre, Proteína, Vitamina, Grasa, Azucar, Mineral) con los siguientes
valores de ejemplo:
Nombre Proteína Vitamina Grasa Azúcar Mineral
Hamburguesa 10 0 10 0 0
Papas 5 3 15 12 0
Refresco 0 0 0 23 0.5
Helado 0 1 7 33 0
Malteada 4 2 10 37 0
Tabla 1. Tabla alimentos.
El algoritmo k-means trabaja con datos numéricos por que se basa en el cálculo de
distancias euclidianas entre los puntos para agrupar; por lo que la tabla Y de este
ejemplo sería la siguiente:
1
Cabe hacer mención que tanto los datos como los ejemplos mostrados en este reporte,
no están basados en hechos reales.
D1 d2 d3 d4 d5
n1 10 0 10 0 0
n2 5 3 15 12 0
n3 0 0 0 23 0.
5
n4 0 1 7 33 0
n5 4 2 10 37 0
Tabla 2. Tabla Y de la relación alimentos.
Como puede observarse esta tabla, al igual que todas las demás Y es de dimensiones
n*d, donde existe una equivalencia entre cada punto n y cada dimensión d. Al tener esta
nueva tabla, se pierde el identificador de cada elemento, por lo que se define una nueva
relación que contiene como índice una clave primaria con valores autoincrementales.
Esta nueva tabla YH quedaría de la siguiente forma:
i d1 d2 d3 d4 d5
1 10 0 10 0 0
2 5 3 15 12 0
3 0 0 0 23 0.
5
4 0 1 7 33 0
5 4 2 10 37 0
Tabla 3. Ejemplo de Tabla YH.
Salida
El algoritmo recibe como salida tres matrices denominadas W, C y R, que representan
los pesos, los centroides y las varianzas respectivamente.
Las tablas C y R son de dimensiones d*k, por lo que si en nuestro ejemplo se quisiesen
realizar agrupaciones de los puntos (elementos) en dos grupos donde se tuvieran los
elementos más saludables y los que no, k sería igual a 2. Donde k1 representaría el
grupo de alimentos saludables y k2 los que no son tan saludables. Por lo que se tendría
una tabla como la siguiente:
K1 K2
d1 7 3
d2 1 4
d3 8 12
d4 17 21
d5 0 1
Tabla 4. Ejemplo de tabla C y R.
Por ejemplo, si la tabla fuese la relación C, de los valores anteriores, indicarían que en
d3k2, el centroide del atributo grasa en el grupo 2 es de 12 unidades.
Como puede apreciarse el tamaño de esta tabla depende fundamental del número de
dimensiones y del número de grupos, por lo que al ser estos demasiado grandes la
información a consultar se dificulta un poco, por lo que la mejor forma de
implementarse es la siguiente:
l j Valor
1 1 7
1 2 3
2 1 1
2 2 4
3 1 8
3 2 12
4 1 17
4 2 21
5 1 0
5 2 1
Tabla 5. Ejemplo de tabla C y R optimizadas para el algoritmo.
Trabajando los valores de forma vertical, permite un mejor acceso a los mismos,
facilitando sobre todo su utilización al momento de efectuar cálculos que los involucren,
como los necesarios para calcular la medida del error.
La tabla W que indica los pesos de cada uno de los clusters, es de dimensión k*1. Por lo
que, para nuestro ejemplo estaría dada como sigue:
Peso
K1 0.4
K2 0.6
Tabla 6. Ejemplo de Tabla W.
En este caso, el valor de 0.4 de k1 nos índica que el 40% de los puntos (elementos) de la
relación Y caen sobre este grupo. La sumatoria de todos los pesos da como resultado la
unidad (100%).
De manera complementaría también se dispone de una tabla llamada model que
contiene las estadísticas del sistema como son el número de dimensiones tomadas en
consideración, el número de grupos, el número de elementos o puntos, el promedio del
error y la diferencia del promedio del error. La diferencia del promedio del error
consiste en la diferencia del promedio del error calculado anteriormente contra el nuevo
error obtenido, debido a la reubicación de los centroides de cada cluster. La tabla model
en nuestro ejemplo es la siguiente:
d k n I avg_q dif_avg_q
5 2 5 3 0.3 0.2
Tabla 7. Tabla model.
En este caso los valores de esta tabla nos indica que la relación analizada tiene 5
dimensiones que se ha decidido agrupar en 2 grupos, donde la cantidad de elementos
(puntos) es 5, que hasta el momento se han realizado 3 iteraciones en el algoritmo, el
promedio del error es 0.3 y la diferencia del promedio del error es de 0.2.
Estos tres últimos valores son muy importantes ya que ayudan a determinar en que
momento debe el algoritmo detenerse. El algoritmo se puede terminar cuando se haya
realizado un número prefijado de iteraciones o bien, cuando la diferencia del promedio
del error tienda a 0 (o que ya no cambie); se puede prefijar un límite para este valor.
Por último, se define la relación YNN como la relación que contiene todos los
elementos (puntos) de Y representados por su índice o clave primaria respectiva y el
valor del grupo al cual fueron asignados. Por ejemplo, si se tiene la siguiente tabla
YNN:
I J
1 1
2 2
3 1
4 2
5 2
Tabla 8. Ejemplo de tabla YNN.
Esta nos índica que el elemento número uno de nuestra relación Y está en el grupo 1.
Para nuestro ejemplo, esta tabla nos indica que tanto las hamburguesas como los
refrescos (elementos 1 y 3) están el grupo 1 definido como saludable; mientras que en el
grupo 2 definido como menos saludable se encuentran los elementos de papas, helado y
malteada.
Proceso
Para el desarrollo del algoritmo se han tomado tres índices que indican la relación entre
las tablas y sus elementos. Dichos índices ayudan a relacionar tablas y agilizar en cierta
medida los procesos de E/S tal y como se muestra a continuación:
Índice Rango Descripción
i 1 … n Número de puntos (elemento)
j 1 … k Número de grupo
l 1 … d Número de dimensión
Tabla 9. Nomenclatura de los índices empleados.
Se define la operación de transposición T como la lectura de un valor en forma de
columna a la lectura en forma de fila. Por ejemplo, si se realizará la transposición o
matriz transpuesta de la relación W (ver tabla 4), definida como Wt sería la siguiente:
k1 k2
Valor 0.
4
0.6
Tabla 10. La transposición de W definida como Wt.
Se define como X1, … Xk a los subconjuntos de Y que pertenecen a cada grupo. Donde
se cumple la siguiente propiedad Xj ^ Xj’ = 0 si j < > j’; es decir, ningún elemento de Y
se encuentra agrupado en dos o más grupos distintos. Al unir los subconjuntos X1, … ,
Xk se obtiene Y.
La parte medular del algoritmo consiste en el cálculo de la distancia euclidiana entre los
puntos (elementos) y un valor de referencia (centroide) para cada grupo. En base a esta
distancia se agrupan los elementos en donde se obtenga la distancia más corta de los
centroides.
La distancia euclidiana se calcula con la siguiente fórmula:
d(yi, Cj) = (yi - Cj)T
(yi - Cj) = ∑d
l=1 (yli – Clj)2
En donde nos dice que la distancia del punto yi con respecto al centroide Cj es igual a la
diferencia entre yi y Cj transpuesta por la diferencia de yi y Cj. De modo generalizado, la
fórmula se expresa como la sumatoria al cuadrado de las diferencias de los puntos y los
centroides en cada dimensión.
Para dejar en claro este concepto, se tomará un ejemplo de una relación Y con dos
dimensiones, ya que hasta tres dimensiones es posible graficar y que dicha gráfica sea
entendida sin problemas.
De la relación Y se tomarán las dimensiones d1 y d2 por lo que nuestra tabla de ejemplo
será la siguiente:
D1 d2
N1 10 0
N2 5 3
N3 0 0
N4 0 1
N5 4 2
Tabla 11. Tabla Y de ejemplo para el cálculo de dimensiones.
Si se quisiera calcular la distancia que hay entre el punto 1 (elemento n1) y el centroide
1 (C1) se aplicaría la fórmula:
d(y1 – c1) = (y1 – c1)T
(y1 – c1) = ∑2
l=1(yl1,cl1) = (y11 – C11)2
+ (y21 –
C21)2
En esta parte destacan dos puntos fundamentales. El primero de ellos, consiste en que
no se han definidos los valores que contendrán los centroides de cada grupo para cada
una de las dimensiones. La forma más fácil de implementarla consiste en tomar los
valores de manera aleatoria. En este algoritmo así se han determinado los puntos
tomando en cuenta muestras (‘samples’) en la tabla Y de un elemento. Otra opción
distinta a esta circunstancia, podría ser el considerar los primeros valores de la tabla
YH, en caso de que no se contará con una manera de obtenerlos de manera aleatoria, lo
importante es establecer los que en primera instancia serán los centroides, los cuales
pueden variar según se vaya ejecutando el algoritmo.
En este caso se ha tomado en cuenta que se tienen dos grupos, y se han determinado los
centroides iniciales como sigue:
k1 K2
d1 3 8
d2 2 2
Tabla 12. Tabla C de centroides para el cálculo de distancias.
El otro punto consiste en que al obtener los valores del punto (elemento) en la tabla Y se
necesita acceder por fila, mientras que en la tabla C y en el resto de las demás tablas se
accede por columna, por lo que se necesita cambiar todas las tablas para que se adapte a
la forma de Y o cambiar Y. Por razones de rendimiento como se explica en el artículo
que se tomo como base, se optó por cambiar Y por lo que para la implementación del
algoritmo, se tiene una nueva tabla Y transpuesta denominada YV, la cual tiene en las
filas las dimensiones y en las columnas los puntos. Por lo que la nueva tabla YV
quedaría de la siguiente forma:
n1 n2 n3 n4 n5
D1 10 5 0 0 4
D2 0 3 0 1 2
Tabla 13. Ejemplo de tabla YV.
Se puede notar que la tabla YV obtenida de la transposición de Y tendrá muchos
atributos (columnas) a medida del número de puntos o elementos contenidos en la tabla
Y. Esto es poco práctico para tablas con demasiados puntos, por lo que una mejor
implementación de la tabla YV es la siguiente:
i l Valor
1 1 10
1 2 0
2 1 5
2 2 3
3 1 0
3 2 0
4 1 0
4 2 1
5 1 4
5 2 2
Tabla 14. Tabla YV optimizada.
Siguiendo la fórmula las distancias son las siguientes:
d(y1,C1) = (10-3)2
+ (0-2) 2
= 49 + 4 = 53
d(y1,C2) = (10-8)2
+ (0-2)2
= 4 + 4 = 8
d(y2,C1) = (5-3)2
+ (3-2)2
= 4 + 1 = 5
d(y2,C2) = (5-8)2
+ (3-2)2
= 9 + 1 = 10
d(y3,C1) = (0-3)2
+ (0-2)2
= 9 + 4 = 13
d(y3,C2) = (0-8)2
+ (0-2)2
= 64 + 4 = 68
d(y4,C1) = (0-3)2
+ (1-2)2
= 9 + 1 = 10
d(y4,C2) = (0-8)2
+ (1-2)2
= 64 + 1 = 65
d(y5,C1) = (4-3)2
+ (2-2)2
= 1 + 0 = 1
d(y5,C2) = (4-8)2
+ (2-2)2
= 16 + 0 = 16
Estos valores que se obtienen, se almacenan en la tabla YD que tiene como filas la llave
primaria el índice del punto (elemento) el índice del grupo y la distancia en el plano. La
tabla YD de nuestro ejemplo es la siguiente:
i k Distancia
1 1 53
1 2 8
2 1 5
2 2 10
3 1 13
3 2 68
4 1 10
4 2 65
5 1 1
5 2 16
Tabla 15. Tabla de distancias YD.
Con los valores mínimos de la distancia se llena la tabla YNN, la cual en este caso
tendría los valores que se muestran a continuación. Estos valores indican en primer
instancia a que grupo pertenece cada punto (elemento) de Y.
i J
1 2
2 1
3 1
4 1
5 1
Tabla 16. Tabla YNN obtenida de la ejecución del algoritmo.
En la figura 1, se muestra como quedan asignados los grupos de los elementos (puntos)
con los centroides calculados. En el primer grupo están aquellos elementos que tienen
menos proteína y vitaminas, y el grupo dos los que tienen mayor proteína y vitamina.
En este análisis se puede observar que aunque se tienen dos dimensiones, la de mayor
peso o importancia es la de proteína que determina el grupo, la dimensión vitamina no
es tan relevante debido a que los elementos tienen valores semejantes.
Gráfica de la relación Y
0
0.5
1
1.5
2
2.5
3
3.5
0 1 2 3 4 5 6 7 8 9 10 11
d1 (Proteína)
d2(Vitamina)
Elementos
Centroides
Figura 1. Agrupación de los elementos de la relación Y definida en este ejemplo.
Los pasos del algoritmo en general son los siguientes:
1. Configuración.- Consiste en crear y cargar los datos de entrada.
2. Inicialización.- Inicializar los centroides.
3. Paso E.- Computar las k distancias por punto yi.
4. Paso E.- Encontrar el centroide más cercano Cj para cada punto yi.
5. Paso M.- Actualizar los pesos, centroides y varianzas: W, C y R.
6. Paso M.- Actualizar la tabla de seguimiento del progreso de k-means (model).
7. Repetir los pasos 3 a 6 hasta que el algoritmo converja.
A través de los ejemplos que se han descrito, se han determinado la mayoría de los
pasos del algoritmo, a continuación sólo se describirán aquellos pasos omitidos y
aquellos que necesitan de mayor explicación.
Para el cálculo de los centroides iniciales es necesario disponer una tabla temporal que
almacene los centroides iniciales, a dicha tabla se ha denominado CH (de CHorizontal)
por que se obtiene de YH al sacar una muestra aleatoria (un punto) para cada grupo por
lo que siguiendo el ejemplo definido anteriormente, CH quedaría de la siguiente forma:
k d1 d2
1 5 3
2 0 1
Tabla 17. Ejemplo de tabla CH.
Los valores de esta tabla se obtuvieron al azar al tomar como muestra el punto 2 y 4. De
aquí se obtiene la tabla C con su transposición por lo que se obtendría la tabla C como
sigue:
k1 k2
d1 5 0
d2 3 1
Tabla 18. Tabla C obtenida de CH.
El cálculo de la distancia euclideana tiene una complejidad de O(dkn) lo que un
procedimiento altamente costoso en tiempo de CPU para valores demasiados grande,
sobre todo de n. Este se calcula realizando una sumatoria de los campos valor de la tabla
YV y C reunidas por medio de su índice de dimensiones.
Para encontrar el centroide más cercano para un punto determinado se necesitan dos
pasos. Primero, calcular la distancia mínima de todos los puntos para cada grupo, dichas
distancias se calculan en la tabla YD; segundo, la distancia mínima se obtiene a partir de
estar almacenando el índice del punto y su grupo en la tabla YNN.
Para actualizar los valores en el paso M, se necesita actualizar la tabla de pesos,
centroides y varianza; W, C y R respectivamente.
La tabla de pesos se actualiza siempre con la cuenta de todos los puntos que estén sobre
un grupo determinado en la tabla YNN. Posteriormente se divide el valor obtenido por
el total de puntos (elementos) disponibles en la tabla model.
La tabla de centroides se actualiza con el promedio de todos los valores de los puntos
que se encuentran en el mismo grupo en una dimensión en especial.
La tabla R de varianzas se obtiene al sacar el promedio de la diferencia del valor del
punto y el nuevo valor calculado para el centroide para todas las dimensiones del grupo
en el que está el elemento (punto).
Para finalizar, en cada iteración se debe actualizar la tabla modelo. Se incrementa el
número de iteraciones en uno por cada vez que se ejecuten los pasos E y M del
algoritmo, y el valor del promedio de la diferencia del error, el cual se obtiene de la
sumatoria de multiplicar el valor de la varianza de cada grupo por su peso
correspondiente.
La tabla modelo puede utilizarse para determinar el momento en el que se debe detener
la ejecución del algoritmo, ya sea tomando en cuenta el numero de iteraciones
efectuadas, o considerando la diferencia entre el promedio de la diferencia de error de la
iteración anterior con respecto a la última.
Algoritmo optimizado
Se ha realizado algunas mejoras para aumentar la velocidad de ejecución del algoritmo
y disminuir la carga de trabajo ocasionada por las consultas necesarias.
Para aumentar la velocidad de procesamiento al realizar los cálculos de las estadísticas
se implementaron tres nuevas tablas denominadas N, M y Q. N es de dimensiones k*1;
mientras que M y Q son d*k y son análogas a W, C y R en dimensiones. Nj almacena el
número de puntos que están contenidos en un grupo en particular (Nj = |Xj|). Mj
almacena la sumatoria de dichos puntos (Mj = ∑yi Є Xj yi) y Qj representa la sumatoria de
los cuadrados de los puntos que se encuentran en el grupo j (Qj = ∑ yiЄXj yi
T
yi ).
A través de estas nuevas matrices el cálculo de W, C y R se simplifica
considerablemente. Wj = Nj / ∑k
j=1 Wj; Cj = Mj / Nj, Rj = Qj /Nj – Cj
T
Cj.
Se puede observar que tener varias tablas por separadas no es óptimo, debido a esto se
remplazó dichas tablas por una sola, en este caso NMQ (l, j, N, M, Q) y también WCR
(l, j, W, C, R). Lo importante de juntar N, M y Q en la misma tabla, es que con una
misma instrucción se pueden actualizar todos sus valores.
Mientras que en WCR se asigna primeramente a W un valor de cero, después,
dependiendo del grupo k del que se trate, W guardará la cantidad de elementos que
coincidan en ese grupo, asignándole el valor de N correspondiente; se debe inicializar
con cero al principio, en el supuesto de que un grupo quede vacío, ya que después se
debe dividir tal valor entre la cantidad de elementos total, y si no se efectuará así, se
generarían errores o inconsistencias. Todas las demás operaciones del algoritmo
estándar se dejan igual.
Código SQL para Oracle 9i
El código que se muestra a continuación corresponde con las instrucciones SQL
que se siguen para desarrollar el algoritmo k-means; se toma como ejemplo una tabla Y
con 3 campos; además, se van a crear dos grupos.
El primer paso consiste en preparar las tablas que se van a utilizar.
/* inicialización */
DROP TABLE YH;
CREATE TABLE YH AS (
SELECT
sum(1) over(order by 1 rows unbounded preceding) AS i
,y ,y2 ,y3 FROM Y );
DROP TABLE model;
CREATE TABLE model(
d INT,k INT,n float,iteration INT,avg_q real,dif_avg_q real);
INSERT INTO model
SELECT 3,2,count(*),0,0.0,0.0 FROM YH;
De tabla modelo se almacenan la cantidad de campos y grupos que se van a
considerar, la cantidad de elementos que se van a agrupar, el primer cero indica el
numero de iteraciones efectuadas y los siguientes valores representan el promedio del
error y la diferencia del promedio del error, respectivamente.
DROP TABLE YV;
CREATE TABLE YV ( i int,l INT,val REAL);
INSERT INTO YV SELECT i,1,y1 FROM YH;
...
INSERT INTO YV SELECT i,3,y3 FROM YH;
DROP TABLE W;
CREATE TABLE W (j int,w float);
DROP TABLE C;
CREATE TABLE C(l int,j int,val real);
DROP TABLE R;
CREATE TABLE R(l int,j int,val real);
DROP TABLE YD;
CREATE TABLE YD (i int,j int,distance real);
En este primer paso, en CH se toman como “muestras” los centroides iniciales
los primeros dos elementos de YH. Estos centroides irán cambiando, según vaya
ejecutándose el algoritmo.
DROP TABLE CH;
CREATE TABLE CH(j INT,y1 REAL,y2 REAL,y3 REAL);
INSERT INTO CH SELECT 1,y1,y2,y3 FROM YH where i='1';
INSERT INTO CH SELECT 2,y1,y2,y3 FROM YH where i='2';
INSERT INTO C
SELECT 1,1,y1 FROM CH WHERE j=1
...
UNION SELECT 3,1,y3 FROM CH WHERE j=1;
INSERT INTO C
SELECT 1,2,y1 FROM CH WHERE j=2
...
UNION SELECT 3,2,y3 FROM CH WHERE j=2;
Ahora se calculan las distancias mínimas y se encuentran los centroides más
cercanos.
/* paso E*/
DELETE FROM YD;
INSERT INTO YD SELECT i,j,sum( power((YV.val - C.val),2))
FROM YV,C WHERE YV.l=C.l GROUP BY i,j;
DROP TABLE YNN;
CREATE TABLE YNN AS( SELECT YD.i,YD.j
FROM YD,( SELECT i,min(distance) AS mindistance FROM YD GROUP BY
i)YMIND
WHERE YD.i=YMIND.i and YD.distance=YMIND.mindistance);
Por último, se actualizan las tablas W, C y R, así como model, donde se van
registrando los cambios.
/* Paso M*/
DELETE FROM W;
INSERT INTO W SELECT j,count(*) FROM YNN GROUP BY j;
UPDATE W SET w=w/(select n from model);
DELETE FROM C;
INSERT INTO C SELECT l,j,avg(YV.val) FROM YV,YNN
WHERE YV.i=YNN.i GROUP BY l,j;
DELETE FROM R;
INSERT INTO R SELECT C.l,C.j,avg( power((YV.val-C.val),2) )
FROM C,YV,YNN WHERE YV.i=YNN.i and YV.l=C.l and YNN.j=C.j GROUP BY
C.l,C.j;
UPDATE model set dif_avg_q=abs((SELECT sum(W*R.val) FROM R,W WHERE
R.j=W.j)-avg_q);
UPDATE model SET avg_q=(SELECT sum(W*R.val) FROM R,W WHERE
R.j=W.j),iteration=iteration+1;
Los pasos E y M deben ejecutarse hasta alcanzar el número de iteraciones u
obtener una diferencia de error deseada. Estos valores son observables en la tabla
model.
Para la versión optimizada, el código es muy semejante, variando un poco el
cálculo de los pasos E y M. Los cambios se muestran a continuación.
Dentro del paso de inicialización, en vez de crear las tablas W, C y R se crea una
sola, WCR. Además, la inicialización que se hacia en C, ahora se efectúa en WCR
DROP TABLE WCR;
CREATE TABLE WCR (l int,j int,W real,C real,R real);
INSERT INTO WCR
SELECT 1,1,0,y1,1 FROM CH WHERE j=1
...
UNION SELECT 3,1,0,y3,1 FROM CH WHERE j=1;
INSERT INTO WCR
SELECT 1,2,0,y1,1 FROM CH WHERE j=2
...
UNION SELECT 3,2,0,y3,1 FROM CH WHERE j=2;
El paso E ahora de calcula de esta manera. En esta ocasión, los cálculos
estadísticos se llevan sobre NMQ.
/* E step */
DELETE FROM YD;
INSERT INTO YD SELECT YV.i,WCR.j,sum( power((YV.val-WCR.C),2) )
FROM YV,WCR WHERE YV.l=WCR.l GROUP BY YV.i,WCR.j;
DROP TABLE YNN;
CREATE TABLE YNN AS (SELECT YD.i,YD.j
FROM YD,(SELECT i,min(distance) AS mindistance FROM YD GROUP BY i)YMIND
WHERE YD.i=YMIND.i and YD.distance=YMIND.mindistance);
DELETE FROM NMQ;
INSERT INTO NMQ
SELECT l,j,sum(1.0) AS N,sum(YV.val) AS M,sum(YV.val*YV.val) AS Q
FROM YV,YNN WHERE YV.i=YNN.i
GROUP BY l,j;
El paso M ahora utiliza a NMQ para actualizar a WCR. W se debe actualizar por
cada grupo que se desea formar.
UPDATE WCR SET
W=(select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND NMQ.j=WCR.j)AND
NMQ.j=1 group by N) WHERE WCR.j=1;
...
UPDATE WCR SET
C=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND
NMQ.j=WCR.j)AND NMQ.j=1 group by N)>0
THEN (select M/N from NMQ WHERE NMQ.l=1 AND NMQ.j=1)
ELSE C END
R=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND
NMQ.j=WCR.j)AND NMQ.j=1 group by N)>0
THEN (select Q/N - power((M/N),2) from NMQ WHERE NMQ.l=1 AND NMQ.j=1)
ELSE R END
WHERE WCR.l=1 AND WCR.j=1;
...
UPDATE WCR SET
C=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND
NMQ.j=WCR.j)AND NMQ.j=2 group by N)>0
THEN (select M/N from NMQ WHERE NMQ.l=3 AND NMQ.j=2)
ELSE C END
R=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND
NMQ.j=WCR.j)AND NMQ.j=2 group by N)>0
THEN (select Q/N - power((M/N),2) from NMQ WHERE NMQ.l=3 AND NMQ.j=2)
ELSE R END
WHERE WCR.l=3 AND WCR.j=2;
UPDATE WCR SET W=W/(select n from model);
UPDATE model set dif_avg_q=abs((SELECT sum(W*R) FROM WCR)-avg_q);
UPDATE model SET avg_q=(SELECT sum(W*R) FROM WCR),iteration=iteration+1;
De igual manera, los pasos E y M se repiten hasta que el algoritmo converja.
Referencias
[1] Carlos Ordonez, “Programming the K-means Clustering Algorithm in SQL”.
Publicado en KDD’04, del 22 al 25 de agosto de 2004, Seattle, Washington, USA.

Más contenido relacionado

La actualidad más candente

Eje 3 marco teorico def
Eje  3 marco teorico defEje  3 marco teorico def
Eje 3 marco teorico defDiana Dure
 
Ud 2 determinantes
Ud 2 determinantesUd 2 determinantes
Ud 2 determinantesalfonnavarro
 
APROXIMACIÓN AL TRABAJO CIENTÍFICO
APROXIMACIÓN AL TRABAJO CIENTÍFICOAPROXIMACIÓN AL TRABAJO CIENTÍFICO
APROXIMACIÓN AL TRABAJO CIENTÍFICOiesrioaguas
 
Linear Programming Example 01
Linear Programming Example 01Linear Programming Example 01
Linear Programming Example 01Edgar Mata
 
Matricesydeterminantes 100215225738-phpapp02
Matricesydeterminantes 100215225738-phpapp02Matricesydeterminantes 100215225738-phpapp02
Matricesydeterminantes 100215225738-phpapp02Fredy Quispe Ferrel
 
Funciones funci_n_lineal_y_funci_n_cuadratica_presentaci_n
Funciones  funci_n_lineal_y_funci_n_cuadratica_presentaci_nFunciones  funci_n_lineal_y_funci_n_cuadratica_presentaci_n
Funciones funci_n_lineal_y_funci_n_cuadratica_presentaci_nNorkarelysJosRicardo
 
Sistemas ecuaciones naudy
Sistemas ecuaciones naudySistemas ecuaciones naudy
Sistemas ecuaciones naudyASIGNACIONUFT
 
Laboratorio De Física General
Laboratorio De Física GeneralLaboratorio De Física General
Laboratorio De Física GeneralAna Caliz
 
Guia curso microeconomia d miras pilar - pedro baroni 2012
Guia curso microeconomia d miras   pilar - pedro baroni 2012Guia curso microeconomia d miras   pilar - pedro baroni 2012
Guia curso microeconomia d miras pilar - pedro baroni 2012giomaralvarezc
 
Revision de Presaberes Metodos Numericos
Revision de Presaberes Metodos NumericosRevision de Presaberes Metodos Numericos
Revision de Presaberes Metodos NumericosDiego Perdomo
 

La actualidad más candente (20)

Dcl
DclDcl
Dcl
 
Ajuste de curvas regresion lineal y no lineal
Ajuste de curvas regresion lineal y no linealAjuste de curvas regresion lineal y no lineal
Ajuste de curvas regresion lineal y no lineal
 
gráficas lineales
gráficas linealesgráficas lineales
gráficas lineales
 
T08
T08T08
T08
 
Resumen de algebra_mat 2
Resumen de algebra_mat 2Resumen de algebra_mat 2
Resumen de algebra_mat 2
 
MÉTODOS NUMÉRICOS
MÉTODOS NUMÉRICOSMÉTODOS NUMÉRICOS
MÉTODOS NUMÉRICOS
 
Variables aleatorias
Variables aleatoriasVariables aleatorias
Variables aleatorias
 
Matgeneral semana5
Matgeneral semana5Matgeneral semana5
Matgeneral semana5
 
Eje 3 marco teorico def
Eje  3 marco teorico defEje  3 marco teorico def
Eje 3 marco teorico def
 
Ud 2 determinantes
Ud 2 determinantesUd 2 determinantes
Ud 2 determinantes
 
Aprendiendo a graficar
Aprendiendo a graficarAprendiendo a graficar
Aprendiendo a graficar
 
APROXIMACIÓN AL TRABAJO CIENTÍFICO
APROXIMACIÓN AL TRABAJO CIENTÍFICOAPROXIMACIÓN AL TRABAJO CIENTÍFICO
APROXIMACIÓN AL TRABAJO CIENTÍFICO
 
Linear Programming Example 01
Linear Programming Example 01Linear Programming Example 01
Linear Programming Example 01
 
Matricesydeterminantes 100215225738-phpapp02
Matricesydeterminantes 100215225738-phpapp02Matricesydeterminantes 100215225738-phpapp02
Matricesydeterminantes 100215225738-phpapp02
 
Funciones funci_n_lineal_y_funci_n_cuadratica_presentaci_n
Funciones  funci_n_lineal_y_funci_n_cuadratica_presentaci_nFunciones  funci_n_lineal_y_funci_n_cuadratica_presentaci_n
Funciones funci_n_lineal_y_funci_n_cuadratica_presentaci_n
 
Sistemas ecuaciones naudy
Sistemas ecuaciones naudySistemas ecuaciones naudy
Sistemas ecuaciones naudy
 
Laboratorio De Física General
Laboratorio De Física GeneralLaboratorio De Física General
Laboratorio De Física General
 
Mod matrices y determinantes
Mod matrices y determinantesMod matrices y determinantes
Mod matrices y determinantes
 
Guia curso microeconomia d miras pilar - pedro baroni 2012
Guia curso microeconomia d miras   pilar - pedro baroni 2012Guia curso microeconomia d miras   pilar - pedro baroni 2012
Guia curso microeconomia d miras pilar - pedro baroni 2012
 
Revision de Presaberes Metodos Numericos
Revision de Presaberes Metodos NumericosRevision de Presaberes Metodos Numericos
Revision de Presaberes Metodos Numericos
 

Destacado

Recursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de Minería
Recursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de MineríaRecursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de Minería
Recursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de Mineríacongresochile
 
Desarrollo web con herramientas libres
Desarrollo web con herramientas libresDesarrollo web con herramientas libres
Desarrollo web con herramientas libresManuel Mujica
 
ELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONEuler
 
Conferencia Ignite 09 (Jc Lucas) Final
Conferencia Ignite 09 (Jc Lucas) FinalConferencia Ignite 09 (Jc Lucas) Final
Conferencia Ignite 09 (Jc Lucas) FinalJuan Carlos Lucas
 
What Makes Entrepreneurs Entrepreneurial
What Makes Entrepreneurs EntrepreneurialWhat Makes Entrepreneurs Entrepreneurial
What Makes Entrepreneurs EntrepreneurialGlenn Klith Andersen
 
Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...
Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...
Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...Brioude Internet
 
olpccameroontrain
olpccameroontrainolpccameroontrain
olpccameroontrainkacandre
 
La (des)igualdad de género de las políticas económicas
La (des)igualdad de género de las políticas económicasLa (des)igualdad de género de las políticas económicas
La (des)igualdad de género de las políticas económicasCarmen Castro
 
Desphotosraresmo
DesphotosraresmoDesphotosraresmo
Desphotosraresmolyago
 
Décret n° 2014 1326 du 5 novembre 2014
Décret n° 2014 1326 du 5 novembre 2014 Décret n° 2014 1326 du 5 novembre 2014
Décret n° 2014 1326 du 5 novembre 2014 Marchitecture
 
Mesa de pingpong cornilleau,mesa 250 indoor
Mesa de pingpong cornilleau,mesa 250 indoorMesa de pingpong cornilleau,mesa 250 indoor
Mesa de pingpong cornilleau,mesa 250 indoorCornilleau España
 
Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...
Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...
Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...Nathalie Caclard
 
Audienciay Periodismo Digital
Audienciay Periodismo DigitalAudienciay Periodismo Digital
Audienciay Periodismo DigitalRonny Isuiz
 

Destacado (20)

Recursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de Minería
Recursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de MineríaRecursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de Minería
Recursos Hídricos y Desarrollo Sustentable - Sociedad Nacional de Minería
 
Desarrollo web con herramientas libres
Desarrollo web con herramientas libresDesarrollo web con herramientas libres
Desarrollo web con herramientas libres
 
Comuniación Escrita
Comuniación EscritaComuniación Escrita
Comuniación Escrita
 
ELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACION
 
Conferencia Ignite 09 (Jc Lucas) Final
Conferencia Ignite 09 (Jc Lucas) FinalConferencia Ignite 09 (Jc Lucas) Final
Conferencia Ignite 09 (Jc Lucas) Final
 
What Makes Entrepreneurs Entrepreneurial
What Makes Entrepreneurs EntrepreneurialWhat Makes Entrepreneurs Entrepreneurial
What Makes Entrepreneurs Entrepreneurial
 
Haiti
HaitiHaiti
Haiti
 
La bemol
La bemolLa bemol
La bemol
 
Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...
Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...
Google et linking sont-ils encore compatibles? Bonnes pratiques SEO - Brioude...
 
olpccameroontrain
olpccameroontrainolpccameroontrain
olpccameroontrain
 
Proc titulacion
Proc titulacionProc titulacion
Proc titulacion
 
Pré test migrant
Pré test migrantPré test migrant
Pré test migrant
 
La (des)igualdad de género de las políticas económicas
La (des)igualdad de género de las políticas económicasLa (des)igualdad de género de las políticas económicas
La (des)igualdad de género de las políticas económicas
 
Desphotosraresmo
DesphotosraresmoDesphotosraresmo
Desphotosraresmo
 
Redes Sociales
Redes SocialesRedes Sociales
Redes Sociales
 
Décret n° 2014 1326 du 5 novembre 2014
Décret n° 2014 1326 du 5 novembre 2014 Décret n° 2014 1326 du 5 novembre 2014
Décret n° 2014 1326 du 5 novembre 2014
 
Mesa de pingpong cornilleau,mesa 250 indoor
Mesa de pingpong cornilleau,mesa 250 indoorMesa de pingpong cornilleau,mesa 250 indoor
Mesa de pingpong cornilleau,mesa 250 indoor
 
Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...
Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...
Jeunesse, pratiques et territoire : réflexions à partir des cahiers de l'acti...
 
Audienciay Periodismo Digital
Audienciay Periodismo DigitalAudienciay Periodismo Digital
Audienciay Periodismo Digital
 
Blogs
BlogsBlogs
Blogs
 

Similar a Kmean sql

Estadística Cálculo de Media y desviación 009
Estadística Cálculo de Media y desviación 009Estadística Cálculo de Media y desviación 009
Estadística Cálculo de Media y desviación 009CESAR A. RUIZ C
 
Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...
Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...
Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...Mario Suárez
 
Álgebra Lineal y Modelamiento Económico
Álgebra Lineal y Modelamiento EconómicoÁlgebra Lineal y Modelamiento Económico
Álgebra Lineal y Modelamiento EconómicoJuan Segura
 
Ejemplos de diseño Bloques al azar
Ejemplos de diseño Bloques al azarEjemplos de diseño Bloques al azar
Ejemplos de diseño Bloques al azarug-dipa
 
Presentación clase 5 regresión múltiple.pdf
Presentación clase 5 regresión múltiple.pdfPresentación clase 5 regresión múltiple.pdf
Presentación clase 5 regresión múltiple.pdfMARLENIMIGUELMARTINE
 
Definici+¦n de antiderivada radhames canigiani
Definici+¦n de antiderivada radhames canigianiDefinici+¦n de antiderivada radhames canigiani
Definici+¦n de antiderivada radhames canigianicanigiani83
 
Guion controlpor variables
Guion controlpor variablesGuion controlpor variables
Guion controlpor variablesleswil
 
Diseño de experiencias
Diseño de experienciasDiseño de experiencias
Diseño de experienciasDiego Gomez
 

Similar a Kmean sql (20)

Estadística Cálculo de Media y desviación 009
Estadística Cálculo de Media y desviación 009Estadística Cálculo de Media y desviación 009
Estadística Cálculo de Media y desviación 009
 
Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...
Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...
Cuartiles, diagrama de caja y bigotes, deciles y percentiles con excel y geog...
 
Álgebra Lineal y Modelamiento Económico
Álgebra Lineal y Modelamiento EconómicoÁlgebra Lineal y Modelamiento Económico
Álgebra Lineal y Modelamiento Económico
 
dqwrwer
dqwrwerdqwrwer
dqwrwer
 
Ejemplos de diseño Bloques al azar
Ejemplos de diseño Bloques al azarEjemplos de diseño Bloques al azar
Ejemplos de diseño Bloques al azar
 
Presentación clase 5 regresión múltiple.pdf
Presentación clase 5 regresión múltiple.pdfPresentación clase 5 regresión múltiple.pdf
Presentación clase 5 regresión múltiple.pdf
 
Tarea6
Tarea6Tarea6
Tarea6
 
Tarea6
Tarea6Tarea6
Tarea6
 
Definici+¦n de antiderivada radhames canigiani
Definici+¦n de antiderivada radhames canigianiDefinici+¦n de antiderivada radhames canigiani
Definici+¦n de antiderivada radhames canigiani
 
Guion controlpor variables
Guion controlpor variablesGuion controlpor variables
Guion controlpor variables
 
Diseño de experiencias
Diseño de experienciasDiseño de experiencias
Diseño de experiencias
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Matlab00
Matlab00Matlab00
Matlab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 
Mat lab00
Mat lab00Mat lab00
Mat lab00
 

Más de Juan Carlos Olivares Rojas

Analítica de Datos usando Single Board Computers
Analítica de Datos usando Single Board ComputersAnalítica de Datos usando Single Board Computers
Analítica de Datos usando Single Board ComputersJuan Carlos Olivares Rojas
 
Analitica de Datos en Dispositivos de Internet de las Cosas
Analitica de Datos en Dispositivos de Internet de las CosasAnalitica de Datos en Dispositivos de Internet de las Cosas
Analitica de Datos en Dispositivos de Internet de las CosasJuan Carlos Olivares Rojas
 
A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...
A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...
A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...Juan Carlos Olivares Rojas
 
Propuesta de Flexibilidad Curricular en el Tecnológico Nacional de México
Propuesta de Flexibilidad Curricular en el Tecnológico Nacional de MéxicoPropuesta de Flexibilidad Curricular en el Tecnológico Nacional de México
Propuesta de Flexibilidad Curricular en el Tecnológico Nacional de MéxicoJuan Carlos Olivares Rojas
 
Analítica de Datos en Simulador de Redes para Sistemas de Medición Inteligente
Analítica de Datos en Simulador de Redes para Sistemas de Medición InteligenteAnalítica de Datos en Simulador de Redes para Sistemas de Medición Inteligente
Analítica de Datos en Simulador de Redes para Sistemas de Medición InteligenteJuan Carlos Olivares Rojas
 
Propuesta de Mercado Eléctrico Minorista Transactivo en México
Propuesta de Mercado Eléctrico Minorista Transactivo en MéxicoPropuesta de Mercado Eléctrico Minorista Transactivo en México
Propuesta de Mercado Eléctrico Minorista Transactivo en MéxicoJuan Carlos Olivares Rojas
 
Cyber Security on Transactions in Smart Metering Systems usign Blockchain
Cyber Security on Transactions in Smart Metering Systems usign BlockchainCyber Security on Transactions in Smart Metering Systems usign Blockchain
Cyber Security on Transactions in Smart Metering Systems usign BlockchainJuan Carlos Olivares Rojas
 
A Survey on Smart Metering Systems using Blockchain for E-mobility
A Survey on Smart Metering Systems using Blockchain for E-mobilityA Survey on Smart Metering Systems using Blockchain for E-mobility
A Survey on Smart Metering Systems using Blockchain for E-mobilityJuan Carlos Olivares Rojas
 
Detección de Movimiento usando Medidores Inteligentes
Detección de Movimiento usando Medidores Inteligentes Detección de Movimiento usando Medidores Inteligentes
Detección de Movimiento usando Medidores Inteligentes Juan Carlos Olivares Rojas
 
A Survey on Smart Metering Systems using Human-Computer Interaction
A Survey on Smart Metering Systems using Human-Computer InteractionA Survey on Smart Metering Systems using Human-Computer Interaction
A Survey on Smart Metering Systems using Human-Computer InteractionJuan Carlos Olivares Rojas
 
Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...
Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...
Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...Juan Carlos Olivares Rojas
 
Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...
Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...
Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...Juan Carlos Olivares Rojas
 
Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...
Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...
Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...Juan Carlos Olivares Rojas
 
Internet de las Cosas en Redes Eléctricas Inteligentes
Internet de las Cosas en Redes Eléctricas InteligentesInternet de las Cosas en Redes Eléctricas Inteligentes
Internet de las Cosas en Redes Eléctricas InteligentesJuan Carlos Olivares Rojas
 
Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...
Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...
Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...Juan Carlos Olivares Rojas
 
Ciber Seguridad en Redes Eléctricas Inteligentes
Ciber Seguridad en Redes Eléctricas InteligentesCiber Seguridad en Redes Eléctricas Inteligentes
Ciber Seguridad en Redes Eléctricas InteligentesJuan Carlos Olivares Rojas
 
Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...
Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...
Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...Juan Carlos Olivares Rojas
 

Más de Juan Carlos Olivares Rojas (20)

Ieee itmsb20
Ieee itmsb20Ieee itmsb20
Ieee itmsb20
 
Ropec20neural stick
Ropec20neural stickRopec20neural stick
Ropec20neural stick
 
Analítica de Datos usando Single Board Computers
Analítica de Datos usando Single Board ComputersAnalítica de Datos usando Single Board Computers
Analítica de Datos usando Single Board Computers
 
Analitica de Datos en Dispositivos de Internet de las Cosas
Analitica de Datos en Dispositivos de Internet de las CosasAnalitica de Datos en Dispositivos de Internet de las Cosas
Analitica de Datos en Dispositivos de Internet de las Cosas
 
A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...
A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...
A Comparative Assessment of Cryptography Algorithms for Data Analytic Applica...
 
Propuesta de Flexibilidad Curricular en el Tecnológico Nacional de México
Propuesta de Flexibilidad Curricular en el Tecnológico Nacional de MéxicoPropuesta de Flexibilidad Curricular en el Tecnológico Nacional de México
Propuesta de Flexibilidad Curricular en el Tecnológico Nacional de México
 
Analítica de Datos en Simulador de Redes para Sistemas de Medición Inteligente
Analítica de Datos en Simulador de Redes para Sistemas de Medición InteligenteAnalítica de Datos en Simulador de Redes para Sistemas de Medición Inteligente
Analítica de Datos en Simulador de Redes para Sistemas de Medición Inteligente
 
Propuesta de Mercado Eléctrico Minorista Transactivo en México
Propuesta de Mercado Eléctrico Minorista Transactivo en MéxicoPropuesta de Mercado Eléctrico Minorista Transactivo en México
Propuesta de Mercado Eléctrico Minorista Transactivo en México
 
Cyber Security on Transactions in Smart Metering Systems usign Blockchain
Cyber Security on Transactions in Smart Metering Systems usign BlockchainCyber Security on Transactions in Smart Metering Systems usign Blockchain
Cyber Security on Transactions in Smart Metering Systems usign Blockchain
 
A Survey on Smart Metering Systems using Blockchain for E-mobility
A Survey on Smart Metering Systems using Blockchain for E-mobilityA Survey on Smart Metering Systems using Blockchain for E-mobility
A Survey on Smart Metering Systems using Blockchain for E-mobility
 
Detección de Movimiento usando Medidores Inteligentes
Detección de Movimiento usando Medidores Inteligentes Detección de Movimiento usando Medidores Inteligentes
Detección de Movimiento usando Medidores Inteligentes
 
A Survey on Smart Metering Systems using Human-Computer Interaction
A Survey on Smart Metering Systems using Human-Computer InteractionA Survey on Smart Metering Systems using Human-Computer Interaction
A Survey on Smart Metering Systems using Human-Computer Interaction
 
Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...
Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...
Machine Learnign Model for the Detection of Electricity Energy Fraud Using an...
 
Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...
Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...
Forecasting Electricity Consumption Using Weather Data in Edge-Fog-Cloud Data...
 
Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...
Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...
Aplicacion de Tecnicas de UX en el Desarrollo de un Portal de un Sistema de M...
 
Internet de las Cosas en Redes Eléctricas Inteligentes
Internet de las Cosas en Redes Eléctricas InteligentesInternet de las Cosas en Redes Eléctricas Inteligentes
Internet de las Cosas en Redes Eléctricas Inteligentes
 
Estrategias didacticas
Estrategias didacticasEstrategias didacticas
Estrategias didacticas
 
Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...
Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...
Optimización de la Eficiencia Energética en los Hogares utilizando una Arquit...
 
Ciber Seguridad en Redes Eléctricas Inteligentes
Ciber Seguridad en Redes Eléctricas InteligentesCiber Seguridad en Redes Eléctricas Inteligentes
Ciber Seguridad en Redes Eléctricas Inteligentes
 
Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...
Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...
Estudio de Vulnerabilidad de Protocolos y Redes de Comunicación para Medidore...
 

Kmean sql

  • 1. Programación del algoritmo de agrupamiento K-means en SQL Juan Carlos Olivares Rojas Ismael Rafael Ponce Medellín Laboratorio de Sistemas Distribuidos Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET) Cuernavaca, Morelos, México {jcolivares04c, rafaxzero04c}@cenidet.edu.mx En este reporte se resume el diseño y la implementación del algoritmo k-means con instrucciones de SQL. La implementación se desarrollo en el manejador Oracle 9i a través de procedimientos almacenados y con SQL dinámico. Para el diseño nos basamos en el modelo propuesto por [1], en cuyo artículo se comentan una serie de pasos sobre como sería posible implementarlo; sin embargo adolece de algunos puntos importantes que no son tan obvios y que son necesarios para poder desarrollarlo. Como en todo algoritmo, primero se detalla la entrada, seguido de la salida que se espera obtener, para finalizar explicando lo que se realiza para obtener el resultado. Entrada El algoritmo recibe como entrada una tabla Y = {y1, y2, … , yn} la cual contiene d dimensiones y n puntos (tuplas) que se desean agrupar en k grupos. Por ejemplo1 se tiene la siguiente tabla: ALIMENTOS (Nombre, Proteína, Vitamina, Grasa, Azucar, Mineral) con los siguientes valores de ejemplo: Nombre Proteína Vitamina Grasa Azúcar Mineral Hamburguesa 10 0 10 0 0 Papas 5 3 15 12 0 Refresco 0 0 0 23 0.5 Helado 0 1 7 33 0 Malteada 4 2 10 37 0 Tabla 1. Tabla alimentos. El algoritmo k-means trabaja con datos numéricos por que se basa en el cálculo de distancias euclidianas entre los puntos para agrupar; por lo que la tabla Y de este ejemplo sería la siguiente: 1 Cabe hacer mención que tanto los datos como los ejemplos mostrados en este reporte, no están basados en hechos reales.
  • 2. D1 d2 d3 d4 d5 n1 10 0 10 0 0 n2 5 3 15 12 0 n3 0 0 0 23 0. 5 n4 0 1 7 33 0 n5 4 2 10 37 0 Tabla 2. Tabla Y de la relación alimentos. Como puede observarse esta tabla, al igual que todas las demás Y es de dimensiones n*d, donde existe una equivalencia entre cada punto n y cada dimensión d. Al tener esta nueva tabla, se pierde el identificador de cada elemento, por lo que se define una nueva relación que contiene como índice una clave primaria con valores autoincrementales. Esta nueva tabla YH quedaría de la siguiente forma: i d1 d2 d3 d4 d5 1 10 0 10 0 0 2 5 3 15 12 0 3 0 0 0 23 0. 5 4 0 1 7 33 0 5 4 2 10 37 0 Tabla 3. Ejemplo de Tabla YH. Salida El algoritmo recibe como salida tres matrices denominadas W, C y R, que representan los pesos, los centroides y las varianzas respectivamente. Las tablas C y R son de dimensiones d*k, por lo que si en nuestro ejemplo se quisiesen realizar agrupaciones de los puntos (elementos) en dos grupos donde se tuvieran los elementos más saludables y los que no, k sería igual a 2. Donde k1 representaría el grupo de alimentos saludables y k2 los que no son tan saludables. Por lo que se tendría una tabla como la siguiente: K1 K2 d1 7 3 d2 1 4 d3 8 12 d4 17 21 d5 0 1 Tabla 4. Ejemplo de tabla C y R. Por ejemplo, si la tabla fuese la relación C, de los valores anteriores, indicarían que en d3k2, el centroide del atributo grasa en el grupo 2 es de 12 unidades. Como puede apreciarse el tamaño de esta tabla depende fundamental del número de dimensiones y del número de grupos, por lo que al ser estos demasiado grandes la
  • 3. información a consultar se dificulta un poco, por lo que la mejor forma de implementarse es la siguiente: l j Valor 1 1 7 1 2 3 2 1 1 2 2 4 3 1 8 3 2 12 4 1 17 4 2 21 5 1 0 5 2 1 Tabla 5. Ejemplo de tabla C y R optimizadas para el algoritmo. Trabajando los valores de forma vertical, permite un mejor acceso a los mismos, facilitando sobre todo su utilización al momento de efectuar cálculos que los involucren, como los necesarios para calcular la medida del error. La tabla W que indica los pesos de cada uno de los clusters, es de dimensión k*1. Por lo que, para nuestro ejemplo estaría dada como sigue: Peso K1 0.4 K2 0.6 Tabla 6. Ejemplo de Tabla W. En este caso, el valor de 0.4 de k1 nos índica que el 40% de los puntos (elementos) de la relación Y caen sobre este grupo. La sumatoria de todos los pesos da como resultado la unidad (100%). De manera complementaría también se dispone de una tabla llamada model que contiene las estadísticas del sistema como son el número de dimensiones tomadas en consideración, el número de grupos, el número de elementos o puntos, el promedio del error y la diferencia del promedio del error. La diferencia del promedio del error consiste en la diferencia del promedio del error calculado anteriormente contra el nuevo error obtenido, debido a la reubicación de los centroides de cada cluster. La tabla model en nuestro ejemplo es la siguiente: d k n I avg_q dif_avg_q 5 2 5 3 0.3 0.2 Tabla 7. Tabla model. En este caso los valores de esta tabla nos indica que la relación analizada tiene 5 dimensiones que se ha decidido agrupar en 2 grupos, donde la cantidad de elementos (puntos) es 5, que hasta el momento se han realizado 3 iteraciones en el algoritmo, el promedio del error es 0.3 y la diferencia del promedio del error es de 0.2.
  • 4. Estos tres últimos valores son muy importantes ya que ayudan a determinar en que momento debe el algoritmo detenerse. El algoritmo se puede terminar cuando se haya realizado un número prefijado de iteraciones o bien, cuando la diferencia del promedio del error tienda a 0 (o que ya no cambie); se puede prefijar un límite para este valor. Por último, se define la relación YNN como la relación que contiene todos los elementos (puntos) de Y representados por su índice o clave primaria respectiva y el valor del grupo al cual fueron asignados. Por ejemplo, si se tiene la siguiente tabla YNN: I J 1 1 2 2 3 1 4 2 5 2 Tabla 8. Ejemplo de tabla YNN. Esta nos índica que el elemento número uno de nuestra relación Y está en el grupo 1. Para nuestro ejemplo, esta tabla nos indica que tanto las hamburguesas como los refrescos (elementos 1 y 3) están el grupo 1 definido como saludable; mientras que en el grupo 2 definido como menos saludable se encuentran los elementos de papas, helado y malteada. Proceso Para el desarrollo del algoritmo se han tomado tres índices que indican la relación entre las tablas y sus elementos. Dichos índices ayudan a relacionar tablas y agilizar en cierta medida los procesos de E/S tal y como se muestra a continuación: Índice Rango Descripción i 1 … n Número de puntos (elemento) j 1 … k Número de grupo l 1 … d Número de dimensión Tabla 9. Nomenclatura de los índices empleados. Se define la operación de transposición T como la lectura de un valor en forma de columna a la lectura en forma de fila. Por ejemplo, si se realizará la transposición o matriz transpuesta de la relación W (ver tabla 4), definida como Wt sería la siguiente: k1 k2 Valor 0. 4 0.6 Tabla 10. La transposición de W definida como Wt. Se define como X1, … Xk a los subconjuntos de Y que pertenecen a cada grupo. Donde se cumple la siguiente propiedad Xj ^ Xj’ = 0 si j < > j’; es decir, ningún elemento de Y
  • 5. se encuentra agrupado en dos o más grupos distintos. Al unir los subconjuntos X1, … , Xk se obtiene Y. La parte medular del algoritmo consiste en el cálculo de la distancia euclidiana entre los puntos (elementos) y un valor de referencia (centroide) para cada grupo. En base a esta distancia se agrupan los elementos en donde se obtenga la distancia más corta de los centroides. La distancia euclidiana se calcula con la siguiente fórmula: d(yi, Cj) = (yi - Cj)T (yi - Cj) = ∑d l=1 (yli – Clj)2 En donde nos dice que la distancia del punto yi con respecto al centroide Cj es igual a la diferencia entre yi y Cj transpuesta por la diferencia de yi y Cj. De modo generalizado, la fórmula se expresa como la sumatoria al cuadrado de las diferencias de los puntos y los centroides en cada dimensión. Para dejar en claro este concepto, se tomará un ejemplo de una relación Y con dos dimensiones, ya que hasta tres dimensiones es posible graficar y que dicha gráfica sea entendida sin problemas. De la relación Y se tomarán las dimensiones d1 y d2 por lo que nuestra tabla de ejemplo será la siguiente: D1 d2 N1 10 0 N2 5 3 N3 0 0 N4 0 1 N5 4 2 Tabla 11. Tabla Y de ejemplo para el cálculo de dimensiones. Si se quisiera calcular la distancia que hay entre el punto 1 (elemento n1) y el centroide 1 (C1) se aplicaría la fórmula: d(y1 – c1) = (y1 – c1)T (y1 – c1) = ∑2 l=1(yl1,cl1) = (y11 – C11)2 + (y21 – C21)2 En esta parte destacan dos puntos fundamentales. El primero de ellos, consiste en que no se han definidos los valores que contendrán los centroides de cada grupo para cada una de las dimensiones. La forma más fácil de implementarla consiste en tomar los valores de manera aleatoria. En este algoritmo así se han determinado los puntos tomando en cuenta muestras (‘samples’) en la tabla Y de un elemento. Otra opción distinta a esta circunstancia, podría ser el considerar los primeros valores de la tabla YH, en caso de que no se contará con una manera de obtenerlos de manera aleatoria, lo importante es establecer los que en primera instancia serán los centroides, los cuales pueden variar según se vaya ejecutando el algoritmo.
  • 6. En este caso se ha tomado en cuenta que se tienen dos grupos, y se han determinado los centroides iniciales como sigue: k1 K2 d1 3 8 d2 2 2 Tabla 12. Tabla C de centroides para el cálculo de distancias. El otro punto consiste en que al obtener los valores del punto (elemento) en la tabla Y se necesita acceder por fila, mientras que en la tabla C y en el resto de las demás tablas se accede por columna, por lo que se necesita cambiar todas las tablas para que se adapte a la forma de Y o cambiar Y. Por razones de rendimiento como se explica en el artículo que se tomo como base, se optó por cambiar Y por lo que para la implementación del algoritmo, se tiene una nueva tabla Y transpuesta denominada YV, la cual tiene en las filas las dimensiones y en las columnas los puntos. Por lo que la nueva tabla YV quedaría de la siguiente forma: n1 n2 n3 n4 n5 D1 10 5 0 0 4 D2 0 3 0 1 2 Tabla 13. Ejemplo de tabla YV. Se puede notar que la tabla YV obtenida de la transposición de Y tendrá muchos atributos (columnas) a medida del número de puntos o elementos contenidos en la tabla Y. Esto es poco práctico para tablas con demasiados puntos, por lo que una mejor implementación de la tabla YV es la siguiente: i l Valor 1 1 10 1 2 0 2 1 5 2 2 3 3 1 0 3 2 0 4 1 0 4 2 1 5 1 4 5 2 2 Tabla 14. Tabla YV optimizada. Siguiendo la fórmula las distancias son las siguientes: d(y1,C1) = (10-3)2 + (0-2) 2 = 49 + 4 = 53 d(y1,C2) = (10-8)2 + (0-2)2 = 4 + 4 = 8 d(y2,C1) = (5-3)2 + (3-2)2 = 4 + 1 = 5 d(y2,C2) = (5-8)2 + (3-2)2 = 9 + 1 = 10 d(y3,C1) = (0-3)2 + (0-2)2 = 9 + 4 = 13 d(y3,C2) = (0-8)2 + (0-2)2 = 64 + 4 = 68 d(y4,C1) = (0-3)2 + (1-2)2 = 9 + 1 = 10 d(y4,C2) = (0-8)2 + (1-2)2 = 64 + 1 = 65
  • 7. d(y5,C1) = (4-3)2 + (2-2)2 = 1 + 0 = 1 d(y5,C2) = (4-8)2 + (2-2)2 = 16 + 0 = 16 Estos valores que se obtienen, se almacenan en la tabla YD que tiene como filas la llave primaria el índice del punto (elemento) el índice del grupo y la distancia en el plano. La tabla YD de nuestro ejemplo es la siguiente: i k Distancia 1 1 53 1 2 8 2 1 5 2 2 10 3 1 13 3 2 68 4 1 10 4 2 65 5 1 1 5 2 16 Tabla 15. Tabla de distancias YD. Con los valores mínimos de la distancia se llena la tabla YNN, la cual en este caso tendría los valores que se muestran a continuación. Estos valores indican en primer instancia a que grupo pertenece cada punto (elemento) de Y. i J 1 2 2 1 3 1 4 1 5 1 Tabla 16. Tabla YNN obtenida de la ejecución del algoritmo. En la figura 1, se muestra como quedan asignados los grupos de los elementos (puntos) con los centroides calculados. En el primer grupo están aquellos elementos que tienen menos proteína y vitaminas, y el grupo dos los que tienen mayor proteína y vitamina. En este análisis se puede observar que aunque se tienen dos dimensiones, la de mayor peso o importancia es la de proteína que determina el grupo, la dimensión vitamina no es tan relevante debido a que los elementos tienen valores semejantes.
  • 8. Gráfica de la relación Y 0 0.5 1 1.5 2 2.5 3 3.5 0 1 2 3 4 5 6 7 8 9 10 11 d1 (Proteína) d2(Vitamina) Elementos Centroides Figura 1. Agrupación de los elementos de la relación Y definida en este ejemplo. Los pasos del algoritmo en general son los siguientes: 1. Configuración.- Consiste en crear y cargar los datos de entrada. 2. Inicialización.- Inicializar los centroides. 3. Paso E.- Computar las k distancias por punto yi. 4. Paso E.- Encontrar el centroide más cercano Cj para cada punto yi. 5. Paso M.- Actualizar los pesos, centroides y varianzas: W, C y R. 6. Paso M.- Actualizar la tabla de seguimiento del progreso de k-means (model). 7. Repetir los pasos 3 a 6 hasta que el algoritmo converja. A través de los ejemplos que se han descrito, se han determinado la mayoría de los pasos del algoritmo, a continuación sólo se describirán aquellos pasos omitidos y aquellos que necesitan de mayor explicación. Para el cálculo de los centroides iniciales es necesario disponer una tabla temporal que almacene los centroides iniciales, a dicha tabla se ha denominado CH (de CHorizontal) por que se obtiene de YH al sacar una muestra aleatoria (un punto) para cada grupo por lo que siguiendo el ejemplo definido anteriormente, CH quedaría de la siguiente forma: k d1 d2 1 5 3 2 0 1 Tabla 17. Ejemplo de tabla CH. Los valores de esta tabla se obtuvieron al azar al tomar como muestra el punto 2 y 4. De aquí se obtiene la tabla C con su transposición por lo que se obtendría la tabla C como sigue: k1 k2 d1 5 0 d2 3 1 Tabla 18. Tabla C obtenida de CH.
  • 9. El cálculo de la distancia euclideana tiene una complejidad de O(dkn) lo que un procedimiento altamente costoso en tiempo de CPU para valores demasiados grande, sobre todo de n. Este se calcula realizando una sumatoria de los campos valor de la tabla YV y C reunidas por medio de su índice de dimensiones. Para encontrar el centroide más cercano para un punto determinado se necesitan dos pasos. Primero, calcular la distancia mínima de todos los puntos para cada grupo, dichas distancias se calculan en la tabla YD; segundo, la distancia mínima se obtiene a partir de estar almacenando el índice del punto y su grupo en la tabla YNN. Para actualizar los valores en el paso M, se necesita actualizar la tabla de pesos, centroides y varianza; W, C y R respectivamente. La tabla de pesos se actualiza siempre con la cuenta de todos los puntos que estén sobre un grupo determinado en la tabla YNN. Posteriormente se divide el valor obtenido por el total de puntos (elementos) disponibles en la tabla model. La tabla de centroides se actualiza con el promedio de todos los valores de los puntos que se encuentran en el mismo grupo en una dimensión en especial. La tabla R de varianzas se obtiene al sacar el promedio de la diferencia del valor del punto y el nuevo valor calculado para el centroide para todas las dimensiones del grupo en el que está el elemento (punto). Para finalizar, en cada iteración se debe actualizar la tabla modelo. Se incrementa el número de iteraciones en uno por cada vez que se ejecuten los pasos E y M del algoritmo, y el valor del promedio de la diferencia del error, el cual se obtiene de la sumatoria de multiplicar el valor de la varianza de cada grupo por su peso correspondiente. La tabla modelo puede utilizarse para determinar el momento en el que se debe detener la ejecución del algoritmo, ya sea tomando en cuenta el numero de iteraciones efectuadas, o considerando la diferencia entre el promedio de la diferencia de error de la iteración anterior con respecto a la última. Algoritmo optimizado Se ha realizado algunas mejoras para aumentar la velocidad de ejecución del algoritmo y disminuir la carga de trabajo ocasionada por las consultas necesarias. Para aumentar la velocidad de procesamiento al realizar los cálculos de las estadísticas se implementaron tres nuevas tablas denominadas N, M y Q. N es de dimensiones k*1; mientras que M y Q son d*k y son análogas a W, C y R en dimensiones. Nj almacena el número de puntos que están contenidos en un grupo en particular (Nj = |Xj|). Mj almacena la sumatoria de dichos puntos (Mj = ∑yi Є Xj yi) y Qj representa la sumatoria de los cuadrados de los puntos que se encuentran en el grupo j (Qj = ∑ yiЄXj yi T yi ). A través de estas nuevas matrices el cálculo de W, C y R se simplifica considerablemente. Wj = Nj / ∑k j=1 Wj; Cj = Mj / Nj, Rj = Qj /Nj – Cj T Cj.
  • 10. Se puede observar que tener varias tablas por separadas no es óptimo, debido a esto se remplazó dichas tablas por una sola, en este caso NMQ (l, j, N, M, Q) y también WCR (l, j, W, C, R). Lo importante de juntar N, M y Q en la misma tabla, es que con una misma instrucción se pueden actualizar todos sus valores. Mientras que en WCR se asigna primeramente a W un valor de cero, después, dependiendo del grupo k del que se trate, W guardará la cantidad de elementos que coincidan en ese grupo, asignándole el valor de N correspondiente; se debe inicializar con cero al principio, en el supuesto de que un grupo quede vacío, ya que después se debe dividir tal valor entre la cantidad de elementos total, y si no se efectuará así, se generarían errores o inconsistencias. Todas las demás operaciones del algoritmo estándar se dejan igual. Código SQL para Oracle 9i El código que se muestra a continuación corresponde con las instrucciones SQL que se siguen para desarrollar el algoritmo k-means; se toma como ejemplo una tabla Y con 3 campos; además, se van a crear dos grupos. El primer paso consiste en preparar las tablas que se van a utilizar. /* inicialización */ DROP TABLE YH; CREATE TABLE YH AS ( SELECT sum(1) over(order by 1 rows unbounded preceding) AS i ,y ,y2 ,y3 FROM Y ); DROP TABLE model; CREATE TABLE model( d INT,k INT,n float,iteration INT,avg_q real,dif_avg_q real); INSERT INTO model SELECT 3,2,count(*),0,0.0,0.0 FROM YH; De tabla modelo se almacenan la cantidad de campos y grupos que se van a considerar, la cantidad de elementos que se van a agrupar, el primer cero indica el numero de iteraciones efectuadas y los siguientes valores representan el promedio del error y la diferencia del promedio del error, respectivamente. DROP TABLE YV; CREATE TABLE YV ( i int,l INT,val REAL); INSERT INTO YV SELECT i,1,y1 FROM YH; ... INSERT INTO YV SELECT i,3,y3 FROM YH; DROP TABLE W;
  • 11. CREATE TABLE W (j int,w float); DROP TABLE C; CREATE TABLE C(l int,j int,val real); DROP TABLE R; CREATE TABLE R(l int,j int,val real); DROP TABLE YD; CREATE TABLE YD (i int,j int,distance real); En este primer paso, en CH se toman como “muestras” los centroides iniciales los primeros dos elementos de YH. Estos centroides irán cambiando, según vaya ejecutándose el algoritmo. DROP TABLE CH; CREATE TABLE CH(j INT,y1 REAL,y2 REAL,y3 REAL); INSERT INTO CH SELECT 1,y1,y2,y3 FROM YH where i='1'; INSERT INTO CH SELECT 2,y1,y2,y3 FROM YH where i='2'; INSERT INTO C SELECT 1,1,y1 FROM CH WHERE j=1 ... UNION SELECT 3,1,y3 FROM CH WHERE j=1; INSERT INTO C SELECT 1,2,y1 FROM CH WHERE j=2 ... UNION SELECT 3,2,y3 FROM CH WHERE j=2; Ahora se calculan las distancias mínimas y se encuentran los centroides más cercanos. /* paso E*/ DELETE FROM YD; INSERT INTO YD SELECT i,j,sum( power((YV.val - C.val),2)) FROM YV,C WHERE YV.l=C.l GROUP BY i,j; DROP TABLE YNN; CREATE TABLE YNN AS( SELECT YD.i,YD.j FROM YD,( SELECT i,min(distance) AS mindistance FROM YD GROUP BY i)YMIND WHERE YD.i=YMIND.i and YD.distance=YMIND.mindistance); Por último, se actualizan las tablas W, C y R, así como model, donde se van registrando los cambios. /* Paso M*/ DELETE FROM W; INSERT INTO W SELECT j,count(*) FROM YNN GROUP BY j; UPDATE W SET w=w/(select n from model);
  • 12. DELETE FROM C; INSERT INTO C SELECT l,j,avg(YV.val) FROM YV,YNN WHERE YV.i=YNN.i GROUP BY l,j; DELETE FROM R; INSERT INTO R SELECT C.l,C.j,avg( power((YV.val-C.val),2) ) FROM C,YV,YNN WHERE YV.i=YNN.i and YV.l=C.l and YNN.j=C.j GROUP BY C.l,C.j; UPDATE model set dif_avg_q=abs((SELECT sum(W*R.val) FROM R,W WHERE R.j=W.j)-avg_q); UPDATE model SET avg_q=(SELECT sum(W*R.val) FROM R,W WHERE R.j=W.j),iteration=iteration+1; Los pasos E y M deben ejecutarse hasta alcanzar el número de iteraciones u obtener una diferencia de error deseada. Estos valores son observables en la tabla model. Para la versión optimizada, el código es muy semejante, variando un poco el cálculo de los pasos E y M. Los cambios se muestran a continuación. Dentro del paso de inicialización, en vez de crear las tablas W, C y R se crea una sola, WCR. Además, la inicialización que se hacia en C, ahora se efectúa en WCR DROP TABLE WCR; CREATE TABLE WCR (l int,j int,W real,C real,R real); INSERT INTO WCR SELECT 1,1,0,y1,1 FROM CH WHERE j=1 ... UNION SELECT 3,1,0,y3,1 FROM CH WHERE j=1; INSERT INTO WCR SELECT 1,2,0,y1,1 FROM CH WHERE j=2 ... UNION SELECT 3,2,0,y3,1 FROM CH WHERE j=2; El paso E ahora de calcula de esta manera. En esta ocasión, los cálculos estadísticos se llevan sobre NMQ. /* E step */ DELETE FROM YD; INSERT INTO YD SELECT YV.i,WCR.j,sum( power((YV.val-WCR.C),2) ) FROM YV,WCR WHERE YV.l=WCR.l GROUP BY YV.i,WCR.j; DROP TABLE YNN; CREATE TABLE YNN AS (SELECT YD.i,YD.j FROM YD,(SELECT i,min(distance) AS mindistance FROM YD GROUP BY i)YMIND WHERE YD.i=YMIND.i and YD.distance=YMIND.mindistance);
  • 13. DELETE FROM NMQ; INSERT INTO NMQ SELECT l,j,sum(1.0) AS N,sum(YV.val) AS M,sum(YV.val*YV.val) AS Q FROM YV,YNN WHERE YV.i=YNN.i GROUP BY l,j; El paso M ahora utiliza a NMQ para actualizar a WCR. W se debe actualizar por cada grupo que se desea formar. UPDATE WCR SET W=(select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND NMQ.j=WCR.j)AND NMQ.j=1 group by N) WHERE WCR.j=1; ... UPDATE WCR SET C=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND NMQ.j=WCR.j)AND NMQ.j=1 group by N)>0 THEN (select M/N from NMQ WHERE NMQ.l=1 AND NMQ.j=1) ELSE C END R=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND NMQ.j=WCR.j)AND NMQ.j=1 group by N)>0 THEN (select Q/N - power((M/N),2) from NMQ WHERE NMQ.l=1 AND NMQ.j=1) ELSE R END WHERE WCR.l=1 AND WCR.j=1; ... UPDATE WCR SET C=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND NMQ.j=WCR.j)AND NMQ.j=2 group by N)>0 THEN (select M/N from NMQ WHERE NMQ.l=3 AND NMQ.j=2) ELSE C END R=CASE WHEN (select N from NMQ, WCR WHERE (NMQ.l=WCR.l AND NMQ.j=WCR.j)AND NMQ.j=2 group by N)>0 THEN (select Q/N - power((M/N),2) from NMQ WHERE NMQ.l=3 AND NMQ.j=2) ELSE R END WHERE WCR.l=3 AND WCR.j=2; UPDATE WCR SET W=W/(select n from model); UPDATE model set dif_avg_q=abs((SELECT sum(W*R) FROM WCR)-avg_q); UPDATE model SET avg_q=(SELECT sum(W*R) FROM WCR),iteration=iteration+1; De igual manera, los pasos E y M se repiten hasta que el algoritmo converja. Referencias [1] Carlos Ordonez, “Programming the K-means Clustering Algorithm in SQL”. Publicado en KDD’04, del 22 al 25 de agosto de 2004, Seattle, Washington, USA.