Implementando um algoritmo de aprendizado de máquina para detectar a região de um endereço

4

Eu tenho 10.000 endereços de uma cidade, todos com um campo de região no banco de dados. Quando um novo endereço é inserido, quero que meu software detecte automaticamente a região do endereço.

Eu acho que deve ser implementado com algum tipo de algoritmo de aprendizado de máquina. Como posso fazer isso?

E a cada endereço recém-inserido, a máquina deve aprender a detectar a região do novo endereço. Existe alguma biblioteca para algoritmos de aprendizado de máquina (como o aforge.net para redes neurais)?

    
por M-Razavi 16.08.2011 / 09:17
fonte

4 respostas

3

I think it should be implemented with some sort of machine learning algorithm.

Não

How can I do this?

Use um shapefile com polilinhas das regiões (são mais ou menos arquivos cheios de pares de coordenadas com um pouco de metadados associados). Use algo como a API de geocodificação do Google Maps para codificar geograficamente o endereço (você envia um endereço e envia de volta um par de coordenadas). Escreva um simples algoritmo * para determinar em qual polígono do arquivo de forma as coordenadas geocodificadas se encontram. Você pode encontrar shapefiles em toda a web, especialmente de agências governamentais como a NOAA. O USGS também tem uma coleção decente. Eu acredito que isso resolve o problema sem quebrar nenhuma das leis da robótica, então eu nem sequer me preocuparia com uma solução orientada por IA. :)

* Gostaria de começar aqui para uma boa referência para você começar. Além disso, não se esqueça de que a Terra é curva, então os cálculos de distância funcionam um pouco diferentes do que no plano plano (pense em radianos).

    
por 16.08.2011 / 22:01
fonte
11

Acho que existem regras claras sobre como as cidades são divididas em trimestres ou regiões. Você deve perguntar à sua administração local onde eles desenham as fronteiras. Então você poderia, por exemplo, recuperar os dados de localização do endereço (latitude e longitude podem funcionar) e simplesmente verificar em quais limites da região este endereço está. Não há necessidade de um algoritmo de aprendizado para este problema.

No entanto, se você não conseguir adquirir os dados de limite para as partições, tente localizar a região conhecida mais próxima, provavelmente por distância. Mais uma vez, não vejo sentido em um algoritmo em evolução ou em algum tipo de IA aqui. Você pode determinar a região deterministicamente por limites conhecidos ou pode tentar encontrar a região conhecida mais próxima. A IA é um exagero para tal tarefa. Você teria que recalcular constantemente os limites da região adivinhados inicialmente e avaliá-los e atualizar os endereços existentes dos quais a região é conhecida como incerta. Além disso, você teria que alimentar o sistema constantemente com endereços dos quais a região é conhecida para verificar regiões incertas.

Mas como regiões são muito improváveis de mudar suas fronteiras, eu apenas tentaria obter os limites, como dito acima, da administração local.

    
por 16.08.2011 / 09:44
fonte
3

Se seus endereços estiverem mal formados, como este exemplo extremo:

    John Q. Public
    Lives on the coner of west and main
    The city 20 miles east of New York.. Sally is the mayor

Eu gostaria de sugerir a análise de um kit de ferramentas de processamento de linguagem natural, como o OpenNLP . Então, você poderia construir um corpus desses endereços mal formados e treinar o algoritmo no corpus.

Mas na maioria dos casos, Falcon está certo, e não há necessidade de envolver AI.

    
por 16.08.2011 / 21:31
fonte
1

Você está tentando classificar os endereços e associar os grupos de classificação às regiões.

Você poderia colocar seus 10.000 endereços + regiões em uma floresta aleatória. Ou construa vários para um conjunto. O truque seria como construir as entradas: você pode ter que usar uma abordagem de "word bag", com um booleano para cada nome de rua e alguns campos para os valores discretos, como endereço de rua. Isso seria uma grande contribuição, mas tudo bem; Às vezes, os recursos de um conjunto de treinamento podem chegar aos milhares (ou mais).

Divida seus dados em conjuntos de treinamento / teste, no entanto. Despeje 9.000 dos endereços na floresta aleatória, depois use os outros 1.000 para testá-lo e veja qual é a precisão percentual que você obtém. Existem formas mais extravagantes de dividir, mas é um bom começo.

No Python, o scikit-learn é sempre uma boa escolha. sci-kit learn terá outros esquemas de classificação que podem ser ainda melhores que a floresta aleatória para esta tarefa.

    
por 05.03.2014 / 03:31
fonte