# One-hot

| 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). Uma implementação semelhante na qual todos os bits são '1', exceto um '0', às vezes é chamada de one-cold. Em estatística, as variáveis fictícias representam uma técnica semelhante para representar dados categóricos.

## Aplicações
### Circuitos digitais

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
##### Vantagens

* 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.

##### Desvantagens

* Requer mais flip-flops do que outras codificações, o que o torna impraticável para dispositivos PAL;
* Muitos dos estados são ilegais.

### Processamento de linguagem natural

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. 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

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.
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. 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. 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. 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).
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.
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.
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.