Add algorithm executions and results
129
docs/Summary.org
|
@ -75,6 +75,8 @@ def parse_data(source, action):
|
|||
return test_data, target_data
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
|
||||
|
||||
A continuación, mostraremos cada uno de los pasos que realizamos para obtener el /dataset/ final:
|
||||
|
||||
|
@ -203,3 +205,130 @@ Datos objetivo:
|
|||
4 1
|
||||
Name: Severity, dtype: int64
|
||||
#+end_example
|
||||
** Configuración de algoritmos
|
||||
|
||||
Elegimos 5 algoritmos distintos:
|
||||
|
||||
1. Naive Bayes
|
||||
2. Linear Support Vector Classification
|
||||
3. K Nearest Neighbors
|
||||
4. Árbol de decisión
|
||||
5. Perceptrón multicapa (red neuronal)
|
||||
|
||||
Procedemos a evaluar el rendimiento de cada algoritmo, usando las siguientes métricas:
|
||||
|
||||
- Accuracy score
|
||||
- Matriz de confusión
|
||||
- Cross validation score
|
||||
- Area under the curve (AUC)
|
||||
|
||||
Vamos a realizar 2 ejecuciones por algoritmo, para evaluar las diferencias que obtenemos según el preprocesado utilizado (eliminación de valores nulos o imputación).
|
||||
|
||||
La implementación se encuentra en el archivo /processing.py/, cuyo contenido mostramos a continuación:
|
||||
|
||||
#+begin_src python
|
||||
from numpy import mean
|
||||
from sklearn.metrics import confusion_matrix, accuracy_score, roc_auc_score
|
||||
from sklearn.model_selection import cross_val_score
|
||||
from sklearn.naive_bayes import GaussianNB
|
||||
from sklearn.neural_network import MLPClassifier
|
||||
from sklearn.neighbors import KNeighborsClassifier
|
||||
from sklearn.preprocessing import scale
|
||||
from sklearn.svm import LinearSVC
|
||||
from sklearn.tree import DecisionTreeClassifier
|
||||
|
||||
from sys import argv
|
||||
|
||||
from preprocessing import parse_data, split_k_sets
|
||||
|
||||
|
||||
def choose_model(model):
|
||||
if model == "gnb":
|
||||
return GaussianNB()
|
||||
elif model == "svc":
|
||||
return LinearSVC(random_state=42)
|
||||
elif model == "knn":
|
||||
return KNeighborsClassifier(n_neighbors=10)
|
||||
elif model == "tree":
|
||||
return DecisionTreeClassifier(random_state=42)
|
||||
elif model == "neuralnet":
|
||||
return MLPClassifier(hidden_layer_sizes=10)
|
||||
else:
|
||||
print("Unknown model selected. The choices are: ")
|
||||
print("gnb: Gaussian Naive Bayes")
|
||||
print("svc: Linear Support Vector Classification")
|
||||
print("knn: K-neighbors")
|
||||
print("tree: Decision tree")
|
||||
print("neuralnet: MLP Classifier")
|
||||
exit()
|
||||
|
||||
|
||||
def predict_data(data, target, model):
|
||||
model = choose_model(model)
|
||||
if model == "knn":
|
||||
data = scale(data)
|
||||
accuracy_scores = []
|
||||
confusion_matrices = []
|
||||
auc = []
|
||||
for train_index, test_index in split_k_sets(data):
|
||||
model.fit(data.iloc[train_index], target.iloc[train_index])
|
||||
prediction = model.predict(data.iloc[test_index])
|
||||
accuracy_scores.append(accuracy_score(target.iloc[test_index], prediction))
|
||||
confusion_matrices.append(confusion_matrix(target.iloc[test_index], prediction))
|
||||
auc.append(roc_auc_score(target.iloc[test_index], prediction))
|
||||
cv_score = cross_val_score(model, data, target, cv=10)
|
||||
evaluate_performance(
|
||||
confusion_matrix=mean(confusion_matrices, axis=0),
|
||||
accuracy=mean(accuracy_scores),
|
||||
cv_score=mean(cv_score),
|
||||
auc=mean(auc),
|
||||
)
|
||||
|
||||
|
||||
def evaluate_performance(confusion_matrix, accuracy, cv_score, auc):
|
||||
print("Accuracy Score: " + str(accuracy))
|
||||
print("Confusion matrix: ")
|
||||
print(str(confusion_matrix))
|
||||
print("Cross validation score: " + str(cv_score))
|
||||
print("AUC: " + str(auc))
|
||||
#+end_src
|
||||
|
||||
** Resultados obtenidos
|
||||
*** Naives Bayes
|
||||
|
||||
Los resultados que obtenemos son los siguientes:
|
||||
|
||||
#+CAPTION: Naive Bayes
|
||||
[[./assets/gnb.png]]
|
||||
*** Linear SVC
|
||||
|
||||
Los resultados que obtenemos son los siguientes:
|
||||
|
||||
#+CAPTION: Linear SVC con eliminación
|
||||
[[./assets/svc_drop.png]]
|
||||
|
||||
#+CAPTION: Linear SVC con imputación
|
||||
[[./assets/svc_fill.png]]
|
||||
*** KNN
|
||||
Antes de ejecutar este algoritmo, normalizamos los datos dado que el /KNN/ es un algoritmo basado en distancia.
|
||||
|
||||
Los resultados que obtenemos son los siguientes:
|
||||
|
||||
#+CAPTION: KNN
|
||||
[[./assets/knn.png]]
|
||||
*** Árbol de decisión
|
||||
|
||||
Los resultados que obtenemos son los siguientes:
|
||||
|
||||
#+CAPTION: Árbol de decisión
|
||||
[[./assets/tree.png]]
|
||||
*** Perceptrón multicapa
|
||||
|
||||
Los resultados que obtenemos son los siguientes:
|
||||
|
||||
#+CAPTION: Perceptrón multicapa con eliminación
|
||||
[[./assets/neuralnet_drop.png]]
|
||||
|
||||
#+CAPTION: Perceptrón multicapa con imputación
|
||||
[[./assets/neuralnet_fill.png]]
|
||||
** Análisis de resultados
|
||||
|
|
BIN
docs/Summary.pdf
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 47 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 48 KiB |