Example #1
0
def main(alpha):
    #factorizamos la matriz de entrenamiento
    nmf = nimfa.Nmf(V_entrenamiento, max_iter=2000, rank=alpha, update='euclidean', objective='fro')
    nmf_fit = nmf()

    #extraemos la matriz de bases y caractreristicas
    W_entrenamiento = np.matrix(nmf_fit.basis())
    H_entrenamiento = np.matrix(nmf_fit.coef())
    print 'se factorizo la primer matriz' 

    #Obtenemos la matriz V de prueda
    try:
        V_prueba = np.loadtxt('matriz_prueba.txt')
    except IOError:
        #crear desde cero la matriz V
        creacion.crearMatriz('prueba')
        V_prueba = np.loadtxt('matriz_prueba.txt')

    #sacando la matriz de caractreristicas para el conjunto a clasificar
    print 'Obteniendo la segunda matriz de caracteristicas del conjunto a clasificar...'
    a = time.time()
    H_prueba = np.matrix(np.linalg.inv(W_entrenamiento.transpose()*W_entrenamiento)*(W_entrenamiento.transpose()*V_prueba))
    b = time.time()
    print 'se obtiene la otra matriz de caracteristicas en ', b-a

    H_lista_prueba, H_lista_entrenamiento = clasificacion_nmfknn(H_prueba, H_entrenamiento)
    categorias = ['biologia', 'computo','matematicas','medicina', 'derecho','geologia','quimica','astronomia']

    pasO = [[i for j in range(15)] for i in categorias]
    etiquetas_entrenamiento = []
    for i in range(len(categorias)):
        etiquetas_entrenamiento.extend(pasO[i])
        
    pasO = [[i for j in range(3)] for i in categorias]
    etiquetas_comparar = []
    for i in range(len(categorias)):
        etiquetas_comparar.extend(pasO[i])
        
    numeroClasificar = 24
    print 'Comenzando a etiquetar...'
    a = time.time()
    etiquetas_euclidianas = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='euc')
    etiquetas_manhattan = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='man')
    etiquetas_minkowski = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='min')
    etiquetas_maxdist = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='max')
    b = time.time()
    promedio_e = aux.sacar_mal(etiquetas_euclidianas, etiquetas_comparar) * 100.0 / numeroClasificar
    promedio_man = aux.sacar_mal(etiquetas_manhattan, etiquetas_comparar) * 100.0 / numeroClasificar
    promedio_min = aux.sacar_mal(etiquetas_minkowski, etiquetas_comparar) * 100.0 / numeroClasificar
    promedio_max = aux.sacar_mal(etiquetas_maxdist, etiquetas_comparar) * 100.0 / numeroClasificar

    print 'con distancia euclidiana hubo un %.3f%s de aciertos' % (promedio_e,'%')
    print 'con distancia manhattan hubo un %.3f%s de aciertos' % (promedio_man,'%')
    print 'con distancia minkowski hubo un %.3f%s de aciertos' % (promedio_min,'%')
    print 'con distancia maxDist hubo un %.3f%s de aciertos' % (promedio_max,'%')
    print b-a
Example #2
0
def clasificacion():
    '''clasifica imagenes basado en nmf'''
    
    #cargamos las imagenes y las etiquetas de las imagenes
    print 'Cargando las imagenes...'
    a = time.time()
    imagenes_entrenamiento, labels_entrenamiento = load_mnist('training', digits=range(10))
    imagenes_prueba, labels_prueba = load_mnist('testing', digits=range(10))
    b = time.time()
    print 'Se cargaron las imagenes en ', b-a
    
    numeroEntrenar = 10000
    numeroClasificar = 100
    
    #Generamos nuestras matrices V de entrenamiento y V de pruebas unando los numeros definidos arriba
    print 'Generando matrices V...'
    a = time.time()
    V_entrenamiento = aux.generar_v(imagenes_entrenamiento,numeroEntrenar)
    V_prueba = aux.generar_v(imagenes_prueba, numeroClasificar)
    b = time.time()
    print 'Se generaron las matrices V en ', b-a
    
    #Generamos las listas con los labels correctos
    etiquetas_entrenamiento = [labels_entrenamiento[i][0] for i in range(numeroEntrenar)]
    etiquetas_comparar = [labels_prueba[i][0] for i in range(numeroClasificar)]
    
    #factorizamos la matriz de entrenamiento
    print 'Comenzando a factorizar la matriz de entrenamiento...'
    a = time.time()
    nmf = nimfa.Nmf(V_entrenamiento, max_iter=500, rank=20, update='euclidean', objective='fro')
    nmf_fit = nmf()
    b = time.time()
    print 'se factorizo la matriz de entrenamiento en ', b-a
    
    #extraemos la matriz de bases y caractreristicas
    W_entrenamiento = np.matrix(nmf_fit.basis())
    H_entrenamiento = np.matrix(nmf_fit.coef())
    
    #sacando la matriz de caractreristicas para el conjunto a clasificar
    print 'Obteniendo la segunda matriz de caracteristicas del conjunto a clasificar...'
    a = time.time()
    H_prueba = np.matrix(np.linalg.inv(W_entrenamiento.transpose()*W_entrenamiento)*(W_entrenamiento.transpose()*V_prueba))
    b = time.time()
    print 'se obtiene la otra matriz de caracteristicas en ', b-a
    
    H_lista_prueba = aux.hacer_matriz_lista(H_prueba)
    H_lista_entrenamiento = aux.hacer_matriz_lista(H_entrenamiento)
    
    print 'Comenzando a etiquetar...'
    etiquetas_euclidianas = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='euc')
    etiquetas_manhattan = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='man')
    etiquetas_minkowski = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='min')
    etiquetas_maxdist = aux.comparar(H_lista_prueba , H_lista_entrenamiento, etiquetas_entrenamiento, compa='max')
    
    promedio_e = aux.sacar_mal(etiquetas_euclidianas, etiquetas_comparar) * 100.0 / numeroClasificar
    promedio_man = aux.sacar_mal(etiquetas_manhattan, etiquetas_comparar) * 100.0 / numeroClasificar
    promedio_min = aux.sacar_mal(etiquetas_minkowski, etiquetas_comparar) * 100.0 / numeroClasificar
    promedio_max = aux.sacar_mal(etiquetas_maxdist, etiquetas_comparar) * 100.0 / numeroClasificar
    
    print 'con distancia euclidiana hubo un %.3f%s de aciertos' % (promedio_e,'%')
    print 'con distancia manhattan hubo un %.3f%s de aciertos' % (promedio_man,'%')
    print 'con distancia minkowski hubo un %.3f%s de aciertos' % (promedio_min,'%')
    print 'con distancia maxDist hubo un %.3f%s de aciertos' % (promedio_max,'%')