web-dev-qa-db-ja.com

住所の領域を検出するための機械学習アルゴリズムの実装

私は都市から10,000の住所を持っていますが、それらはすべてデータベースに地域フィールドがあります。新しい住所を入力したら、ソフトウェアで住所の地域を自動的に検出してください。

ある種の機械学習アルゴリズムで実装する必要があると思います。これどうやってするの?

そして、新しく挿入されたアドレスごとに、マシンは新しいアドレスの領域を検出することを学習する必要があります。機械学習アルゴリズム用のライブラリ(ニューラルネットワーク用のaforge.netなど)はありますか?

4
M-Razavi

ある種の機械学習アルゴリズムで実装する必要があると思います。

いいえ

これどうやってするの?

領域のポリラインを含むシェープファイルを使用します(これらは、メタデータが少し関連付けられた座標ペアでいっぱいのファイルです)。 Google Maps Geocoding API のようなものを使用して、住所をジオコーディングします(住所を送信すると、座標ペアが返されます)。単純なアルゴリズム*を記述して、ジオコーディングされた座標がシェープファイルのどのポリゴン内にあるかを判別します。特にNOAAなどの政府機関のWeb全体でシェープファイルを見つけることができます。 USGSにもまともな collection があります。これでロボットの法則を破ることなく問題が解決すると思うので、AI指向の解決策に煩わされることすらありません。 :)

*私は ここ から始めます。また、地球が湾曲していることを忘れないでください。距離の計算は、平面の場合とは少し異なります(ラジアンを考えてください)。

3

都市を地区または地域に分割する方法には明確なルールがあると思います。どこに国境を引くかについては、地方自治体に尋ねる必要があります。次に、たとえば、住所の位置データを取得し(緯度と経度が機能する場合があります)、この住所がどの地域の境界にあるかを確認します。この問題の学習アルゴリズムは必要ありません。

ただし、パーティションの境界データを取得できない場合は、おそらく距離によって、最も近い既知の領域を見つけようとします。ここでも、進化するアルゴリズムやある種のAIには意味がありません。既知の境界によって領域を決定論的に決定するか、最も近い既知の領域を見つけようとすることができます。 AIは、そのようなタスクのやりすぎに似ています。最初に推測された地域の境界を常に再計算して評価し、地域が不明であることがわかっている既存のアドレスを更新する必要があります。また、不確実な地域を検証するために、その地域が知られているアドレスをシステムに絶えず供給する必要があります。

しかし、地域が国境を変える可能性は非常に低いので、私は上記のように地方自治体から国境を取得しようとしています。

11
Falcon

この極端な例のように、アドレスの形式が不十分な場合:

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

OpenNLP のような自然言語処理ツールキットを調べることをお勧めします。次に、これらの不適切な形式のアドレスのコーパスを構築し、コーパスでアルゴリズムをトレーニングできます。

しかし、ほとんどの場合、Falconは正しいので、AIを関与させる必要はありません。

3
CamelBlues

アドレスを分類し、分類グループを地域に関連付けようとしています。

10,000のアドレス+リージョンをランダムなフォレストに注ぐことができます。または、アンサンブル用にいくつかビルドします。秘訣は、入力を作成する方法です。「ワードバッグ」アプローチを使用する必要がある場合があります。各通りの名前にブール値を使用し、通りの住所などの目立たない値にいくつかのフィールドを使用します。それは大きなインプットになるでしょうが、それは問題ありません。トレーニングセットの機能が数千(またはそれ以上)に達する場合があります。

ただし、データをトレーニング/テストセットに分割します。 9,000個のアドレスをランダムフォレストに注ぎ、残りの1,000個を使用してテストし、得られる精度を確認します。それを分割するためのより素晴らしい方法がありますが、それは良いスタートです。

Pythonでは、scikit-learnは常に良い選択です。 sci-kit learnには、このタスクのためにランダムフォレストよりも優れている可能性のある他の分類スキーマがあります。

1
Rob