TÓPICOS ESPECIAIS EM ENGENHARIA DA COMPUTAÇÃO
Por: Henrique Spinola • 14/9/2020 • Trabalho acadêmico • 384 Palavras (2 Páginas) • 156 Visualizações
Tópicos especiais em Engenharia da computação III
Aprendizado de máquina
1. Introdução
Foi escolhido um problema de classificação binária. O banco de dados chama-se: “Tic-Tac-Toe Endgame Data Set”.
Esse banco de dados codifica o conjunto completo de configurações possíveis de um tabuleiro de jogo da velha, onde se supõe que "x" tenha sido jogado primeiro. O objetivo é "ganhar com x" (ou seja, verdadeiro quando "x" tem uma das 8 maneiras possíveis de criar um "três em uma linha").
Endereço: https://archive.ics.uci.edu/ml/machine-learning-databases/tic-tac-toe/tic-tac-toe.data
2. Linguagem e bibliotecas utilizadas
Os testes foram realizados utilizando a linguagem Python. E foram utilizadas as bibliotecas pandas e numpy.
3. Arquiteturas
Os códigos não serão colocados completamente para não ocupar muito espaço no relatório. Mas basicamente, foram alterados alguns valores do banco de dados. Os códigos serão colocados em anexo no moodle, junto com o relatório.
Os perceptrons irão separar os resultados positive (1) de negative (-1), o vetor Xb, é a entrada do neurônio perceptron. Foram utilizadas 10000 épocas para treinar o neurônio. Onde a saída pode assumir:
Caso a classe seja -1 o erro ficaria da seguinte maneira:
Yr = -1 => e = -1-(+1) = 0
Yr = +1 => e= -1-(+1) = -2
Caso a classe seja +1 o erro ficaria da seguinte maneira:
Yr = -1 => e = +1-(+1) = +2
Yr = +1 => e=+-1-(+1) = 0
Onde e = erro.
3.1 Perceptron Simples
Trecho do código:
bias = 1
numEpocas = 10000
numAmostras = 319
eta = 0.1
e = np.zeros(319)
W = np.ones([1,10])
for j in range(numEpocas):
for k in range(numAmostras):
# Insere o bias no vetor de entrada.
Xb = np.hstack((bias, X[:,k]))
# Calcula o vetor campo induzido.
V = np.dot(W, Xb)
# Calcula a saída do perceptron.
Yr = np.sign(V)
# Calcula o erro: e = (Y - Yr)
e[k] = Y[k] - Yr
# Treinando a rede.
W = W + eta*e[k]*Xb
Após o código ser rodado a saída com 319 das 956 linhas do banco de dados, o vetor de erros ficou da seguinte maneira:
Ou seja, o Perceptron acertou quase 100%, portanto o resultado foi satisfatório.
3.2 Perceptron com múltiplas camas
Trecho do código:
numEpocas = 20 # Número de épocas.
q = 319 # Número de padrões.
eta = 0.01 # Taxa de aprendizado.
m = 9 # Número de neurônios na camada de entrada.
N = 9 # Número de neurônios na camada escondida.
L = 1 # Número de neurônios na camada de saída.
d = np.array(res) # vetor de resposta
W1 = np.random.random((N, m + 1))
W2 = np.random.random((L, N + 1))
# Array para amazernar os erros.
E = np.zeros(q)
Etm = np.zeros(numEpocas)
bias = 1
X = np.vstack((acx, acx1, acx2, acx3, ao, aco1, acx4, aco2, aco3))
for i in range(numEpocas):
for j in range(q):
# Insere o bias no vetor de entrada.
Xb = np.hstack((bias, X[:,j]))
# Saída da Camada Escondida.
O1 = np.tanh(W1.dot(Xb)) # Equações (1) e (2) juntas.
...