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
def clasificacion_knn(H_lista_prueba, H_entrenamiento): H_lista_prueba = aux.hacer_matriz_lista(V_prueba) H_lista_entrenamiento = aux.hacer_matriz_lista(V_entrenamiento) return H_lista_prueba, H_lista_entrenamiento def clasificacion_nmfknn(H_prueba, H_entrenamiento): H_lista_prueba = aux.hacer_matriz_lista(H_prueba) H_lista_entrenamiento = aux.hacer_matriz_lista(H_entrenamiento) return H_lista_prueba, H_lista_entrenamiento #leemos el documento que contiene la matriz try: V_entrenamiento = np.loadtxt('matriz_entrenamiento.txt') except IOError: #crear desde cero la matriz V creacion.crearMatriz('entrenamiento') V_entrenamiento = np.loadtxt('matriz_entrenamiento.txt') 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')