Wednesday, April 9, 2014

Conclusiones y trabajo a futuro.

Evidencia de la semana:

  • El avance en código o análisis.
  • El avance de ésta semana en redacción de tesis consiste en redactar una versión preliminar del capítulo de conclusiones.

Tesis

El avance principal de esta semana fue redactar una versión preliminar del capítulo de conclusiones, en el que se resume toda la tesis, se habla de las contribuciones que realicé en dicho trabajo y al final una discusión de los resultados experimentales; para esta semana también se trabajó en lo siguiente:
  • Se corrigieron errores de ortografía y redacción.
  • Se corrigieron algunas citas en la bibliografía.
  • Se agregaron notas en color rojo en algunos capitulos para indicar lo que hace falta agregar.
  • Se corrigió capítulo de antecendentes.
  • Se agregaron notas de pie de página.

Código

El avance en esta semana consistió en avanzar el diseño y sobre todo la parte de jquery de la herramienta, se agregaron funciones para obtener los materiales de manera dinámica, se decidió utilizar una navegación vertical y se comenzó a trabajar con las funciones para llenar las tablas mediante llamadas ajax.

Otra parte del avance se concentró en desarrollar la parte de análisis de agrupamiento o segmentación (clustering) en la parte de minería de datos, este avance aún no se ha terminado en cuanto a código. El avance en un principio se iba a realizar en la clasificación de patrones pero continuando con la lectura en minería de datos entendí que después de establecer relaciones y reglas en los datos, lo siguiente es el agrupamiento; con lo cual se obtienen grupos y estructuras en los datos que de cierta manera son similares.

El análisis de agrupamiento consiste en agrupar un conjunto de datos de tal manera que los objetos en el mismo grupo (cluster) son más similares entre sí que a las de otros grupos. El agrupamiento depende del tipo de segmentación que se quiera realizar. Dentro de las técnicas de clustering los algoritmos más usados podrían ser:
  • K-means
  • Kohonen
  • Redes Bayesianas
Para mi análisis de datos escogí el algoritmo K-means, el cual es un algoritmo que busca similitudes y diferencias entre los individuos pertenecientes a un dataset, la búsqueda la realiza de acuerdo a la distancia que hay entre uno y otro (generalmente se usa la distancia euclidiana). El objetivo de este algoritmo es encontrar los individuos mas parecidos entre si (de cierto modo los podemos llamar cercanos) y a la vez separarlos de aquellos diferentes a los mismos. Es decir el algoritmo a agrupa individuos que se parecen mucho y los separa de los otros grupos que a su vez se parecen mucho entre si pero son distintos de los otros grupos.

Este es el avance que tengo al momento.
import numpy as np

def converged(minimum, centroids):
    return ( set( [ tuple(a) for a in minimum ] ) == set( [ tuple(a) for a in centroids ] ) )


def cluster_points(X, minimum):
    clusters  = {}
    for x in X:
        best_key = min( [ ( i[0], np.linalg.norm( x - minimum[ i[0] ] ) ) \
                    for i in enumerate( minimum ) ], key=lambda t:t[1] )[0]
        try:
            clusters[best_key].append(x)
        except KeyError:
            clusters[best_key] = [x]
    return clusters

 
def reevaluate_centers(minimum, clusters):
    new_minimum = []
    keys = sorted(clusters.keys())
    for k in keys:
        new_minimum.append(np.mean(clusters[k], axis = 0))
    return new_minimum

 
def find_centers(X, K):
    centroids = random.sample(X, K)
    minimum = random.sample(X, K)
    while not converged(minimum, centroids):
        centroids = minimum
        
        clusters = cluster_points(X, minimum)

        minimum = reevaluate_centers(centroids, clusters)
    return(minimum, clusters)

Avances siguiente entrega


  • Terminar el diseño de experimentos en la redacción y la solución propuesta.
  • Terminar implementación de algoritmo K-means.
  • Avance en código de clasificación por categorías de los datos.


No comments :

Post a Comment