Skip to content

Commit 16bfa82

Browse files
authored
Final challenges
1 parent ad9810e commit 16bfa82

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

MachineLearning.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#Importando as bibliotecas responsáveis pelo Machine Learning
2+
from sklearn.linear_model import LogisticRegression
3+
from sklearn.model_selection import train_test_split
4+
from sklearn.dummy import DummyClassifier
5+
from sklearn.metrics import accuracy_score
6+
from sklearn.tree import DecisionTreeClassifier
7+
from sklearn.ensemble import RandomForestClassifier
8+
9+
#Selecionando do nosso conjunto de dados tudo o que for float
10+
x = merge_dados.select_dtypes('float64')
11+
#Selecionando o nosso target, o resultado de acordo com os nossos dados
12+
y = merge_dados['ativo_moa']
13+
14+
#Pega os dados que são treinados, usando 20%
15+
x_treino, x_teste, y_treino, y_teste = train_test_split(x, y, test_size=0.2, stratify=y)
16+
17+
#Treinando nossa máquina de acordo com os nossos dados, usando Regressão Logística
18+
modelo_rlog = LogisticRegression(max_iter=1000)
19+
modelo_rlog.fit(x_treino, y_treino)
20+
modelo_rlog.score(x_teste, y_teste)
21+
22+
#Modelo para avaliar a frequência que ocorreu os valores, usando um método mais simples
23+
modelo_dummy = DummyClassifier('most_frequent')
24+
modelo_dummy.fit(x_treino, y_treino)
25+
previsao_dummy = modelo_dummy.predict(x_teste)
26+
accuracy_score(y_teste, previsao_dummy)
27+
28+
#Árvore de Decisão, com um certo tamanho de nós
29+
teste=[]
30+
treino=[]
31+
for i in range(1, 15):
32+
modelo_arv = DecisionTreeClassifier(max_depth=i)
33+
modelo_arv.fit(x_treino, y_treino)
34+
teste.append(modelo_arv.score(x_teste, y_teste))
35+
treino.append(modelo_arv.score(x_treino, y_treino))
36+
37+
#Plotando um gráfico para exemplificar o resultado
38+
sns.lineplot(x=range(1, 15), y=teste, label='teste')
39+
sns.lineplot(x=range(1, 15), y=treino, label='treino')
40+
41+
x = merge_dados.drop(['id', 'n_moa', 'ativo_moa', 'droga'], axis=1)
42+
x = pd.get_dummies(x, columns=['tratamento', 'tempo', 'dose'])
43+
y = merge_dados['ativo_moa']
44+
x_treino, x_teste, y_treino, y_teste = train_test_split(x, y, test_size=0.2, stratify=y, random_state=376)
45+
modelo_ranForest = RandomForestClassifier()
46+
modelo_ranForest.fit(x_treino, y_treino)
47+
modelo_ranForest.score(x_teste, y_teste)
48+
49+
#Desafio 01 - Utilizando o método dos vizinhos
50+
from sklearn.neighbors import KNeighborsClassifier
51+
52+
num_neigh = 3
53+
54+
neigh_fun = KNeighborsClassifier(num_neigh)
55+
neigh_fun.fit(x_treino, y_treino)
56+
neigh_fun.score(x_teste, y_teste)
57+
58+
#Desafio 04 - Testando outros problemas
59+
x = merge_dados.loc[:, 'g-0':'c-99']
60+
y = merge_dados['tempo'].map({24:0, 48:1, 72:2})
61+
62+
x_treino, x_teste, y_treino, y_teste = train_test_split(x, y, test_size = 0.2, stratify=y, random_state=376)
63+
64+
modelo_rlog2 = LogisticRegression(solver='newton-cg')
65+
modelo_rlog2.fit(x_treino, y_treino)
66+
modelo_rlog2.score(x_teste, y_teste)
67+
68+
#Desafio 05 - Testes com a droga mais utilizada
69+
merge_dados['droga'].value_counts() #Para achar os compostos que mais aparecem
70+
71+
#As duas drogas possuem um valor muito parecido, por isso é mais fácil de
72+
#chegar num resultado favorável
73+
dt_temp = merge_dados.query('droga in ["8b87a7a83", "5628cb3ee"]')
74+
75+
x = dt_temp.loc[:, 'g-0':'g-12']
76+
y = dt_temp['droga'].map({'8b87a7a83':0, '5628cb3ee':1})
77+
sns.countplot(x=y)
78+
y.value_counts(normalize=True) #Porcentagem muito parecida
79+
80+
x_treino, x_teste, y_treino, y_teste = train_test_split(x, y, test_size = 0.2, stratify=y,random_state=376)
81+
82+
#Aqui modificamos o x. Se colocamos mais colunas de g e c o algoritmo consegue
83+
#100% de taxa de acerto. A diferença da ativação entre as duas drogas é muito
84+
#grande e fácil do algoritmo identificar.
85+
modelo_rlog3 = LogisticRegression()
86+
modelo_rlog3.fit(x_treino, y_treino)
87+
modelo_rlog3.score(x_teste, y_teste)

0 commit comments

Comments
 (0)