Re: OT Detectar similitud de datos

From: "Miguel Beltran R(dot)" <yourpadre(at)gmail(dot)com>
To:
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: OT Detectar similitud de datos
Date: 2013-11-21 23:00:44
Message-ID: CAEc04cpZJ0+QxXznDTjOPWn0O=dZ17WXTEFj51qj7MzkNH2Esg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Raul -> los datos son númericos, eso creo que no me sirve.

Eduardo -> Voy a revisar a detalle lo que mencionas.
Aunque mis datos son mas bien, que lo unico que tendría que hacer es
adaptar la formula (usando una variable prima "p")
V1 (a1,b1,c1,d1,a2,b2,c2,d2)
V2 (a1p,b1p,c1p,d1p,a2p,b2p,c2p,d2p)
....
V1000 (a1+1.0,b1+0.3,c1+0.01,d1+0.05,a2-2,b2+0.5,c2-0.09,d2+0.2)

Es este ejemplo V1 con V2 tienen datos diferentes pero V1 y V1000 tienen
datos similares, que hubiera hacer podido ser V299 y V1000.

Voy a tener que hacer entonces una comparación de N elementros contra N-1

Gracias por su ayuda

El 21 de noviembre de 2013 12:11, Eduardo A. Bustamante López<
dualbus(at)gmail(dot)com> escribió:

> On Thu, Nov 21, 2013 at 10:24:00AM -0600, Miguel Beltran R. wrote:
> > Hola lista,
> >
> > En mi trabajo me pidieron que hiciera un sistema que detectara similitud
> en
> > unos datos para revisar que no nos esten engañando. Se supone que con un
> > analizador se toman lecturas de diferentes vehiculos pero en ocasiones
> > ciertas personas usan un mismo vehiculo para ser analizado en lugar del
> que
> > se capturo, es decir en lugar los datos de V1, V2 y V3 tengo realmente
> los
> > datos V1, V1 y V1. Los datos nunca son iguales pero si son similares.
> Saludos,
>
> Por lo que veo entonces, tienes dos vectores de datos:
>
> V1 = (a1, b1, c1, d1)
> V2 = (a2, b2, c2, d2)
>
> y quieres comparar qué tan similares son.
>
> Algo simple que puedes hacer es tomar esos dos vectores como puntos
> en un espacio de 4 dimensiones, y calcular la distancia ordinaria
> entre esos dos puntos,
>
> de tal forma que:
>
> distancia(V1, V2) = raiz((a1 - a2)^2 + (b1 - b2)^2 + (c1 - c2)^2 + (d1 -
> d2)^2)
>
> donde «raiz» denota la función raíz cuadrada, y «^2» denota la
> potencia cuadrática.
>
> Mira, aquí se explica el asunto con un poco más de detalle:
>
> http://es.wikipedia.org/wiki/Distancia_euclidiana
>
>
> >
> > La estructura de los datos es basicamente así:
> >
> > campo - valor - descripcion
> > ID - 1 - quien genera los datos (unos 600 analizadores)
> > año - 2007 - año del vehiculo que se supone se esta midiendo. Mayor año,
> > menor el valor de a1.
> > modelo - UNO - identificador del vehiculo
> > a1 - 11.0 - dato1
> > b1 - 0.03 - dato2
> > c1 - 14.9 - dato3
> > d1 - 0.30 - dato4
> > a2 - 13.0 - dato1 medido en otras condiciones
> > b2 - 0.04 - dato2 medido en otras condiciones
> > c2 - 14.8 - dato3 medido en otras condiciones
> > d2 - 0.30 - dato4 medido en otras condiciones
> Por el momento no tengo una estructura de datos similar para
> mostrarte cómo lo haría con Postgres, pero una simple línea de
> comandos con la calculadora «bc» muestra su funcionamiento:
>
> [dualbus(at)x ~]$ bc -l <<< 'a1 = 11.0; b1 = 0.03; c1 = 14.9; d1 =
> 0.3; a2 = 13.0; b2 = 0.04; c2 = 14.8; d2 = 0.3; sqrt((a1 - a2)^2 +
> (b1 - b2)^2 + (c1 - c2)^2 + (d1 - d2)^2)'
> 2.00252340810288657159
>
> [dualbus(at)x ~]$ bc -l <<< 'a1 = 10.0; b1 = 0.035; c1 = 13.8; d1
> = 0.36; a2 = 13.0; b2 = 0.04; c2 = 14.8; d2 = 0.3; sqrt((a1 - a2)^2 +
> (b1 - b2)^2 + (c1 - c2)^2 + (d1 - d2)^2)'
> 3.16285077106081626779
>
> Si te fijas, solo son asignaciones de variable, y al final aplico la
> fórmula para la distancia. En el primer caso, son los puntos que tú
> usaste de ejemplo, y en el segundo caso los modifiqué para hacerlos
> «más diferentes». En el primer caso dió una distancia de 2 (menos
> diferentes), y en el segundo caso una distancia de 3.16.
>
> Puedes experimentar con diferentes distancias, para ver cuál es la
> suficiente para detectar esas mediciones duplicadas. Incluso, puedes
> asignar pesos a las variables para que un cambio en una variable
> importante tenga más efecto sobre la distancia.
>
> Algo así:
>
> V1 = (a, b)
> V2 = (x, y)
>
> distancia_peso(V1, V2) = raiz(((a - x)/20)^2 + (b - y)^2)
>
> Si notas, ahora la primera dimensión («a» y «x») es menos sensible al
> cambio, por lo que detectará como similares valores que antes no
> detectaba.
>
> --
> Eduardo Alan Bustamante López
>

--
________________________________________
Lo bueno de vivir un dia mas
es saber que nos queda un dia menos de vida

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2013-11-21 23:04:57 Re: Una de Transacciones
Previous Message jvenegasperu . 2013-11-21 21:06:43 acceso a FOR con tablas como parametros