One-hot

Origem: Wikipédia, a enciclopédia livre.
Decimal Binário Unário One-hot
0 000 00000000 00000001
1 001 00000001 00000010
2 010 00000011 00000100
3 011 00000111 00001000
4 100 00001111 00010000
5 101 00011111 00100000
6 110 00111111 01000000
7 111 01111111 10000000

Em circuitos digitais e aprendizado de máquina, um one-hot é um grupo de bits entre os quais as combinações legais de valores são apenas aquelas com um único bit alto (1) e todos os outros baixos (0).[1] Uma implementação semelhante na qual todos os bits são '1', exceto um '0', às vezes é chamada de one-cold.[2] Em estatística, as variáveis fictícias representam uma técnica semelhante para representar dados categóricos.

Aplicações[editar | editar código-fonte]

Circuitos digitais[editar | editar código-fonte]

A codificação one-hot é frequentemente usada para indicar o estado de uma máquina de estado. Quando se usa o sistema binário, é necessário um decodificador para determinar o estado. Uma máquina de estado one-hot, no entanto, não precisa de um decodificador, pois a máquina de estado está no enésimo estado se, e somente se, o enésimo bit estiver alto.

Um contador de anel com 15 estados ordenados sequencialmente é um exemplo de máquina de estado. Uma implementação "one-hot" teria 15 flip-flops encadeados em série com a saída Q de cada flip-flop conectada à entrada D do próximo e a entrada D do primeiro flip-flop conectada à saída Q do 15º flip-flop. O primeiro flip-flop da cadeia representa o primeiro estado, o segundo representa o segundo estado e assim por diante até o 15º flip-flop, que representa o último estado. Após a reinicialização da máquina de estado, todos os flip-flops são redefinidos para '0', exceto o primeiro da cadeia, que é definido como '1'. A próxima borda do relógio que chega aos flip-flops avança o bit "hot" para o segundo flip-flop. O bit "hot" avança dessa forma até o 15º estado, após o qual a máquina de estado retorna ao primeiro estado.

Um decodificador de endereços converte de representação binária para representação one-hot. Um codificador de prioridade converte a representação one-hot para binário.

Comparação com outros métodos de codificação[editar | editar código-fonte]

Vantagens[editar | editar código-fonte]
  • Determinar o estado tem um custo baixo e constante de acesso a um flip-flop;
  • A alteração do estado tem o custo constante de acessar dois flip-flops;
  • Fácil de projetar e modificar;
  • Fácil de detectar estados ilegais;
  • Aproveita a abundância de flip-flops de um FPGA;
  • O uso de uma implementação one-hot normalmente permite que uma máquina de estado seja executada a uma taxa de clock mais rápida do que qualquer outra codificação dessa máquina de estado.[3]
Desvantagens[editar | editar código-fonte]
  • Requer mais flip-flops do que outras codificações, o que o torna impraticável para dispositivos PAL;
  • Muitos dos estados são ilegais.[4]

Processamento de linguagem natural[editar | editar código-fonte]

No processamento de linguagem natural, um vetor one-hot é uma matriz 1 × N (vetor) usada para distinguir cada palavra em um vocabulário de todas as outras palavras do vocabulário.[5] O vetor consiste em 0s em todas as células, com exceção de um único 1 em uma célula usada exclusivamente para identificar a palavra. A codificação one-hot garante que o aprendizado de máquina não presuma que números mais altos são mais importantes. Por exemplo, o valor "8" é maior do que o valor "1", mas isso não torna "8" mais importante do que "1". O mesmo se aplica às palavras: o valor "risada" não é mais importante do que "riso".

Aprendizado de máquina e estatística[editar | editar código-fonte]

No aprendizado de máquina, a codificação one-hot é um método frequentemente usado para lidar com dados categóricos. Como muitos modelos de aprendizado de máquina precisam que suas variáveis de entrada sejam numéricas, as variáveis categóricas precisam ser transformadas na parte de pré-processamento.[6]

