Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

Claro, não estou falando sério. Deve haver um limite para o quanto podemos simplificar o assunto. Mas, para as primeiras etapas, entender os conceitos básicos e uma rápida "imersão" no tema, talvez isso seja aceitável. E quanto ao nome apropriado para este material (opções: "Aprendizado de Máquina para Iniciantes", "Análise de Dados do Zero", "Algoritmos para os Pequenos"), discutiremos no final.

Vamos ao que interessa. Escrevi alguns programas práticos no MS Excel para visualização e apresentação clara dos processos envolvidos em diferentes métodos de aprendizado de máquina durante a análise de dados. Ver para crer, afinal, como dizem os nativos da cultura que desenvolveu a maioria desses métodos (aliás, nem todos. O poderoso "método de vetores de suporte", ou SVM, é criação de nosso conterrâneo Vladimir Vapnik, do Instituto de Administração de Moscou. 1963, por sinal! Agora, ele, na verdade, ensina e trabalha nos EUA).

Três arquivos para visualização

1. Agrupamento pelo método k-médias

Esse tipo de tarefa pertence ao "aprendizado não supervisionado", quando precisamos dividir os dados de entrada em um número conhecido de categorias, mas não temos um conjunto de "respostas corretas"; essas devem ser extraídas dos próprios dados. A clássica tarefa fundamental de encontrar subtipos de flores de íris (Ronald Fisher, 1936!), que é considerada a primeira ocorrência nesta área de conhecimento, é exatamente dessa natureza.

O método é bastante simples. Temos um conjunto de objetos representados como vetores (conjuntos de N números). No caso das íris, são conjuntos de 4 números que caracterizam a flor: comprimento e largura da parte externa e interna da peça do cálice, respectivamente (Iris de Fisher – Wikipédia). Como medida de distância ou proximidade entre os objetos, é utilizada a métrica euclidiana comum.

Em seguida, de maneira arbitrária (ou não, veja mais adiante), os centros dos clústeres são escolhidos, e as distâncias de cada objeto até os centros dos clústeres são calculadas. Cada objeto nesta etapa da iteração é marcado como pertencente ao centro mais próximo. O centro de cada clúster é então movido para a média aritmética das coordenadas de seus membros (em física, isso também é chamado de "centro de massa"), e o procedimento é repetido.

O processo converge rapidamente. Nas imagens em duas dimensões, isso se parece com isto:

1. Distribuição inicial aleatória de pontos no plano e número de clusters.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

2. Definição dos centros dos clusters e atribuição de pontos aos seus respectivos clusters.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

3. Transferência das coordenadas dos centros dos clusters, recalculando a pertença dos pontos, até que os centros se estabilizem. A trajetória de movimento do centro do cluster até a posição final é visível.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

A qualquer momento, é possível definir novos centros de clusters (sem gerar uma nova distribuição de pontos!) e observar que o processo de particionamento nem sempre é unívoco. Matematicamente, isso significa que na função que estamos otimizando (a soma dos quadrados das distâncias dos pontos aos centros de seus clusters), encontramos um mínimo local, não global. Para superar esse problema, pode-se optar por uma escolha não aleatória dos centros iniciais dos clusters ou testar possíveis centros (às vezes, é vantajoso colocá-los exatamente em um dos pontos, assim existe a garantia de que não teremos clusters vazios). De qualquer forma, um conjunto finito sempre tem um limite inferior exato.

Você pode brincar com este arquivo através deste link. (não se esqueça de ativar o suporte a macros. Os arquivos foram verificados quanto a vírus.)

Descrição do método na Wikipédia — Método k-means

2. Aproximação por polinômios e partição de dados. Overfitting.

O renomado cientista e divulgador da ciência de dados K.V. Vorontsov fala brevemente sobre métodos de aprendizado de máquina como "a ciência de ajustar curvas a pontos". Neste exemplo, vamos encontrar padrões nos dados usando o método dos mínimos quadrados.

É demonstrada a técnica de dividir os dados originais em conjuntos de 'treinamento' e 'teste', bem como um fenômeno chamado overfitting, ou 'ajuste excessivo' aos dados. Com uma aproximação correta, teremos um certo erro nos dados de treinamento e um erro maior nos dados de teste. Com uma aproximação incorreta, haverá um ajuste exato aos dados de treinamento e um erro colossal nos dados de teste.

(É um fato conhecido que é possível ajustar uma única curva de grau N-1 passando por N pontos, e esse método, em geral, não fornece o resultado desejado. Polinômio interpolador de Lagrange na Wikipédia)

1. Definimos a distribuição inicial.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

2. Dividimos os pontos em conjuntos de 'treinamento' e 'teste' na proporção de 70 para 30.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

3. Realizamos uma curva de aproximação aos pontos de treino, observamos o erro que ela gera nos dados de teste.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

4. Realizamos uma curva precisa através dos pontos de treino e vemos um erro monstruoso nos dados de teste (e zero nos dados de treino, mas de que adianta?).

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

Aqui é apresentado, claro, o caso mais simples com a única divisão em subconjuntos de 'treino' e 'teste', no caso geral isso é feito várias vezes para melhor ajuste dos coeficientes.

O arquivo está disponível aqui, verificado por antivírus. Ative os macros para um funcionamento correto.

3. Descenso do gradiente e dinâmica da mudança de erro.

Aqui teremos o caso 4-dimensional e regressão linear. Os coeficientes da regressão linear serão determinados em etapas pelo método de descendo do gradiente, inicialmente todos os coeficientes são zero. Em um gráfico separado pode-se ver a dinâmica da redução do erro à medida que os coeficientes são ajustados de forma mais precisa. Existe a possibilidade de visualizar todas as quatro projeções 2-dimensionais.

Se um passo de descendo do gradiente muito grande for definido, é visível que, a cada vez, estaremos passando o mínimo e chegaremos ao resultado após um maior número de etapas, embora, no final, ainda cheguemos (a menos que o passo do descendo seja muito elevado — então o algoritmo 'sairá do controle'). E o gráfico da dependência do erro em relação ao passo da iteração não será suave, mas 'irregular'.

1. Geramos dados, definimos o passo do descendo do gradiente.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

2. Com a escolha correta do passo do descendo do gradiente, chegamos ao mínimo de forma suave e rápida.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

3. Com a escolha errada do passo do descendo do gradiente, passamos do máximo, o gráfico do erro é 'irregular', e a convergência leva mais passos.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"
e

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

4. Com a escolha completamente errada do passo do descendo do gradiente, afastamo-nos do mínimo.

Aprendizado de máquina sem Python, Anaconda e outras "criaturas rastejantes"

(Para reproduzir o processo com os valores do passo do descendo do gradiente mostrados nas imagens, marque a opção 'dados de referência').

O arquivo – neste link, é necessário ativar os macros, não há vírus.

Como acredita a respeitável comunidade, é permitido tal simplificação e método de apresentação do material? Vale a pena traduzir o artigo para o inglês?

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster