O poder de um único neurônio

Redes neurais do mundo moderno podem utilizar centenas de milhares, milhões de neurônios artificiais. Porém, o que dá para fazer com um único neurônio? Resposta: um classificador simples. Segue um exemplo.

Este é o mesmo exercício visto anteriormente, de criar uma reta para classificar o Resultado em função da Performance e Dificuldade:

(Vide https://medium.com/ideias-anal%C3%ADticas-avan%C3%A7adas/classificador-e-svm-97b5b39c3e06)

Performance = [6.8, 7.9, 9.6, 9.6, 9.4, 7.9, 8.8, 7.9, 5.8, 7.8, 5.9, 6.7, 9.3, 7.9, 6.5, 7.8, 8.0, 6.3, 9.4, 7.4, 9.2, 9.5, 6.8, 5.5, 5.7, 6.2, 5.6, 6.6, 5.5, 5.5]

Dificuldade = [8.0, 6.5, 8.4, 5.4, 7.2, 8.5, 8.5, 9.3, 9.3, 8.3, 9.6, 9.1, 8.9, 7.0, 9.1, 8.1, 9.2, 9.1, 6.5, 9.8, 8.9, 5.4, 5.9, 5.6, 5.5, 6.6, 5.4, 7.0, 5.9, 5.4]

Resultado = [‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Ok’, ‘Não Ok’, ‘Não Ok’, ‘Não Ok’, ‘Não Ok’, ‘Não Ok’, ‘Não Ok’, ‘Não Ok’, ‘Não Ok’]

No exercício anterior (vide aqui), o classificador era simplesmente a reta x + y = 14.

Um neurônio artificial é comumente representado da forma abaixo. É exatamente igual a um classificador. Recebe valores de entrada, multiplica por pesos e soma uma constante.

É inspirado no neurônio do cérebro humano, onde os dendômetros recebem algum sinal de outros neurônios, e o axônio dispara uma composição dos sinais de entrada para os próximos elos do sistema.

Vamos usar um único neurônio em uma única camada, para criar um classificador. Ferramenta: Keras, um pacote de AI que funciona sobre o TensorFlow, um pacote de computação eficiente do Google.

from keras.models import Sequential
from keras.layers import Dense
from tensorflow import keras
from tensorflow.keras import layers

import tensorflow

Declarando o modelo

model = keras.Sequential()

Adicionando uma camada com: um neurônio, dimensão do vetor de entrada = 2

model.add(Dense(1, input_dim=2, kernel_initializer=’uniform’, activation = ‘sigmoid’))

A seguir, criar uma função de otimização, a métrica a otimizar e manda rodar

opt = keras.optimizers.Adam(learning_rate=0.5)
model.compile(loss=’binary_crossentropy’, optimizer=opt, metrics=[‘accuracy’])
model.fit(X,y, epochs =100, batch_size = 10)

Resultado, convergiu com uma acurácia de 96,6%, é um bom modelo.

Epoch 100/100
3/3 [==============================] – 0s 3ms/step – loss: 0.1256 – accuracy: 0.9667

Via o comando “predict”, vamos predizer o resultado para combinações de entradas:
x_test = [(5,5), (3,8),(8,8), (7,5), (7,8), (6.8, 8)]

print(model.predict(x_test))

[[0.00640216]
[0.01692742]
[0.84710884]
[0.06093016]
[0.6358352 ]
[0.5808778 ]]

Nota: o forecast é uma função contínua entre 0 e 1. Para traduzir se passou ou não, vamos usar outra regra. Se o valor for maior que 0,5, podemos dizer ‘Ok’ , senão, ‘Não OK’.

Vamos dar uma olhada nos pesos do modelinho.

weights, biases = model.layers[0].get_weights()
print(weights)
[[1.1547703]
[1.0974979]]

print(biases)
[-16.306044]

Ou seja, esse modelo pega a primeira entrada, multiplica por 1.15, pega a segunda e multiplica por 1.09 e soma -16.3.

Isso dá muito próximo à reta x + y – 14 = 0, que já tínhamos encontrado.

Modelos mais complexos podem ter dezenas de camadas, centenas de neurônios por camada, função de ativação não-linear, camadas especiais (como convolução) e outros truques que possibilitam ferramentas de detecção de imagens, algoritmos de tradução e reconhecimento de padrões utilizados no mundo atual.

Exemplo: Arquitetura do Alexnet, uma das primeiras redes profundas. Cada retângulo é uma camada de neurônios.

Para quem quiser rodar, segue link do Colab:
https://colab.research.google.com/drive/1gURlAAKEWZ2rRbdTrWtnhThIE7tBDM1X?usp=sharing

Coloquei também no Github: https://github.com/asgunzi/keras-unico-neuronio

Veja também: https://medium.com/ideias-anal%C3%ADticas-avan%C3%A7adas

Macro para salvar Excel em TXT

Segue uma macro que pode ser útil, para salvar dados de Excel para TXT.

Uma aplicação é enviar informação para outro sistema, por exemplo.

O Excel tem nativamente uma opção de salvar como CSV, porém, o uso de macros permite uma flexibilidade enorme, além de todo o poder de processar a informação da forma que quisermos.

Imagine que a planilha seja como a abaixo.

Queremos salvar o arquivo com o nome indicado na célula C2, no mesmo diretório em que o arquivo Excel se encontra.

O código vai contar as linhas, jogar o conteúdo para a memória.

A seguir, vai criar o arquivo texto, escrever nele e fechar:

‘Inicializa funcao de manipulação de arquivos

Set fs = CreateObject(“Scripting.FileSystemObject”)

strPath = ThisWorkbook.Path & “\” & nomeArquivo

Set afs = fs.CreateTextFile(strPath, 1, 0)

‘Escreve conteúdo

For i = 1 To nl

    strAux = “”

    For j = 1 To UBound(edados, 2)

        strAux = strAux & edados(i, j) & “, “

    Next j

    ‘escreve no arquivo

    afs.writeline strAux

Next i

‘Fecha o arquivo

afs.Close

Set afs = Nothing

Set fs = Nothing

Resultado:

Vide arquivo para download: https://1drv.ms/x/s!Aumr1P3FaK7jnyUz0c1mYGji8DgR


Ideias Analíticas Avançadas

https://medium.com/ideias-anal%C3%ADticas-avan%C3%A7adas

Um mundo mais eficaz através do Analytics

Ferramentas de votação e pesquisa

Sobre algumas ferramentas que podem ser interessantes, nesses tempos on-line.

——————–

O Mentimeter é muito bom para fazer pesquisas online e ver os resultados, em tempo real. Dá para fazer gráficos, nuvem de palavras, listas, etc.

https://www.mentimeter.com

A versão free permite duas perguntas.

(Resultado da enquete de hoje à tarde)

——————–

Outra ferramenta útil é a de criar QR codes – para passar rapidamente o link de sites e contatos.

Há várias possíveis, e esta é bem simples. Basta escrever o endereço do site e baixar o qr code:

https://br.qr-code-generator.com/

——————–

Por fim, o Google Forms, que já existe há muito tempo e é bastante conhecido. Serve para pessoas com acesso ao formulário preencherem, e a ferramenta consolida os resultados.

É possível configurar resposta única ou múltipla, respostas obrigatórias e várias outras opções.

——————–

Quem tiver outras boas sugestões, e de preferência free, fique à vontade para responder.

Escrever por extenso

A macro da planilha (https://github.com/asgunzi/EscreverExtensoVBA) lê um número e escreve por extenso.

O código não é meu. Originalmente é VB6. Peguei num fórum e colei no Excel, e parece que funciona legal.

Não sei se isso pode ser útil de alguma forma.

Ideias técnicas com uma pitada de filosofia
https://ideiasesquecidas.com/

Entre no grupo de estudos de Computação Quântica:
https://www.facebook.com/groups/1013309389112487

Exercício – Código de Barras

O código de barras é utilizado universalmente para representar informações sobre um produto. A grande vantagem é a facilidade de ler o código utilizando laser e reconhecimento de imagens.

Uma convenção bastante utilizada (porém não é a única) é a EAN-13.

Ela tem treze dígitos.

  • Os três primeiros representam o país (Brasil tem número 789),
  • Os quatro dígitos seguintes representam o fabricante,
  • Os cinco dígitos seguintes representam o produto.
  • O último dígito é o verificador: é uma checagem para conferir se não houve algum erro durante a leitura.

O desafio consiste em criar uma planilha que calcule o dígito verificador, dado um código de barras.

Procedimento.

Digamos que o número seja 590.123.412.345-7

Tiro o dígito verificador da conta.

Considero cada dígito individualmente.

Multiplico o primeiro por 1, o segundo por 3 e repito até o 12º dígito.

Faço o somar produto desses dígitos e o multiplicador, ou seja, 5×1 + 9×3 + 0x1 + 1×3 + 2×1 + 3×3 + 4×1 + 1×3 + 2×1 + 3×3 + 4×1 + 5×3

Resultado:          83.

Divido por 10:                   8,3

Arredondar para baixo:                 8

Somar 1:              8 + 1 = 9

Multiplicar por 10:          90

Subtrair a conta original:              90 – 83 = 7

O dígito verificador é o 7, o que confere com o código: 590.123.412.345-7

Outro exemplo: 789.602.630.347-7 (note que o produto é brasileiro, começa com 789)

O desafio consiste em criar um procedimento (fórmula, código, vale tudo) para verificar se o dígito verificador está correto, dado um código de barras.

A minha resposta no próximo post.

Calculadora de IMC

Segue um projetinho simples.

Como fazer uma calculadora de IMC (Índice de massa corporal), utilizando formulários em Excel.

Com Alt + F11, abrimos o editor do VBA.

Inserir -> Userform

Vai abrir um formulário. Este formulário tem várias propriedades. Mudar a propriedade Caption (título) para IMC.

Na caixinha de controles, um deles é o label (um texto simples) e outro é uma caixa de texto (para input de dados).

Basta clicar no controle e inserir no formulário.

Inserir os elementos e posicionar no formulário.

No botão rodar, vai o código  que faz o cálculo.

Se a caixinha de texto se chama TxtPeso, para acessar o valor é TxtPeso.Value.

O IMC é o peso pela altura ao quadrado.

imc = peso / (altura ^ 2)

Pela tabela abaixo, temos a recomendação do IMC.

Resultado de imagem para imc tabela

E o resultado final é algo assim:

Link para download: https://drive.google.com/file/d/1DwMTDTahuvRk7JLeInMgdviUexA6bVuq/view?usp=sharing

Private Sub CommandButton1_Click()

Dim imc As Double

Dim peso As Double

Dim altura As Double

Dim texto As String

Dim txtAlt As String

If Information.IsNumeric(TxtPeso.Value) Then

    peso = TxtPeso.Value

Else

    MsgBox “Informar valor numérico para o peso”

    Exit Sub

End If

If Information.IsNumeric(TxtAltura.Value) Then

     altura = TxtAltura.Value

Else

    MsgBox “Informar valor numérico para a altura”

    Exit Sub

End If

imc = Math.Round(peso / (altura ^ 2), 1)

If imc < 17 Then

    texto = “IMC = ” & imc & “, Peso muito abaixo do ideal”

ElseIf imc < 18.5 Then

    texto = “IMC = ” & imc & “: Peso  abaixo do ideal”

ElseIf imc < 25 Then

    texto = “IMC = ” & imc & “: Peso normal”

ElseIf imc < 30 Then

    texto = “IMC = ” & imc & “: Acima do peso”

ElseIf imc < 35 Then

    texto = “IMC = ” & imc & “: Obesidade I”

ElseIf imc < 40 Then

    texto = “IMC = ” & imc & “; Obesidade II (severa)”

Else

    texto = “IMC = ” & imc & “: Obesidade III (mórbida)”

End If

Label3.Caption = texto

End Sub

Ideias técnicas com uma pitada de filosofia

http://ideiasesquecidas.com

Clusterização

O K-means é um algoritmo de clusterização.

Clusterizar significa dividir uma amostra em grupos.

Ele é mais ou menos assim:

– diga quantos grupos você quer formar (N)

– escolha N indivíduos aleatórios do grupo (cada um será tipo o cabeça do grupo)

– para cada indivíduo restante, veja quem é o líder mais próximo

– avalie a qualidade da dispersão

– repita várias vezes, ficando com o melhor

Utilizei este algoritmo num projeto antigo, que se propunha a dividir igualmente uma região por um número N de técnicos.

Fica o arquivo de exemplo, aqui.

Cicloide em Excel – VBA

Um exerciciozinho de Excel – VBA – pode ser útil para fazer animações em geral.

Imagine um círculo rolando. Qual a curva descrita por um ponto fixo neste círculo? O nome desta curva é cicloide.

O VBA (aqui) plota uma animação, com o círculo girando e a curva gerada.

Tem dois parâmetros:

  • Raio do ponto (100% = ponto na superfície do círculo, menos que isso = ponto dentro do círculo).
  • Velocidade da animação (porque cada computador é diferente e a animação pode ficar ruim)

Quando o raio é zero, quer dizer que o ponto está no centro do círculo, e a cicloide é uma linha reta.

É necessário ativar macros para rodar.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Como escolher cores arbitrárias no Excel

O Excel oferece muitas cores em sua paleta, porém é possível escolher arbitrariamente uma cor.

Em página inicial -> cores do tema, escolher Mais cores…

Vai aparecer o menu de cores. Ir na aba Personalizar.

Vai aparecer para preencher o código RGB da cor. Este número é uma combinação de Vermelho (Red), Verde (Green) e Azul (Blue), numa escala de 0 a 255 para cada cor (não por coincidência, 256 = 2^8).

Digamos que eu goste da cor amarelo ouro. Esta tem código RGB = (249, 166, 2).

E como saber o código RGB das cores? A internet tem várias fontes, mas para ajudar, o arquivo excel aqui é um simuladorzinho de cores RGB.

É necessário ativar macros para rodar.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Colar vínculo e cortar para demarcar forma

Esta técnica pode ser útil para criar dashboards no Excel. É possível copiar um range de células e colar como vínculo – se mudar algo na fonte, a imagem irá atualizar de modo equivalente.

Digamos que quero vincular o range abaixo.

Iniciamos copiando (CTRL+C) a região.

Em Colar -> Colar vínculo da imagem, teremos uma cópia em imagem da região afetada. Só uma imagem retangular é comum demais. Podemos fazer algo mais sofisticado.

Em Formatar -> Cortar -> Cortar para demarcar forma, é possível mudar a forma da imagem. Desse modo, podemos ter uma imagem vinculada à fonte com um formato de shape que ajude a ilustrar as nossas ideias. Vide anexo.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/