Codificação de rótulos
Nome do alimento # Categórico Calorias
Maçã 1 95
Frango 2 231
Brócolis 3 50
Codificação One-Hot
Maçã Frango Brócolis Calorias
1 0 0 95
0 1 0 231
0 0 1 50

Os dados categóricos podem ser nominais ou ordinais.[7] Os dados ordinais têm uma ordem de classificação para seus valores e, portanto, são convertíveis em dados numéricos por meio da codificação ordinal.[8] Um exemplo de dados ordinais seriam as classificações em um teste que variam de A a F, que poderiam ser classificadas usando números de 6 a 1. Como não há relação quantitativa entre os valores individuais das variáveis nominais, o uso da codificação ordinal pode potencialmente criar uma relação ordinal fictícia nos dados.[8] Portanto, a codificação one-hot é frequentemente aplicada a variáveis nominais para melhorar o desempenho do algoritmo.

Para cada valor exclusivo na coluna categórica original, uma nova coluna é criada nesse método. Essas variáveis fictícias são então preenchidas com zeros e uns (1 significa VERDADEIRO, 0 significa FALSO).[9]

Como esse processo cria várias variáveis novas, ele é propenso a criar um problema de "big p" (muitos preditores) se houver muitos valores exclusivos na coluna original. Outra desvantagem da codificação one-hot é que ela causa multicolinearidade entre as variáveis individuais, o que pode reduzir a precisão do modelo.[10]

Além disso, se a variável categórica for uma variável de saída, talvez você queira converter os valores novamente em uma forma categórica para apresentá-los em seu aplicativo.[6]

No uso prático, essa transformação é geralmente realizada diretamente por uma função que recebe dados categóricos como entrada e gera as variáveis fictícias correspondentes. Um exemplo seria a função dummyVars da biblioteca Caret no R.[11]

Ver também[editar | editar código-fonte]

Referências[editar | editar código-fonte]

  1. Harris, David and Harris, Sarah (7 de agosto de 2012). Digital design and computer architecture (em inglês) 2nd ed. San Francisco, Calif.: Morgan Kaufmann. p. 129. ISBN 978-0-12-394424-5 
  2. Harrag, Fouzi; Gueliani, Selmene (2020). «Event Extraction Based on Deep Learning in Food Hazard Arabic Texts» (em inglês). arXiv:2008.05014Acessível livremente 
  3. «Adaptive Computing Support - "Encoding State Machines". Appendix A: "Accelerate FPGA Macros with One-Hot Approach"». AMD (em inglês) 
  4. Cohen, Ben (2002). Real Chip Design and Verification Using Verilog and VHDL (em inglês). Palos Verdes Peninsula, CA, US: VhdlCohen Publishing. p. 48. ISBN 0-9705394-2-8 
  5. Arnaud, Émilien; Elbattah, Mahmoud; Gignon, Maxime; Dequen, Gilles (agosto de 2021). NLP-Based Prediction of Medical Specialties at Hospital Admission Using Triage Notes. 2021 IEEE 9th International Conference on Healthcare Informatics (ICHI) (em inglês). Victoria, British Columbia. pp. 548–553. doi:10.1109/ICHI52183.2021.00103. Consultado em 22 de maio de 2022 
  6. a b Brownlee, Jason (2017). «Why One-Hot Encode Data in Machine Learning». Machine Learning Mastery (em inglês) 
  7. Stevens, S. S. (1946). «On the Theory of Scales of Measurement». Science (2684): 677–680. ISSN 0036-8075 
  8. a b Brownlee, Jason (2020). «Ordinal and One-Hot Encodings for Categorical Data». Machine Learning Mastery (em inglês) 
  9. Dinesh, Yadav (2019). «Categorical encoding using Label-Encoding and One-Hot-Encoder». Towards Data Science (em inglês) 
  10. Andre, Ye (2020). «Stop One-Hot Encoding Your Categorical Variables». Towards Data Science (em inglês) 
  11. Kuhn, Max. «dummyVars». RDocumentation (em inglês)