else: vector = np.row_stack([vector, np.array(vectoraux)]) targets = np.append(targets, np.array(targetsaux), axis=0) primero = False if len(vector) == 0 or len(targets) == 0: print 'error en la carga de archivos' print sys.exit() elif not len(vector) == len(targets): print 'no coinciden el vector de parametros y targets' logger.info('---------ARCHIVOS ENTRENADOS--------') logger.info(str(nombres_archivo)) logger.info('------RESULTADOS CLASIFICACION %s -----' % time.asctime()) nvector, ntargets = features.undersampling(vector, targets) # Selector balanceado de indices de pruebas train -test indices = StratifiedShuffleSplit(ntargets, 3, test_size=0.3) ####################################################################################################################### ######## BUCLE DE CLASIFICADORES A ENTRENAR - TESTEAR CON SUS RESULTADOS ############################################# def benchmark(clf): print 'en benchmark' logger.info('_' * 80) logger.info("Entrenamiento: ") logger.info(clf) t0 = time.time()
def entrenador(ruta_orig, ruta_dest, param, model, sample_weight): """ :param ruta_orig: Carpeta con los vectores y archivos de verdad :param ruta_dest: Carpeta donde almacenar el modelo :param param: Diccionario con la distribucion de parametro :param model: Nombre de libreria y modelo formato libreria.modulo.modelo :param sample_weight: Pesos previos para ponderar muestras del vector :return: """ ###carpeta con los archivos npy y txt, con los mismos nombres cada par vectorpath = ruta_orig + '/*.npy' #args.ruta_orig targetpath = ruta_orig + '/*.txt' targets=[] vector=[] nombres_archivo=[] primero=True for targetname, filename in izip(glob.glob(targetpath), glob.glob(vectorpath)): targetsaux = [] try: vectoraux = np.load(filename) except: parser.error('Nombre de ruta inexistente o con formato erroneo. Pruebe a poner solo / en vez de \\') print sys.exit() print '\n Recuperando vector ', filename, targetname nombres_archivo.append(os.path.split(filename)[1]) tamvector = len(vectoraux) targetfile = open(targetname, 'r') lineas = targetfile.readlines() for linea in lineas: for i in linea: if i.isdigit(): targetsaux.append(int(i)) targetsaux = np.array(targetsaux) tamtargets = len(targetsaux) if tamtargets != tamvector: print 'no coinciden datosanuncios y targets', tamtargets, tamvector if tamvector < tamtargets: targetsaux=targetsaux[:-(tamtargets-tamvector)] else: targetsaux=np.append(targetsaux, np.array([targetsaux[-1]]*(tamvector-tamtargets))) if primero: vector=np.array(vectoraux) targets=np.array(targetsaux) else: vector=np.row_stack([vector,np.array(vectoraux)]) targets=np.append(targets,np.array(targetsaux), axis=0) primero = False if len(vector)==0 or len(targets)==0: print 'error en la carga de archivos' print sys.exit() elif not len(vector)==len(targets): print 'no coinciden el vector de parametros y targets' nombre_clasreport='entrenamiento'+'_' + time.asctime()[4:-5].replace(' ','').replace(':','') + '.log' logging.basicConfig(filename='C:\Users\Mario\Desktop\InfoAdex09062015\entrenamiento/' + nombre_clasreport, level=logging.INFO) logger = logging.getLogger(__name__) logger.info('------ENTRENANDO CLASIFICADOR %s -----' %time.asctime()) logger.info('---------ARCHIVOS ENTRENADOS--------') logger.info(str(nombres_archivo)) logger.info('---------NUMERO DE PARAMETROS--------') logger.info(str(np.shape(vector)[1])) libreria, modelo=model.rsplit('.',1) try: clf=getattr(importlib.import_module(libreria),modelo)() except: print ' error de recuperacion de clasificador' sys.exit() ### set up de parametros if param: dp={} for parametro in param: valor_dp=parametro.split('=')[1] if valor_dp.isdigit(): valor_dp=int(valor_dp) elif '.' in valor_dp and not valor_dp=='SAMME.R': valor_dp=float(valor_dp) elif valor_dp=='None': valor_dp=None elif valor_dp=='False': valor_dp=False elif valor_dp=='True': valor_dp=True dp[parametro.split('=')[0]]=valor_dp clf.set_params(**dp) nvector,ntargets=features.undersampling(vector,targets) logger.info('_' * 80) logger.info("Modelo: ") logger.info(clf) t0 = time.time() if sample_weight: sw=np.array(sample_weight) print sample_weight clf.fit(vector, targets,sample_weight=sw) else: clf.fit(vector, targets) train_time = time.time() - t0 logger.info("tiempo de entrenamiento: %0.3fs" % train_time) #ALMACENAMOS EL MODELO clf_descr = str(clf).split('(')[0] storage.dump_model(clf, clf_descr + '_'+ time.asctime()[4:-11].replace(' ','') + '.pkl',ruta=ruta_dest) return ruta_dest + clf_descr + '_' + time.asctime()[4:-11].replace(' ', '') + '.pkl'
def entrenador(ruta_orig, ruta_dest, param, model, sample_weight): """ :param ruta_orig: Carpeta con los vectores y archivos de verdad :param ruta_dest: Carpeta donde almacenar el modelo :param param: Diccionario con la distribucion de parametro :param model: Nombre de libreria y modelo formato libreria.modulo.modelo :param sample_weight: Pesos previos para ponderar muestras del vector :return: """ # carpeta con los archivos npy y txt, con los mismos nombres cada par vectorpath = ruta_orig + '/*.npy' # args.ruta_orig targetpath = ruta_orig + '/*.txt' targets = [] vector = [] nombres_archivo = [] primero = True for targetname, filename in izip(glob.glob(targetpath), glob.glob(vectorpath)): targetsaux = [] try: vectoraux = np.load(filename) except: parser.error( 'Nombre de ruta inexistente o con formato erroneo. Pruebe a poner solo / en vez de \\' ) print sys.exit() print 'Recuperando vector ', filename, targetname nombres_archivo.append(os.path.split(filename)[1]) tamvector = len(vectoraux) targetfile = open(targetname, 'r') lineas = targetfile.readlines() for linea in lineas: for i in linea: if i.isdigit(): targetsaux.append(int(i)) targetsaux = np.array(targetsaux) tamtargets = len(targetsaux) if tamtargets != tamvector: print 'no coinciden datosanuncios y targets', tamtargets, tamvector if tamvector < tamtargets: targetsaux = targetsaux[:-(tamtargets - tamvector)] else: targetsaux = np.append( targetsaux, np.array([targetsaux[-1]] * (tamvector - tamtargets))) if primero: vector = np.array(vectoraux) targets = np.array(targetsaux) else: vector = np.row_stack([vector, np.array(vectoraux)]) targets = np.append(targets, np.array(targetsaux), axis=0) primero = False if len(vector) == 0 or len(targets) == 0: print 'error en la carga de archivos' print sys.exit() elif not len(vector) == len(targets): print 'no coinciden el vector de parametros y targets' nombre_clasreport = 'entrenamiento' + '_' + time.asctime()[4:-5].replace( ' ', '').replace(':', '') + '.log' logging.basicConfig( filename='C:\Users\Mario\Desktop\InfoAdex09062015\entrenamiento/' + nombre_clasreport, level=logging.INFO) logger = logging.getLogger(__name__) logger.info('------ENTRENANDO CLASIFICADOR %s -----' % time.asctime()) logger.info('---------ARCHIVOS ENTRENADOS--------') logger.info(str(nombres_archivo)) logger.info('---------NUMERO DE PARAMETROS--------') logger.info(str(np.shape(vector)[1])) libreria, modelo = model.rsplit('.', 1) try: clf = getattr(importlib.import_module(libreria), modelo)() except: print ' error de recuperacion de clasificador' sys.exit() # set up de parametros if param: dp = {} for parametro in param: valor_dp = parametro.split('=')[1] if valor_dp.isdigit(): valor_dp = int(valor_dp) elif '.' in valor_dp and not valor_dp == 'SAMME.R': valor_dp = float(valor_dp) elif valor_dp == 'None': valor_dp = None elif valor_dp == 'False': valor_dp = False elif valor_dp == 'True': valor_dp = True dp[parametro.split('=')[0]] = valor_dp clf.set_params(**dp) nvector, ntargets = features.undersampling(vector, targets) logger.info('_' * 80) logger.info("Modelo: ") logger.info(clf) t0 = time.time() if sample_weight: sw = np.array(sample_weight) print sample_weight clf.fit(vector, targets, sample_weight=sw) else: clf.fit(vector, targets) train_time = time.time() - t0 logger.info("tiempo de entrenamiento: %0.3fs" % train_time) # ALMACENAMOS EL MODELO clf_descr = str(clf).split('(')[0] storage.dump_model(clf, clf_descr + '_' + time.asctime()[4:-11].replace(' ', '') + '.pkl', ruta=ruta_dest) return ruta_dest + clf_descr + '_' + time.asctime()[4:-11].replace( ' ', '') + '.pkl'
pruebas.append((config_ada3,model_ada3)) ''' #10 modelos a Optimizar pruebas.append((config_svc,model_svc)) pruebas.append((config_logisticregression,model_logisticregression)) pruebas.append((config_ridge,model_ridge)) #pruebas.append((config_treereg,model_treereg)) #pruebas.append((config_nearest,model_nearest)) #pruebas.append((config_linearsvc,model_linearsvc)) #pruebas.append((config_knn,model_knn)) #pruebas.append((config_tree,model_tree)) #pruebas.append((config_naive,model_naive)) ''' nvector,ntargets=features.undersampling(vector,targets) ###Selector balanceado de indices de pruebas train -test indices=StratifiedShuffleSplit(ntargets,3,test_size=0.3) for train_index, test_index in indices: X_train, X_test = vector[train_index], vector[test_index] y_train, y_test = targets[train_index], targets[test_index] print len(ntargets) print len(y_train) print len(y_test) best=0 ranking=[]