domingo, 8 de setembro de 2019

Python - Machine learn - Seleção de Atributos

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.svm import SVC
from sklearn.ensemble import ExtraTreesClassifier

credito = pd.read_csv('Credit.csv')
previsores = credito.iloc[:,0:20].values
classe = credito.iloc[:,20].values

labelencoder = LabelEncoder()
previsores[:,0] = labelencoder.fit_transform(previsores[:,0])
previsores[:,2] = labelencoder.fit_transform(previsores[:,2])
previsores[:,3] = labelencoder.fit_transform(previsores[:,3])
previsores[:,5] = labelencoder.fit_transform(previsores[:,5])
previsores[:,6] = labelencoder.fit_transform(previsores[:,6])
previsores[:,8] = labelencoder.fit_transform(previsores[:,8])
previsores[:,9] = labelencoder.fit_transform(previsores[:,9])
previsores[:,11] = labelencoder.fit_transform(previsores[:,11])
previsores[:,13] = labelencoder.fit_transform(previsores[:,13])
previsores[:,14] = labelencoder.fit_transform(previsores[:,14])
previsores[:,16] = labelencoder.fit_transform(previsores[:,16])
previsores[:,18] = labelencoder.fit_transform(previsores[:,18])
previsores[:,19] = labelencoder.fit_transform(previsores[:,19])

x_treinamento, X_teste, y_treinamento, y_teste = train_test_split(previsores,
classe,
test_size = 0.3,  random_state = 0)
svm = SVC()
svm.fit(x_treinamento, y_treinamento)
previsoes = svm.predict(X_teste)
taxa_acerto = accuracy_score(y_teste, previsoes)

forest = ExtraTreesClassifier()
forest.fit(x_treinamento, y_treinamento)
importancias = forest.feature_importances_
#selecionar os 4 atributos com importancia mais altos (escolha aleatoria)
x_treinamento2 = x_treinamento[:,[0,1,2,3]]
x_teste2 = X_teste[:,[0,1,2,3]]

svm2 = SVC()
svm2.fit(x_treinamento2, y_treinamento)
previsoes2 = svm2.predict(x_teste2)
taxa_acerto = accuracy_score(y_teste, previsoes2)

Python - Machine Learn com arvore de decisão

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.tree import DecisionTreeClassifier
import graphviz
from sklearn.tree import export_graphviz

credito = pd.read_csv('Credit.csv')
previsores = credito.iloc[:,0:20].values
classe = credito.iloc[:,20].values

labelencoder = LabelEncoder()
previsores[:,0] = labelencoder.fit_transform(previsores[:,0])
previsores[:,2] = labelencoder.fit_transform(previsores[:,2])
previsores[:,3] = labelencoder.fit_transform(previsores[:,3])
previsores[:,5] = labelencoder.fit_transform(previsores[:,5])
previsores[:,6] = labelencoder.fit_transform(previsores[:,6])
previsores[:,8] = labelencoder.fit_transform(previsores[:,8])
previsores[:,9] = labelencoder.fit_transform(previsores[:,9])
previsores[:,11] = labelencoder.fit_transform(previsores[:,11])
previsores[:,13] = labelencoder.fit_transform(previsores[:,13])
previsores[:,14] = labelencoder.fit_transform(previsores[:,14])
previsores[:,16] = labelencoder.fit_transform(previsores[:,16])
previsores[:,18] = labelencoder.fit_transform(previsores[:,18])
previsores[:,19] = labelencoder.fit_transform(previsores[:,19])
x_treinamento, X_teste, y_treinamento, y_teste = train_test_split(previsores,
classe,
test_size = 0.3,
random_state = 0)
arvore = DecisionTreeClassifier()
arvore.fit(x_treinamento, y_treinamento)
#erro é normal

#pip install graphviz

export_graphviz(arvore, out_file = 'tree.dot')
#copiar o codigo e colar no site webgraphviz
previsoes = arvore.predict(X_teste)
confusao = confusion_matrix(y_teste, previsoes)
taxa_acerto = accuracy_score (y_teste, previsoes)
taxa_erro = 1 - taxa_acerto

Machine Learn Naive Bayes em Python



import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
#GaussianNB não trabaçja com categoricos
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix, accuracy_score

credito = pd.read_csv('Credit.csv')
previsores = credito.iloc[:,0:20].values #: todas linha da lionha 0 a linha 20
classe = credito.iloc[:,20].values
#Gaussina NB não trabalha com dados categoricos então converter Ecoder
labelencoder = LabelEncoder()
previsores[:,0] = labelencoder.fit_transform(previsores[:,0])#precisar fazer individualmente para cada atributo
previsores[:,2] = labelencoder.fit_transform(previsores[:,2])
previsores[:,3] = labelencoder.fit_transform(previsores[:,3])
previsores[:,5] = labelencoder.fit_transform(previsores[:,5])
previsores[:,6] = labelencoder.fit_transform(previsores[:,6])
previsores[:,8] = labelencoder.fit_transform(previsores[:,8])
previsores[:,9] = labelencoder.fit_transform(previsores[:,9])
previsores[:,11] = labelencoder.fit_transform(previsores[:,11])
previsores[:,13] = labelencoder.fit_transform(previsores[:,13])
previsores[:,14] = labelencoder.fit_transform(previsores[:,14])
previsores[:,16] = labelencoder.fit_transform(previsores[:,16])
previsores[:,18] = labelencoder.fit_transform(previsores[:,18])
previsores[:,19] = labelencoder.fit_transform(previsores[:,19])

