El siguiente script hace un ensamble de dos algoritmos: Random Forest y Regresion Logistica. Esto para predecir la variable survived del data set titanic.
El Scrip sigue estos pasos:
1. Carga csv desde dropbox
2. Divide el data set en train (70%) y test (30%)
3. Convierte los set de train y test en matriz numpy, solo por performance.
4. Crea una lista_algoritmos a utilizar, para luego crear los modelos y predecir a través de un loop.
5. Hace el promedio de las dos predicciones, y luego clasifica como verdadero los valores mayor a 0.5, de lo contrario, clasifica como falso.
6. Imprime las metricas de eficiencia de la prediccion del modelo ensamblado.
script:
import numpy as np import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression from sklearn import metrics from datetime import datetime start_time = datetime.now() # CARGAR DATASET DE DROPBOX #------------------------------------------------------------------------------------------ data = pd.read_csv('https://dl.dropboxusercontent.com/u/59930995/dataset/titanic2.csv?dl=1') clase_name = 'survived' # nombre de variable a predecir headers = data.columns.values.tolist() headers.remove(clase_name) # TRAIN y TEST #------------------------------------------------------------------------------------------ np.random.seed(444) m_train = np.random.rand(len(data)) < 0.70 data_train = data.loc[m_train,headers].as_matrix() data_test = data.loc[~m_train,headers].as_matrix() clase_train = data.loc[m_train,clase_name].as_matrix() clase_test = data.loc[~m_train,clase_name].as_matrix() # CONVIERTE EN NUMPY.MATRIX. Para mejor performance # -------------------------------------------------------------------------------------------- data_train = np.matrix(data_train) data_test = np.matrix(data_test) # MODELO #------------------------------------------------------------------------------------------ modelo_rf = RandomForestClassifier( random_state = 1, # semilla inicial de aleatoriedad del algoritmo n_estimators = 100, # cantidad de arboles a crear min_samples_split = 5, # cantidad minima de observaciones para dividir un nodo min_samples_leaf = 2, # observaciones minimas que puede tener una hoja del arbol n_jobs = 1 # tareas en paralelo. para todos los cores disponibles usar -1 ) modelo_lr = LogisticRegression(random_state=1) algoritmos = [modelo_rf, modelo_lr] all_predict = [] for alg in algoritmos: alg.fit(data_train, clase_train) predictions = alg.predict_proba(data_test.astype(float))[:,1] all_predict.append(predictions) # ENSAMBLE DE PREDICCION #------------------------------------------------------------------------------------------ predic_ens = (all_predict[0] + all_predict[1])/2 predic_ens[predic_ens > .5] = 1 predic_ens[predic_ens <= .5] = 0 predic_ens = predic_ens.astype(int) # METRICAS #------------------------------------------------------------------------------------------ print(pd.crosstab(clase_test, predic_ens, rownames=['REAL'], colnames=['PREDICCION'])) print(metrics.classification_report(y_true=clase_test, y_pred=predic_ens)) # END #------------------------------------------------------------------------------------------ end_time = datetime.now() print('duracion: ' + format(end_time - start_time))
No hay comentarios:
Publicar un comentario