avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Aprendizado de máquina para diversão: o guia mais simples para iniciantes

Criado em: 2016-12-07 12:37:21, atualizado em: 2016-12-07 12:40:26
comments   3
hits   3472

Aprendizado de máquina para diversão: o guia mais simples para iniciantes


Quando você ouve as pessoas falarem sobre aprendizado de máquina, você tem apenas algumas noções vagas sobre o que isso significa? Você está cansado de apenas acenar quando fala com seus colegas? Vamos mudar isso!

Este guia é destinado a todos os leitores interessados em aprender com máquinas, mas que não sabem como começar. Imagino que muitos de vocês já tenham lido o artigo da Wikipedia sobre aprendizagem de máquinas, e se sentem frustrados por achar que ninguém pode dar uma explicação de alto nível. Este artigo é exatamente o que vocês querem.

O objetivo deste artigo é ser acessível, o que significa que há uma grande quantidade de generalizações. Mas quem se importa com isso?

  • ### Por que a aprendizagem de máquina?

O conceito de aprendizagem de máquina é que você não precisa escrever nenhum código de programação especializado para resolver o problema, e os algoritmos genéticos (algoritmos genéticos) podem obter respostas interessantes para você em um conjunto de dados. Para o algoritmo genético, não é necessário codificar, mas sim inserir dados, e ele construirá sua própria lógica sobre os dados.

Por exemplo, há um tipo de algoritmo chamado classificação que divide dados em diferentes grupos. Um algoritmo de classificação usado para reconhecer números manuscritos pode ser usado para dividir e-mails em spam e em e-mails comuns sem modificar uma linha de código. O algoritmo não mudou, mas o treinamento dos dados de entrada mudou e, portanto, ele obteve uma lógica de classificação diferente.

Aprendizado de máquina para diversão: o guia mais simples para iniciantes

Os algoritmos de aprendizagem de máquina são uma caixa preta que pode ser reutilizada para resolver muitos problemas de classificação diferentes.

A aprendizagem de máquina é um termo abrangente que abrange um grande número de algoritmos genéticos semelhantes.

  • ### Dois tipos de algoritmos de aprendizagem de máquina

