Anuncios

Bienvenidos sean a este post, hoy veremos otro concepto para ML.

Anuncios
Anuncios

En el post anterior hablamos sobre red neuronal artificial, pero mencionamos otra posibilidad como es el clustering. Este consiste en agrupar un conjunto de objetos para distribuir grupos de objetos similares. Tambien se lo denomina como analisis de cluster. Este es un conjunto de tecnicas y algoritmos intentando agrupar objetos similares y creando los clusters. Si repasamos un poco lo visto en posts anteriores, veremos que primero debemos resolver los problemas con la base de conocimiento que tienes hasta ese momento. Es decir, debemos lograr categorizar los objetos por similitud.

Anuncios

Para entenderlo, vamos a suponer que tenemos objetos de distintas formas como son triangulos, circulos y cuadrados. Nuestro primer objetivo es obtener una idea basica de como se ve el objeto. Los objetos van a tener unas propiedades basicas como son la forma, el color, el alto y el ancho; puede tener mas pero estas seran mas que suficientes para identificarlas. Veamos como es la representacion basica de un objeto:

struct Objeto
{
	int color;
	int forma;
	int ancho;
	int alto;
};
Anuncios

Vamos a suponer que los valores a color y forma son fijos y estan predefinidos, inclusive podriamos usar enumeration para facilitar la lectura. Esto mejora el analisis de objetos para categorizarlas de alguna manera, y lo primero que debemos hacer es crear una funcion que acepta una lista de objetos. Veamos un ejemplo:

using lista_objetos = std::vector<Objeto>;
using tabla_categorizada = std::unordered_map<int, lista_objetos>;
tabla_categorizada clusterizar(const lista_objetos& objetos)
{
  // codigo para categorizarlos.
}
Anuncios

Se crearon dos alias para el vector de los objetos que sera la lista y el otro sera una lista donde cada objeto de la lista tendra un identificador. En la funcion manejaremos estos dos tipos y sera para devolver una lista categorizada. Pasemos a pensar en los puntos que necesitamos para agruparlos. y para ello podemos usar el color y la forma. Con esto comentado, tomemos a la funcion y agreguemos el siguiente codigo:

tabla_categorizada clusterizar(const lista_objetos& objetos)
{
	categorized_table resultado;
	for (const auto& obj : objetos) {
		resultado[obj.color].push_back(obj);
		resultado[obj.forma].push_back(obj);
	}
	return resultado;
}
Anuncios

En este caso, todos los objetos de color y forma similares se agruparan en una tabla hash. Si bien este puede ser un codigo muy simple, nos dara una idea basica de como agrupar los objetos por algun criterio de similitud. Lo que se hizo en este ejemplo se denomina como hard clustering, un objeto pertenece al cluster o no. Por el otro lado, soft clustering describe a un objeto si pertenece a un cluster hasta un cierto grado.

Anuncios

Tomemos como ejemplo la similitud de objetos para la propiedad de la forma, esta podria ser definida por el resultado de una funcion aplicada a los objetos. Es decir, la funcion define si el objeto A y el objeto B tienen una forma similar. Por ejemplo, si la forma del objeto A es un cuadrado y el objeto B es un rombo, nos lleva a que modifiquemos la funcion anterior para comparar objeto con varios valores y definir su forma como un grupo. A medida que vayamos desarrollando esta idea, nos derivara mas tarde o temprano en diferentes algoritmos y estrategias de clustering, tal como K-means clustering.

Anuncios

En resumen, hoy hemos visto clustering, que es, para que sirve, como se utilizan, y algunas particularidades mas sobre todo esto. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50