0

一連の消費者データに対してクラスタリング アルゴリズムを実行する必要がありますが、テキスト ベースのフィールドを処理する方法がわかりません (SE1 8XR などの英数字の郵便番号が最適な例です)。

どうやら私が使用する必要があるのは文字列カーネルです。基本的な考え方は理解していますが、うまく実装するには十分ではありません。

理想的には、新しい数値ベクトルで、2 つの郵便番号が似ていないほどデータ ポイントが離れているという考えをエンコードしたいと考えていますが、これを行う方法がわからず、有用な 1 つを見つけることができませんでしたチュートリアル、ガイド、または教科書!

また、誰かが知っている便利なライブラリがある場合に備えて、Pythonでこれを行っています。

4

1 に答える 1

2

再郵便番号

郵便番号を文字列として比較することはできません。「AL1 1AA」はセントオールバンズ、「AB1 1AA」はアバディーンです。編集距離は非常に近いですが、CR6 7DX はセント オールバンズに近いです :)

あなたの最善のアプローチは、おそらく郵便番号を取るhttp://www.ordnancesurvey.co.uk/oswebsite/products/os-opendata.htmlから、またはたとえば、少なくともセクター 'AL1 1' (場合によっては地区 'AL1') を取得し、それを緯度/経度にマップし、それを使用してデータをバケット化します。

その他の弦

考えられるオプションの 1 つdifflib.SequenceMatcherは、2 つの文字列が互いにどの程度類似しているかのパーセンテージ スコアを返すものを使用することです (他にもたくさんのアルゴリズムがあります: Google の「遺伝的文字列アルゴリズム」、「ファジー文字列マッチング」、「文字列類似性アルゴリズム」など)。 ...)。互いに (おそらく) 80% 類似しているすべての文字列をグループ化し、それらをグループに割り当てます。次に、そのグループにクラスター化します。

ntlk要件とデータの複雑さによっては、metaphone と double metaphone (および場合によっては ) が役立つ場合もあります。

于 2012-07-16T14:14:50.520 に答える