Pode-se pensar que os algoritmos de aprendizagem de máquina se dividem em duas grandes categorias: aprendizagem supervisionada e aprendizagem não supervisionada. A diferença entre elas é simples, mas muito importante.

  • Aprendizagem supervisionada

    Suponha que você é um corretor de imóveis, e que o seu negócio está crescendo, então você contratou um grupo de estagiários para ajudá-lo. Mas o problema é que você pode ver a casa e saber o que ela vale, e os estagiários não têm experiência e não sabem como avaliá-la.

    Para ajudar o seu estagiário (e talvez para libertar-se para ir de férias), você decidiu escrever um pequeno software para avaliar o valor das casas na sua região com base em fatores como o tamanho das casas, o terreno e o preço de transação de casas semelhantes.

    Você escreveu todas as transações de casas na cidade durante três meses, cada uma delas com uma longa lista de detalhes, como o número de quartos, o tamanho da casa, o terreno, etc. Mas o mais importante é que você escreveu o preço final da transação:

    Aqui estão os dados do nosso treinamento de yoga.

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Nós vamos usar esses dados de treinamento para escrever um programa para estimar o valor de outras casas na área:

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Isso é chamado de aprendizagem supervisionada. Você já sabe o preço de venda de cada imóvel, ou seja, você sabe a resposta para o problema e pode inverter a lógica para encontrar a solução.

    Para escrever o software, você vai inserir os dados de treinamento de cada conjunto de propriedades no seu algoritmo de aprendizagem de máquina. O algoritmo tenta descobrir quais operações devem ser usadas para obter os números de preço.

    É como se fosse um problema de aritmética, com todos os símbolos de cálculo apagados:

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Por amor de Deus! um aluno mal-intencionado apagou os símbolos de matemática das respostas do professor.

    Você sabe o que você deve fazer com a barra de números do lado esquerdo para obter a resposta da barra do lado direito?

    No aprendizado supervisionado, você está deixando o computador calcular as relações entre os números para você. Uma vez que você conhece os métodos matemáticos necessários para resolver esse tipo de problema específico, você pode resolver outros problemas do mesmo tipo.

  • Aprendizagem não supervisionada

    Voltando ao exemplo do corretor de imóveis que comecei. Se você não sabe o preço de venda de cada casa, você pode criar um esquema muito legal, mesmo que você só saiba o tamanho da casa, sua localização, etc. Isso é chamado de aprendizado não supervisionado.

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Mesmo que você não queira prever dados desconhecidos (como preços), você pode usar o aprendizado de máquina para fazer coisas interessantes.

    É como se alguém lhe desse um pedaço de papel com um monte de números e lhe dissesse: “Eu não sei o que esses números significam, mas talvez você consiga encontrar uma regra ou classificar esses números ou algo assim - boa sorte!”

    Primeiro, você pode usar um algoritmo para separar automaticamente os diferentes segmentos de mercado a partir dos dados. Talvez você descubra que os compradores de casas perto de universidades preferem casas pequenas com mais quartos, enquanto os compradores de casas nos subúrbios preferem casas grandes com três quartos.

    Você também pode fazer algo muito legal, descobrir automaticamente o valor de um valor de preço de uma casa fora do agregado, que é diferente de qualquer outro valor. Esses agregados de propriedades podem ser prédios altos, e você pode concentrar os melhores vendedores nessas áreas, porque eles recebem comissões mais altas.

    No restante deste artigo, vamos falar principalmente sobre aprendizagem supervisionada, mas isso não é porque a aprendizagem não supervisionada não seja útil ou desagradável. Na verdade, a aprendizagem não supervisionada está se tornando cada vez mais importante à medida que os algoritmos melhoram, sem a necessidade de associar os dados às respostas corretas.

    Há muitos outros tipos de algoritmos de aprendizagem de máquina, mas é bom para os iniciantes.

    Isso é muito legal, mas avaliar o preço de uma casa pode ser visto como uma lição de yoga?

    Como parte de um ser humano, seu cérebro pode lidar com a maioria das situações e aprender a lidar com elas sem nenhuma instrução clara. Se você for um corretor de imóveis por muito tempo, você terá um sentimento instintivo de curiosidade sobre o preço adequado da propriedade, como ela pode ser melhor comercializada e quais clientes serão interessados, etc. O objetivo do estudo da inteligência artificial forte é ser capaz de replicar essa capacidade em computadores.

    Mas os algoritmos de aprendizagem de máquina atuais não são tão bons ainda, eles só podem se concentrar em problemas muito específicos e limitados. Talvez, neste caso, a definição mais apropriada de uma máquina de aprendizado de máquina seja encontrar uma equação para resolver um problema específico com base em um pequeno número de dados de exemplo.

    Infelizmente, a máquina de cozimento encontrou uma equação para resolver um problema específico com base em um pequeno número de dados de exemplo. O nome de cozimento é muito ruim. Então, finalmente, substituímos o cozimento por cozimento de aprendizado de máquina.

    Claro, se você estiver lendo este artigo depois de 50 anos, então já teremos um algoritmo de inteligência artificial forte, e este texto parece uma velha antiguidade.

    Vamos escrever código!

    Como você vai escrever o programa de avaliação de preços do exemplo anterior?

    Se você não souber nada sobre aprendizado de máquina, provavelmente você vai tentar escrever algumas regras básicas para avaliar o preço de uma casa, como:

    def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
        price = 0
        # In my area, the average house costs $200 per sqft
        price_per_sqft = 200
    
    
        if neighborhood == "hipsterton":
        # but some areas cost a bit more
            price_per_sqft = 400
    
    
        elif neighborhood == "skid row":
        # and some areas cost less
            price_per_sqft = 100
    
    
        # start with a base price estimate based on how big the place is
        price = price_per_sqft * sqft
    
    
        # now adjust our estimate based on the number of bedrooms
        if num_of_bedrooms == 0:
        # Studio apartments are cheap
            price = price — 20000
        else:
        # places with more bedrooms are usually
        # more valuable
            price = price + (num_of_bedrooms * 1000)
    
    
        return price
    

    Se você estiver ocupado por algumas horas, talvez tenha um pouco de sucesso, mas seu programa nunca será perfeito e será difícil de manter quando os preços mudam.

    Não seria melhor se um computador descobrisse uma maneira de implementar as funções acima?

    def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
        price = <computer, plz do some math for me>
        return price
    

    Uma maneira de pensar sobre isso é pensar no preço de uma casa como um prato de queijo, cujos ingredientes são o número de quartos, a área e o terreno. Se você puder calcular o quanto cada ingrediente afeta o preço final, talvez você possa obter uma proporção específica de ingredientes misturados para formar o preço final.

    Isso simplifica o seu programa original (e todas as suas frenéticas declarações de “se não”) para algo parecido com:

    def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
        price = 0
    
    
        # a little pinch of this
        price += num_of_bedrooms * .841231951398213
    
    
        # and a big pinch of that
        price += sqft * 1231.1231231
    
    
        # maybe a handful of this
        price += neighborhood * 2.3242341421
    
    
        # and finally, just a little extra salt for good measure
        price += 201.23432095
    
    
        return price
    

    Observe os números mágicos em letras maiúsculas: 841231951398213, 1231.1231231, 2.3242341421, e 201.23432095. Eles são chamados de pesos. Se conseguíssemos encontrar um peso perfeito para cada casa, nossa função poderia prever todos os preços!

    Um exemplo de como encontrar o peso ideal é o seguinte:

    Passo 1:

    Para começar, coloque um peso de 1.0 em cada uma delas:

    def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
        price = 0
    
    
        # a little pinch of this
        price += num_of_bedrooms * 1.0
    
    
        # and a big pinch of that
        price += sqft * 1.0
    
    
        # maybe a handful of this
        price += neighborhood * 1.0
    
    
        # and finally, just a little extra salt for good measure
        price += 1.0
    
    
        return price
    

    Passo dois:

    Leve cada imóvel para o seu cálculo funcional e verifique se o valor estimado está fora do preço correto:

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    O que é que você está a fazer?

    Por exemplo: o primeiro imóvel na tabela acima tem um preço de transação real de US \( 250.000, a sua função tem uma estimativa de US \) 178.000, e você perde US $ 72.000.

    Depois, somemos a estimativa de cada imóvel em nosso conjunto de dados ao quadrado. Suponha que o conjunto de dados tenha 500 transações de imóveis, e a estimativa de desvio ao quadrado é de US $ 86.123.373. Isso reflete o grau de correção da função.

    Agora, divida o valor total por 500 e obtenha a estimativa de cada imóvel que se desvia do valor médio.

    Se você puder ajustar o peso para que o custo seja 0, então a sua função é perfeita. Isso significa que o seu programa faz uma estimativa de cada transação imobiliária com base nos dados que ele recebe. E esse é o nosso objetivo: tentar diferentes pesos para manter o custo o mais baixo possível.

    Passo 3:

    Repetindo o passo 2, tente todas as combinações de pesos possíveis. Qual combinação que faz o custo mais próximo de zero, é o que você vai usar, e assim que você encontrar essa combinação, o problema será resolvido!

    Pensamentos perturbam o tempo.

    É muito simples, não é? Pense no que você fez. Você obteve alguns dados, introduziu-os em três passos simples e gerais, e finalmente você tem uma função que pode avaliar casas na sua área. Mas os seguintes fatos podem perturbar a sua mente:

      1. Nos últimos 40 anos, pesquisas em muitos campos (como linguística/tradução) têm demonstrado que este tipo de algoritmo de aprendizagem generalizado, como o “quebra-cabeça de dados dinâmicos” (a palavra que eu inventei), tem sido superior a métodos que requerem regras definidas por humanos reais.
      1. A função que você escreveu no final é muito má, ela nem sabe o que é a área de um quilo e o número de quartos de um quilo. Tudo o que sabe é mover e mudar os números para obter a resposta correta.
      1. É muito provável que você não saiba por que um conjunto especial de pesos funciona. Então você apenas escreve uma função que você não entende, mas que pode ser comprovada.
      1. Imagine que seu programa, em vez de aceitar parâmetros como o parâmetro da área de alumínio e o parâmetro do quarto de alumínio, aceita um conjunto de números. Suponha que cada número represente um pixel na imagem capturada pela câmera instalada no seu tejadilho, e que a saída prevista não seja o parâmetro do preço do alumínio, mas o parâmetro do grau de rotação do volante do alumínio. Assim, você tem um programa que pode manipular o seu carro automaticamente!

    É uma loucura, não é?

    O que acontece quando você tenta cada uma das peças do passo 3?

    Bem, é claro que você não pode experimentar todos os pesos possíveis para encontrar a melhor combinação. Isso vai demorar muito tempo, porque o número de tentativas pode ser infinito. Para evitar isso, os matemáticos encontraram muitas maneiras inteligentes de encontrar rapidamente e sem ter que tentar muito um valor de peso excelente. Aqui está uma delas: Para começar, escreva uma equação simples que represente os dois passos anteriores:

    Esta é a sua função de custo.

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Em seguida, vamos reescrever a mesma equação usando termos matemáticos de aprendizagem de máquina (que você pode ignorar agora):

    θ representa o valor de peso atual. J ((θ) significa o custo correspondente ao valor de peso atual de θ.

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Esta equação representa o tamanho do desvio do nosso processo de avaliação em relação ao valor ponderado atual.

    Se todos os possíveis pesos atribuídos ao número de quartos e à área forem apresentados em forma de gráfico, obtemos um gráfico semelhante ao seguinte:

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    A imagem gráfica da função de custo é uma tigela. A vertical representa o custo.

    O ponto mais baixo do gráfico em azul é onde o custo é mais baixo, ou seja, o nosso programa tem o menor desvio. O ponto mais alto significa o maior desvio. Então, se pudermos encontrar um conjunto de pesos que nos leve ao ponto mais baixo do gráfico, teremos a resposta!

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Portanto, nós só precisamos ajustar os pesos para que possamos descer o declive em direção ao ponto mais baixo no gráfico. Se os ajustes minuciosos para os pesos nos mantiverem movendo-nos para o ponto mais baixo, então, eventualmente, não teremos que tentar muitos pesos para chegar lá.

    Se você se lembra um pouco da matemática, talvez se lembre que se você fizer uma derivação de uma função, o resultado vai dizer-lhe qual é a inclinação da função em qualquer ponto. Em outras palavras, para um dado ponto no gráfico, ele nos diz que o caminho é um caminho descendente. Podemos usar esse ponto para avançar para o fundo.

    Então, se buscarmos o derivado da função de custo para cada peso, então podemos subtrair esse valor de cada peso. Isso nos leva mais perto do fundo da montanha. Continuando assim, eventualmente chegaremos ao fundo e obteremos o valor ideal do peso.

    Esta maneira de encontrar o melhor peso é conhecida como gradiente de descida em massa, e aqui está uma alta generalização sobre ela. Se você quiser entender os detalhes, não tenha medo de continuar a investigar.

    Quando você usa uma biblioteca de algoritmos de aprendizado de máquina para resolver problemas reais, tudo isso está pronto para você. Mas é sempre útil entender alguns detalhes específicos.

    O que é que você deixou de lado?

    O algoritmo de três passos que descrevi acima é chamado de regressão multilinear. A sua equação de estimativa consiste em obter uma linha que encaixe todos os pontos de dados de preços de casas. Em seguida, você usa essa equação para estimar o preço de casas que você nunca viu, de acordo com a posição em que o preço das casas pode aparecer na sua linha.

    No entanto, o método que eu mostrei pode funcionar em situações simples, mas não em todas as situações. Uma das razões é que os preços das casas não seguem sempre uma linha contínua.

    Mas, felizmente, há muitas maneiras de lidar com isso. Para dados não-lineares, muitos outros tipos de algoritmos de aprendizagem de máquina podem lidar (como redes neurais ou máquinas com vetores nucleares). Existem muitas maneiras de usar a regressão linear com mais flexibilidade, pensando em usar linhas mais complexas para se adequar.

    E eu esqueci o conceito de encaixe. É muito fácil encontrar um conjunto de pesos que fazem uma previsão perfeita para o preço de uma casa no seu conjunto de dados original, mas não para qualquer nova casa fora do seu conjunto de dados original.

    Em outras palavras, o conceito básico é muito simples, mas há algumas habilidades e experiências necessárias para obter resultados úteis com a aprendizagem de máquina. No entanto, é uma habilidade que todos os desenvolvedores podem aprender.

  • A aprendizagem de máquina é infinita?

    Uma vez que você começa a entender que a aprendizagem de máquina pode ser facilmente aplicada para resolver problemas que parecem difíceis (como a identificação de escrita), você tem a sensação de que, se você tiver dados suficientes, você pode usar a aprendizagem de máquina para resolver qualquer problema. Basta inserir os dados e você verá que a equivaliação se encaixa com os dados, como um truque de computador.

    Mas é importante lembrar que o aprendizado de máquina só se aplica a problemas que você pode resolver com os dados que você tem.

    Por exemplo, se você construir um modelo para prever o preço de uma casa com base no número de plantas em cada casa, ele nunca vai ter sucesso. Não há nenhuma relação entre o número de plantas em cada casa e o preço da casa. Portanto, não importa o quanto ele tente, o computador não pode deduzir a relação entre os dois.

    Aprendizado de máquina para diversão: o guia mais simples para iniciantes

    Você só pode modelar relações reais.

  • Como aprender com o aprendizado de máquina

    Eu acho que o maior problema com a aprendizagem de máquina atualmente é que ela é predominantemente ativa em academia e em organizações de pesquisa comercial. Não há muitos materiais de aprendizagem simples e fáceis de entender para pessoas que querem ter um entendimento geral e não se tornar especialistas. Mas isso está melhorando a cada dia.

    O curso gratuito de aprendizado de máquina no Coursera é muito bom. Recomendo fortemente que você comece aqui. Qualquer pessoa com um diploma em ciência da computação e um pouco de matemática em mente deve entender.

    Além disso, você pode baixar e instalar o SciKit-Learn para testar milhares de algoritmos de aprendizado de máquina. É um framework em Python, com versões de caixa preta para todos os algoritmos padrão.

Transcrição feita pelo desenvolvedor do Python