Quando você ouve falar sobre aprendizado de máquina, você tem uma visão muito vaga do que isso significa? Você está cansado de apenas dar a cara quando está conversando com seus colegas?
Este guia é destinado a todos os amigos que querem saber mais sobre aprendizado de máquina, mas não sabem como começar. Eu acho que muitos de vocês já leram a Wikipedia sobre aprendizado de máquina e ficaram frustrados porque 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?
O conceito de aprendizagem de máquina sugere que você não precisa escrever nenhum código de programação especializado para problemas pendentes, e que algoritmos genéricos são capazes de obter respostas interessantes para você em um conjunto de dados.
Por exemplo, há um algoritmo chamado algoritmo de classificação que pode dividir dados em diferentes grupos. Um algoritmo de classificação usado para reconhecer números escritos à mão pode ser usado para dividir e-mails em spam e e-mail comum sem modificar uma linha de código. O algoritmo não mudou, mas os dados de treinamento introduzidos mudaram, portanto ele produz uma lógica de classificação diferente.
O algoritmo de aprendizagem de máquina é uma caixa negra que pode ser reutilizado para resolver muitos problemas de classificação diferentes.
A aprendizagem automática é um termo abrangente que abrange uma grande quantidade de algoritmos genéticos semelhantes.
Você pode pensar que os algoritmos de aprendizagem de máquina são divididos em duas grandes categorias: aprendizagem supervisionada e aprendizagem não supervisionada.
Suponha que você seja um corretor imobiliário e que o seu negócio seja cada vez maior, então você contrata um grupo de estagiários para ajudá-lo.
Para ajudar o seu estagiário (talvez para libertar-se para ir de férias), você decide escrever um pequeno software que pode avaliar o valor de uma casa na sua região com base em fatores como o tamanho da casa, o local e o preço de venda de casas semelhantes.
Você escreveu todos os negócios de casas na cidade durante os últimos três meses, cada um com uma longa série de detalhes: número de quartos, tamanho da casa, terreno, etc. Mas o mais importante é que você escreveu o preço final:
Este é o nosso banco de dados de treinamento de yoga.
A partir desses dados de treinamento, vamos escrever um programa para estimar o valor de outras casas na região:
Isso é chamado de aprendizagem supervisionada. Você já sabe o preço de venda de cada casa, em outras palavras, 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 dados de treinamento de cada conjunto de propriedades em seu algoritmo de aprendizagem de máquina. O algoritmo tenta descobrir quais operações devem ser usadas para extrair números de preço.
É como se fosse um exercício de matemática, e todos os símbolos de operação da fórmula foram apagados:
Meu Deus! Um aluno malicioso apagou o símbolo de matemática da resposta do professor.
Depois de ver essas questões, você consegue entender que tipo de problemas matemáticos estão nesses testes? Você sabe o que você deve fazer com a linha de números do lado esquerdo do cálculo para obter a resposta do lado direito do cálculo.
Na aprendizagem supervisionada, você está deixando o computador calcular as relações entre os números para você; e uma vez que você sabe o método matemático necessário para resolver esse tipo de problema específico, você pode resolver outros problemas do mesmo tipo.
Vamos voltar ao exemplo do corretor de imóveis no início. Se você não sabe o que é o preço de venda de cada casa, você pode fazer uma coisa muito legal, mesmo que você saiba apenas o tamanho e a localização da casa. Isso é chamado de aprendizagem não supervisionada.
Mesmo que você não esteja tentando prever dados desconhecidos (como preços), você pode usar o aprendizado de máquina para fazer algo interessante.
É como se alguém lhe desse um pedaço de papel com uma lista de números e dissesse: "Não sei o que estes números significam, mas talvez consiga encontrar uma regra, ou classificar, ou algo do género - boa sorte!"
O que você faz com esses dados? Primeiro, você pode usar um algoritmo para segmentar automaticamente os diferentes segmentos de mercado a partir dos dados. Talvez você descubra que os compradores de casas perto da universidade preferem casas pequenas, mas com muitos quartos, enquanto os compradores de casas nos subúrbios preferem casas grandes, com três quartos.
Você também pode fazer uma coisa muito legal: encontrar automaticamente os dados de preços de apartamentos, ou seja, os valores que diferem dos outros dados. As propriedades desses grupos de imóveis podem ser prédios altos, e você pode concentrar os melhores vendedores nessas áreas, porque suas comissões são maiores.
No restante deste artigo, vamos falar principalmente sobre aprendizagem supervisionada, mas não é porque a aprendizagem não supervisionada seja inútil ou simplesmente insípida. Na verdade, a aprendizagem não supervisionada está se tornando cada vez mais importante à medida que os algoritmos melhoram e não há necessidade de associar dados com respostas corretas.
Há muitos outros tipos de algoritmos de aprendizagem de máquina.
Isso é muito legal, mas avaliar o preço da casa pode realmente ser visto como uma lição de vida?
Como um ser humano, seu cérebro pode lidar com a maioria das situações e não tem instruções claras para aprender a lidar com elas. Se você é um corretor de imóveis há muito tempo, você tem um senso instintivo do preço apropriado da propriedade, como é melhor comercializá-la e quais clientes estarão interessados, etc. O objetivo do estudo da IA forte é ser capaz de copiar essa capacidade com computadores.
Mas os algoritmos de aprendizagem de máquina atuais não são tão bons que possam se concentrar apenas em problemas muito específicos e limitados. Talvez, nesse caso, a definição mais apropriada de aprendizagem 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 filtragem encontrou uma equação para resolver um problema específico com base em um pequeno número de dados de exemplo.
Claro, se você estiver lendo este artigo daqui a 50 anos, então já temos algoritmos de inteligência artificial poderosos, e este artigo parece um antigo.
Vamos escrever um código!
Como você vai escrever o processo para avaliar o preço de um imóvel no exemplo anterior?
Se você não sabe nada de aprendizado de máquina, é provável que você tente 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ê ficar assim por algumas horas, talvez tenha algum resultado, mas seu programa nunca será perfeito e será difícil de manter quando os preços mudarem.
Não seria melhor se o computador pudesse descobrir 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 um imóvel como se fosse uma tigela de um delicioso molho, e os ingredientes da tigela são o número de quartos, a área e o terreno. Se você puder calcular a influência de cada ingrediente no preço final, talvez você possa obter uma proporção específica dos ingredientes misturados para formar o preço final.
Isso pode simplificar o seu programa inicial (todos são frenéticos if-else sentenças) para algo como:
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
Atenção para os números mágicos que são marcados em grosso. 841231951398213, 1231.1231231, 2.3242341421, e 201.23432095. Eles são chamados de pesos. Se pudéssemos descobrir o peso perfeito para cada casa, nossa função poderia prever todos os preços!
Uma das maneiras mais fáceis de encontrar o peso ideal é a seguinte:
Passo 1:
Em primeiro lugar, cada peso é definido em 1.0:
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 2:
Traga cada imóvel para a sua função de cálculo e verifique o grau de desvio entre o valor estimado e o preço correto:
Use o seu programa para prever preços de casas.
Por exemplo: o primeiro conjunto de imóveis na tabela acima tem um preço de transação real de US $ 250.000, e sua avaliação funcional é de US $ 178.000, o que significa que você está 72.000 abaixo desse conjunto de imóveis.
Em seguida, subtraia o quadrado do desvio de valor de estimativa de cada conjunto de propriedades do seu conjunto de dados. Suponha que o conjunto de dados tenha 500 transações de propriedades, com o desvio de valor de estimativa do quadrado de estimativa somando US $ 86,123,373.
Agora, divida o total pelo 500 para obter o desvio médio da estimativa de cada conjunto de imóveis. Chame esse valor de erro médio de custo da sua função.
Se você puder ajustar o peso para que esse custo seja zero, sua função é perfeita. Isso significa que seu programa avalia cada transação imobiliária de acordo com os dados inseridos.
Passo 3:
Repita o passo 2 e tente todas as combinações possíveis de valores de peso. Qual é a combinação que mais aproxima o custo de zero, é o que você vai usar, e assim que encontrar essa combinação, o problema será resolvido!
A mente perturba o tempo
É muito simples, não é? Pense no que você acabou de fazer. Você obtém alguns dados e os insere em três passos simples e comuns, e finalmente você tem uma função que pode avaliar a casa na sua área. Mas os seguintes fatos podem perturbar sua mente:
1. Durante os últimos 40 anos, estudos em muitos campos (como linguística/tradução) mostraram que este algoritmo de aprendizagem de dados vibrantes (a palavra que eu criei) superou o método que requer regras claras de pessoas reais.
2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。
3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。
4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!
É muito louco, não é?
O que acontece quando o mouse no passo 3 tenta cada um dos números?
Bem, é claro que você não pode tentar todos os valores de peso possíveis para encontrar a melhor combinação de resultados. Isso pode demorar muito, porque os números para tentar podem ser infinitos. Para evitar isso, os matemáticos encontraram muitas maneiras inteligentes de encontrar rapidamente valores de peso excelentes sem muito esforço. Aqui está uma delas: Primeiro, escreva uma equação simples que represente o passo 2:
Esta é a sua função de custo.
Em seguida, vamos reescrever o mesmo termo matemático de aprendizagem de máquina para a mesma equação (e agora você pode ignorá-los):
θ representa o valor de peso atual. J ((θ) significa que o valor de peso atual corresponde ao valor de custo de θ.
Esta equação indica o tamanho do desvio do nosso estimador em relação ao valor de peso atual.
Se todos os possíveis valores de peso atribuídos ao número e área de quartos forem mostrados em forma gráfica, obtemos um gráfico semelhante ao seguinte:
O gráfico da função de custo é como uma tigela. O eixo vertical representa o custo.
O ponto mais baixo no gráfico em azul é o ponto de menor custo, o que significa que o nosso programa tem o menor desvio. O ponto mais alto significa o maior desvio. Então, se pudermos encontrar um conjunto de valores de peso que nos levem ao ponto mais baixo do gráfico, temos a resposta!
Portanto, precisamos apenas ajustar a ponderação para que possamos descer o caminho para o ponto mais baixo no gráfico. Se o pequeno ajuste de peso nos mantém movidos para o ponto mais baixo, então, no final, podemos chegar lá sem tentar muito.
Se você se lembra de um pouco de cálculo, talvez se lembre que se você fizer uma consulta sobre uma função, o resultado lhe dirá a inclinação da função em qualquer ponto. Em outras palavras, para um ponto dado no gráfico, ele nos diz que o caminho é descendente. Podemos usar isso para avançar para baixo.
Então, se nós fizermos uma derivação para a função de custo sobre cada peso, então nós podemos subtrair esse valor de cada peso. Isso pode nos levar mais perto do fundo da montanha. Continuando a fazer isso, nós finalmente chegaremos ao fundo e obteremos o valor máximo do peso.
Essa maneira de encontrar o peso ideal é chamada de descida da gradiente de massa, e há uma generalização de altura sobre isso.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/Não, não.
Tudo isso está pronto para você quando você está usando um conjunto de algoritmos de aprendizagem de máquina para resolver problemas reais.
O que é que você acabou de passar por cima?
O algoritmo de três passos que descrevi acima é chamado de regressão multilinear. Você estima a equação buscando uma linha que possa se adequar a todos os pontos de dados de preços de imóveis. Então você usa essa equação para estimar o preço de casas que nunca foram vistas com base no local onde os preços podem aparecer em sua linha.
No entanto, o método que mostrei pode funcionar em situações simples, mas não em todas as situações. Uma das razões é que os preços dos imóveis 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 aprendizado de máquina podem ser tratados (como redes neurais ou vectores nucleares). Há muitas maneiras de usar a regressão linear com mais flexibilidade, pensando em ajustá-la com linhas mais complexas. Em todos os casos, a ideia básica de encontrar o peso de prioridade ainda é válida.
Além disso, eu ignoro o conceito de superajuste. É fácil encontrar um conjunto de ponderações que são perfeitamente previsíveis para os preços de casas no seu conjunto de dados original, mas não para qualquer nova casa fora do conjunto de dados original. Há muitas soluções para isso (como normalizar e usar conjuntos de dados de verificação cruzada).
Em outras palavras, o conceito básico é muito simples e requer algumas habilidades e experiência para usar o aprendizado de máquina para obter resultados úteis.
Uma vez que você começa a entender que a aprendizagem de máquina pode ser facilmente aplicada para resolver problemas aparentemente difíceis (como reconhecimento de escrita), você começa a ter a sensação de que, com dados suficientes, você pode usar a aprendizagem de máquina para resolver qualquer problema. Basta inserir os dados e você verá que as equações que se encaixam encontram-se como se um computador transformasse dados.
Mas é importante lembrar que a aprendizagem de máquina só se aplica a problemas que podem ser resolvidos com os dados que você tem.
Por exemplo, se você construir um modelo para prever o preço de um imóvel com base no número de vassouras em cada casa, ele nunca será bem sucedido. Não há nenhuma relação entre o número de vassouras em casa e o preço do imóvel.
Você só pode modelar relações que realmente existem.
Eu acho que o maior problema com o aprendizado de máquina atual é que ele é mais ativo no mundo acadêmico e em organizações de pesquisa comerciais. Não há muito material de aprendizagem simples e fácil de entender para pessoas fora do círculo que querem ter uma compreensão geral e não para se tornarem especialistas. Mas isso está melhorando a cada dia.
O curso gratuito de aprendizagem de máquina do professor Andrew Ng no Coursera é muito bom. Eu recomendo fortemente que você comece. Qualquer pessoa com um diploma em ciência da computação e um pouco de memória matemática deve entender.
Além disso, você pode baixar e instalar o SciKit-Learn para experimentar milhares de algoritmos de aprendizado de máquina. É um framework Python, com versões de caixa negra para todos os algoritmos padrão.
Traduzido do Python
OcluaquanEste exemplo é repetido pelo professor durante cada aula que começa.
TrensNão deveria ser m no denominador da função de custo?