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()
Beispiel #2
0
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'
Beispiel #3
0
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=[]