Implementazione di un algoritmo di apprendimento automatico per rilevare la regione di un indirizzo

4

Ho 10.000 indirizzi da una città, che hanno tutti un campo regione nel database. Quando viene inserito un nuovo indirizzo, desidero che il mio software rilevi automaticamente la regione dell'indirizzo.

Penso che dovrebbe essere implementato con una sorta di algoritmo di machine learning. Come posso fare questo?

E con ogni nuovo indirizzo inserito, la macchina dovrebbe imparare a rilevare la regione del nuovo indirizzo. Esiste una libreria per algoritmi di machine learning (come aforge.net per le reti neurali)?

    
posta M-Razavi 16.08.2011 - 09:17
fonte

4 risposte

3

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

No

How can I do this?

Usa uno shapefile con polilinee delle regioni (sono più o meno file pieni di coppie di coordinate con un po 'di metadati associati). Utilizza qualcosa come API di geocodifica di Google Maps per geocodificare l'indirizzo (invii un indirizzo e invia indietro una coppia di coordinate). Scrivi un semplice algrithm * per determinare quale poligono dallo shapefile le coordinate geocodiche si trovano all'interno. Puoi trovare shapefile su tutto il web, in particolare da agenzie governative come NOAA. L'USGS ha anche una discreta raccolta . Credo che questo risolva il problema senza infrangere nessuna delle leggi della robotica, quindi non mi preoccuperei nemmeno di una soluzione orientata all'IA. :)

* Vorrei iniziare qui per un buon riferimento per iniziare. Inoltre, non dimenticare che la terra è curvata, quindi i calcoli delle distanze funzionano un po 'diversamente rispetto a un piano piano (pensa ai radianti).

    
risposta data 16.08.2011 - 22:01
fonte
11

Penso che esistano regole chiare su come le città vengono suddivise in quartieri o regioni. Dovresti chiedere all'amministrazione locale dove disegnano i confini. Quindi, ad esempio, è possibile recuperare i dati di posizione dell'indirizzo (latitudine e longitudine potrebbero funzionare) e controllare semplicemente in quali confini della regione si trova questo indirizzo. Non è necessario un algoritmo di apprendimento per questo problema.

Tuttavia, se non è possibile acquisire i dati di confine per le partizioni, proverei a trovare la regione nota più vicina, probabilmente in base alla distanza. Di nuovo, non vedo alcun senso in un algoritmo in evoluzione o in qualche tipo di intelligenza artificiale qui. O è possibile determinare la regione in modo deterministico mediante limiti noti o provare a trovare la regione nota più vicina. L'intelligenza artificiale è un'impresa eccessiva per un simile compito. Dovresti ricalcolare costantemente i confini iniziali della regione inizialmente valutati e valutarli, quindi aggiornare gli indirizzi esistenti di cui la regione è nota per essere incerta. Inoltre, dovresti alimentare costantemente il sistema con gli indirizzi di cui è nota la regione per verificare le regioni incerte.

Tuttavia, poiché è improbabile che le regioni cambino i loro confini, proverei semplicemente ad ottenere i limiti, come detto sopra, dall'amministrazione locale.

    
risposta data 16.08.2011 - 09:44
fonte
3

Se i tuoi indirizzi sono mal formati, come questo estremo esempio:

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

Suggerirei di esaminare un toolkit di elaborazione del linguaggio naturale come OpenNLP . Quindi, potresti creare un corpus di questi indirizzi mal formati e addestrare l'algoritmo sul corpus.

Ma nella maggior parte dei casi, Falcon ha ragione e non è necessario coinvolgere l'intelligenza artificiale.

    
risposta data 16.08.2011 - 21:31
fonte
1

Stai cercando di classificare gli indirizzi e associare i gruppi di classificazione alle regioni.

Potresti versare i tuoi 10.000 indirizzi + regioni in una foresta casuale. O costruisci diversi per un ensemble. Il trucco sarebbe come costruire gli input: potresti dover usare un approccio "word bag", con un booleano per ogni nome di strada e alcuni campi per i valori discreti come l'indirizzo. Questo sarebbe un grande input, ma va bene; a volte le funzionalità di un set di allenamento possono essere eseguite in migliaia (o più).

Dividi i tuoi dati in set di allenamento / test, però. Versare 9.000 degli indirizzi nella foresta casuale, quindi utilizzare gli altri 1.000 per testarlo e vedere quale percentuale di precisione si ottiene. Ci sono molti modi per dividerlo, ma è un buon inizio.

In Python, scikit-learn è sempre una buona scelta. sci-kit learn avrà altri schemi di classificazione che potrebbero essere anche migliori della foresta casuale per questo compito.

    
risposta data 05.03.2014 - 03:31
fonte