x_treinamento, X_teste, y_treinamento, y_teste = train_test_split(previsores,
                                                                  classe,
                                                                  test_size = 0.3, #705 para treinar
                                                                  random_state = 0) #dividir da mesma maneira
naive_bayes = GaussianNB()
naive_bayes.fit(x_treinamento, y_treinamento)
#o erro é normal, inidca que já foi criado

previsoes = naive_bayes.predict(X_teste)
#matriz de confusão
confusao = confusion_matrix(y_teste, previsoes)
taxa_acerto = accuracy_score(y_teste,previsoes)
taxa_erro =1- taxa_acerto

from yellowbrick.classifier import ConfusionMatrix
v = ConfusionMatrix(GaussianNB())
v.fit(x_treinamento, y_treinamento)
v.score(X_teste, y_teste)
v.poof()

#usar outro arquivo e testar
novo_credito = pd.read_csv('NovoCredit.csv')
novo_credito = novo_credito.iloc[:,0:20].values

novo_credito[:,0] = labelencoder.fit_transform(novo_credito[:,0])
novo_credito[:,2] = labelencoder.fit_transform(novo_credito[:,2])
novo_credito[:,3] = labelencoder.fit_transform(novo_credito[:,3])
novo_credito[:,5] = labelencoder.fit_transform(novo_credito[:,5])
novo_credito[:,6] = labelencoder.fit_transform(novo_credito[:,6])
novo_credito[:,8] = labelencoder.fit_transform(novo_credito[:,8])
novo_credito[:,9] = labelencoder.fit_transform(novo_credito[:,9])
novo_credito[:,11] = labelencoder.fit_transform(novo_credito[:,11])
novo_credito[:,13] = labelencoder.fit_transform(novo_credito[:,13])
novo_credito[:,14] = labelencoder.fit_transform(novo_credito[:,14])
novo_credito[:,16] = labelencoder.fit_transform(novo_credito[:,16])
novo_credito[:,18] = labelencoder.fit_transform(novo_credito[:,18])
novo_credito[:,19] = labelencoder.fit_transform(novo_credito[:,19])

naive_bayes.predict(novo_credito)

sábado, 7 de setembro de 2019

Deep Learn com Iris em Python

#pip inatall tensorflow
#pip install keras
from sklearn import datasets
from sklearn.model_selection import train_test_split
from yellowbrick.classifier import ConfusionMatrix
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
import numpy as np


base = datasets.load_iris()
previsores = base.data
classe = base.target

classe_dummy = np_utils.to_categorical(classe)#separa em classes

x_treinamento, x_teste, y_treinamento, y_teste = train_test_split(previsores,
                                                                  classe_dummy,
                                                                  test_size = 0.3,
                                                                  random_state = 0)
#class dummy para ficar todos os dados em uma unica matrix
modelo = Sequential()#uma camada após a outra
#adicionar camadas - no ex terá 5 camadas (units)
modelo.add(Dense(units = 5, input_dim = 4)) #input entrada - quantas atributos/neoronios (4 são numero de atributos iris) o valor 5 está na aula de r
modelo.add(Dense(units = 4))
modelo.add(Dense(units = 3, activation = 'softmax')) #quando tiver mais de duas classes usar este (saida 3 que são as saidas Vesicolor, sestosa e )

modelo.summary()
#para visualizar
#from keras.util.vis_utils import plot_model   precisa de um programa pra ler
modelo.compile(optimizer = 'adam', loss = 'categorical_crossentropy',
               metrics = ['accuracy']) #adma é uma funçao / categorical_crossentroppy funcao/ accuraci / taxa de acerto
modelo.fit(x_treinamento, y_treinamento, epochs = 1000,
validation_data = (x_teste, y_teste)) #epoch numero de revelidação
previsoes = modelo.predict(x_teste)
previsoes = (previsoes > 0.5) #definir que se mais de 50% ELE É DA CLASSE
v = ConfusionMatrix()# vai dar erro, precisa convertter
y_teste_matrix = (np.argmax(t) for t in y_teste) #vai pegar o maximo argumento
y_previsao_matrix = (np.argmax(t) for t in previsoes)
confusao = ConfusionMatrix(y_teste_matrix, y_previsao_matrix)

Neste caso ele teve acerto de 98% na determinação da espécie