Exemple #1
0
def prueba5():
    print(
        'Prueba 5: División del dataset en conjunto de entrenamiento y pruebas'
    )

    try:
        print('\n--- Lectura del dataset preprocesado')
        df = pd.read_csv('../dataset/ticnn_preprocessed.csv')
    except:
        print('Se ha producido un error al leer el dataset')
        raise

    print('Dataset leído correctamente, mostrando las tres primeras entradas')
    print(df.head(3))

    try:
        print('\n--- División de los datos en entrenamiento y pruebas')
        print('70% entrenamiento - 30% pruebas')

        texts = list(df['text'])
        targets = list(df['type'])

        x_train, y_train, x_test, y_test = model_creation.train_test_split(
            texts, targets)
        print('Datos separados correctamente')

    except:
        print('Error al separar en entrenamiento y pruebas')
        raise

    try:
        print('\n--- Comprobamos que el tamaño de los conjuntos es correcto')

        assert len(x_train) == int(len(df) * 0.7)
        assert len(x_train) == len(y_train)
        print('El tamaño del conjunto de entrenamiento es el correcto')

        assert len(x_test) == int(math.ceil(len(df) * 0.3))
        assert len(x_test) == len(y_test)
        print('El tamaño del conjunto de pruebas es el correcto')

    except:
        print('El tamaño de los conjuntos no es el adecuado')
        raise

    print(
        '\n-------------------------------------------------------------------'
    )
    print(
        'División en conjunto de entrenamiento y pruebas realizada correctamente'
    )
    print(
        '\n-------------------- Prueba 5 finalizada con éxito --------------------\n'
    )
Exemple #2
0
def prueba11():
    print('Prueba 11: Grid Search con un subset de los hiperparámetros')

    try:
        print('\n--- Lectura del dataset preprocesado')
        df = pd.read_csv('../dataset/ticnn_preprocessed.csv')
    except:
        print('Se ha producido un error al leer el dataset')
        raise

    print('Dataset Leído correctamente')

    try:
        print('\n--- División de los datos en entrenamiento y pruebas')
        # Alteración del orden
        df = df.sample(frac=1.)
        # Transformamos la columna text a lista de string
        from ast import literal_eval
        df['text'] = df['text'].apply(literal_eval)

        # Aplicamos la función convert_to_string a los textos
        df['text'] = df['text'].apply(model_creation.convert_to_string)

        # Convertimos los textos y las targets variables a listas
        texts = list(df['text'])
        targets = list(df['type'])

        # División en conjunto de entrenamiento y test
        x_train, y_train, x_test, y_test = model_creation.train_test_split(
            texts, targets)

    except:
        print('Error al separar en entrenamiento y pruebas')
        raise

    print('Datos separados correctamente')

    try:
        print('\n--- Creación del diccionario (Vocabulario)')
        tokenizer = tf_tokenizer(num_words=20000,
                                 oov_token='<null_token>',
                                 lower=False,
                                 char_level=False)
        tokenizer.fit_on_texts(x_train)

    except:
        print('Error al crear el vocabulario')
        raise

    print('Vocabulario creado correctamente')

    try:
        print('\n--- Transformar los textos en secuencias y padding')
        x_train_sequence = tokenizer.texts_to_sequences(x_train)
        x_test_sequence = tokenizer.texts_to_sequences(x_test)

        train_padded = pad_sequences(x_train_sequence,
                                     maxlen=600,
                                     dtype='int32',
                                     truncating='post',
                                     padding='post')
        test_padded = pad_sequences(x_test_sequence,
                                    maxlen=600,
                                    dtype='int32',
                                    truncating='post',
                                    padding='post')

    except:
        print('Error al convertir los textos en secuencias')
        raise

    print('Secuenciación y padding realizados con éxito')

    try:
        print('\n--- Definición de los hiperparámetros a optimizar')
        HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.2, 0.4))
        METRIC_F1 = 'f1-score'

        with tf.summary.create_file_writer(
                'logs/hparam_tuning(test11)').as_default():
            hp.hparams_config(
                hparams=[HP_DROPOUT],
                metrics=[hp.Metric(METRIC_F1, display_name='F1-Score')])
    except:
        print('Error al definir los hiperparámetros')
        raise
    print('Hiperparámetros definidos correctamente')

    try:
        print('\n--- Ejecución Grid Search')
        session_num = 0

        for dropout_rate in (HP_DROPOUT.domain.min_value,
                             HP_DROPOUT.domain.max_value):
            hparams = {HP_DROPOUT: dropout_rate}

            run_name = 'run-%d' % session_num
            print('--Iniciando ejecución : %s' % run_name)
            print({h: hparams[h] for h in hparams})
            hparams_optimization.run('logs/hparam_tuning(test11)/' + run_name,
                                     hparams, train_padded, test_padded,
                                     y_train, y_test)
            session_num += 1
    except:
        print('Error al realizar Grid Search')
        raise

    print(
        '\n-------------------------------------------------------------------'
    )
    print('Grid Search realizado con éxito')
    print('La variante seleccionada es Distributed Memory') if dm_value == 1
    else print('La variante seleccionada es Distributed Bag of Words')
]

# Alteracion aleatoria del orden de las entradas
df = df.sample(frac=1)

# Convertimos la columna text a lista de strings
df['text'] = df['text'].apply(literal_eval)

# Convertimos las variables a listas
texts = list(df['text'])
targets = list(df['type'])

# Dividimos en conjunto de entrenamiento y pruebas
x_train, y_train, x_test, y_test = model_creation.train_test_split(
    texts, targets)

# Generamos los TaggedDocuments
train_documents = []
test_documents = []

for i in range(len(x_train)):
    train_documents.append(TaggedDocument(words=x_train[i], tags=[y_train[i]]))

for i in range(len(x_test)):
    test_documents.append(TaggedDocument(words=x_test[i], tags=[y_test[i]]))

# Creamos el modelo Doc2Vec
print('Creando el modelo Doc2Vec')
d2v_model = Doc2Vec(dm=dm_value,
                    vector_size=n_dimensions,