This repository has been archived by the owner on Nov 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomparacao_algoritmos.py
122 lines (102 loc) · 3.73 KB
/
comparacao_algoritmos.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 17 15:52:53 2019
@author: thales
"""
# Compare Algorithms
import pandas as pd
import matplotlib.pyplot as plt
#from sklearn import model_selection
from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.preprocessing import normalize
from sklearn.cross_validation import KFold
# load dataset
'''
https://machinelearningmastery.com/compare-machine-learning-algorithms-python-scikit-learn/
'''
def validacao_cruzada(X, y):
kf = KFold(len(y), n_folds=2)
for train, test in kf:
X_train, X_test, y_train, y_test = X[train], X[test], y[train], y[test]
return X_train, X_test, y_train, y_test
def treino_predicao_arquitetura(modelos, x1, x2, y1, y2):
for nome, arq in modelos:
arq.fit(x1, y1)
score_treino = arq.score(x1, y1)
y_pred = arq.predict(x2)
score_previsao = accuracy_score(y2, y_pred)
print('%s apresentou:\nEscore de treino de %f \nEscore de previsão de %f'
%(nome, score_treino, score_previsao))
print("Matriz de confusão:")
print(confusion_matrix(y2, y_pred))
'''
Lendo o arquivo, transformando as classes em valores númericos e em matriz, logo em seguida.
'''
dados = pd.read_csv('./testes_outros_algoritmos.csv')
dados.loc[dados['estilo_de_aprendizagem']=='Indefinido','estilo_de_aprendizagem'] = 0
dados.loc[dados['estilo_de_aprendizagem']=='Ativo', 'estilo_de_aprendizagem'] = 1
dados.loc[dados['estilo_de_aprendizagem']=='Teorico', 'estilo_de_aprendizagem'] = 2
dados.loc[dados['estilo_de_aprendizagem']=='Reflexivo', 'estilo_de_aprendizagem'] = 3
dados.loc[dados['estilo_de_aprendizagem']=='Pragmatico','estilo_de_aprendizagem'] = 4
array = dados.values
X = array[:, :14]
y = array[:, 14:15]
y = y.ravel()
'''
Modelos criados
'''
mlp = MLPClassifier(
verbose=0, random_state=1, max_iter=200,
hidden_layer_sizes=(100, 250), solver='adam', learning_rate_init=0.01
)
svc = SVC()
gsnb = GaussianNB()
dtc = DecisionTreeClassifier()
kNbC = KNeighborsClassifier()
lgrCV = LogisticRegressionCV()
lgr = LogisticRegression()
modelos = []
modelos.append(('MLP', mlp))
modelos.append(('SVM', svc))
modelos.append(('Gaussian', gsnb))
modelos.append(('DTClass', dtc))
modelos.append(('KNN', kNbC))
modelos.append(('LRCV', lgrCV))
modelos.append(('LR', lgr))
'''
Chamo a função que usa a validação cruzada para melhor escolher os dados de treinamento
'''
'''
Ver uma função que trate os dados antes de fazer a validação cruzada.
'''
X_train, X_test, y_train, y_test = validacao_cruzada(X, y)
treino_predicao_arquitetura(modelos, X_train, X_test, y_train, y_test)
# evaluate each model in turn
#resultados = []
#nomes_modelos = []
##metrica = 'accuracy'
#for nome, modelo in modelos:
## kfold = model_selection.KFold(n_splits=10, random_state=7)
## resultados_cv = model_selection.cross_val_score(modelo, X, Y, cv=kfold, scoring=metrica)
## resultados.append(resultados_cv)
# nomes_modelos.append(nome)
# msg = "%s: %f (%f)" % (nome, resultados_cv.mean(), resultados_cv.std())
# y_pred = predict(X_test)
# score = accuracy_score(y_real, y_pred)
# msg = "%s: %f (%f)\n" % (nome, score)
# print(msg)
# print(matrix_confusion(y_real, y_pred))
# boxplot algorithm comparison
#fig = plt.figure()
#fig.suptitle('Algoritmos Multiclasses Sklearn')
#ax = fig.add_subplot(111)
#plt.boxplot(resultados)
#ax.set_xticklabels(nomes_modelos)
#plt.show()