DBSCANを使用して私のポイントのほとんどがノイズとして分類されるのはなぜですか?


7

一部のデータをクラスター化するためにsklearnのいくつかのクラスター化アルゴリズムを使用していますが、DBSCANで何が起こっているのか理解できません。私のデータはTfidfVectorizerからのドキュメントタームマトリックスで、数百の前処理されたドキュメントが含まれています。

コード:

tfv = TfidfVectorizer(stop_words=STOP_WORDS, tokenizer=StemTokenizer())
data = tfv.fit_transform(dataset)

db = DBSCAN(eps=eps, min_samples=min_samples)
result = db.fit_predict(data)
svd = TruncatedSVD(n_components=2).fit_transform(data)
// Set the colour of noise pts to black
for i in range(0,len(result)):
        if result[i] == -1:
            result[i] = 7
colors = [LABELS[l] for l in result]
pl.scatter(svd[:,0], svd[:,1], c=colors, s=50, linewidths=0.5, alpha=0.7)

eps = 0.5、min_samples = 5の場合、次のようになります。

基本的に、min_samplesを3に設定しない限り、クラスターをまったく取得できません。

私はeps / min_samples値のさまざまな組み合わせを試して、同様の結果を得ました。常に最初に低密度の領域をクラスター化するようです。なぜこのようにクラスタリングするのですか?TruncatedSVDを誤って使用しているのでしょうか?


Cross Validatedへようこそ!ツアーをご覧ください。
Tavrock 2017年

散布図は傾向を示していませんが、分散が一定でない可能性があります。
マイケルR.シェニック2017年

1
@MichaelChernick:このコメントは見当違いのようです。トレンドとはどういう意味ですか?このクラスタリングアプリケーションでなぜそれを気にするのですか?どちらかと言えば、最初の2つのPCスコアの分散は、1つの明らかなクラスターを示しています。DBSCANは...クラスタの分散またはそのようなものの中に検査しない
usεr11852

2
ここでは、ユークリッド距離ではなくコサイン距離を指定したDBSCANを使用する必要があることに注意してください。
QUITあり-Anony-Mousse 2017年

回答:


5

元のTFIDFデータのSVD投影スコアの散布図は、実際にいくつかの密度構造を検出する必要があることを示唆しています。それにもかかわらず、これらのデータはDBSCANが提示される入力ではありません。元のTFIDFデータを入力として使用しているようです。

元のTFIDFデータセットがスパースで高次元であることは非常にもっともらしいことです。このようなドメインで密度ベースのクラスターを検出することは、非常に困難です。高次元の密度推定は、適切に難しい問題です。これは、次元の呪いが始まる典型的なシナリオです。この問題(「呪い」)の兆候が見られるだけです。DBSCANによって返された結果のクラスタリング自体はまばらで、手元のデータが異常値に満ちていると(おそらく誤って)想定しています。

少なくとも最初は、DBSCANには、入力として示される散布図の作成に使用される投影スコアが提供されていることをお勧めします。このアプローチは事実上、潜在的意味分析(LSA)になります。LSAでは、分析されたテキストコーパスの単語数を含む行列(またはTFIDFによって返されるものとして正規化された用語文書行列)のSVD分解を使用して、手元のコーパスのテキスト単位間の関係を調査します。


そして@Tavrockが言ったようにコミュニティへようこそ!:D
usεr11852

はい、元のTFIDFデータを使用していました。DBSCANのクラスターは、R​​で同じデータを使用してこれを試すと妥当なように見えるので、sklearnを使用した場合と大きく異なるとは思いませんでした。K平均法(sklearnを使用)もTFIDFデータで正常に機能します。それがこれらの他のもので機能するが、この特定のDBSCAN実装では機能しないことは理にかなっていますか?LSAに関する情報をありがとうございます。ただし、モデルのフィッティングとTFIDFデータの使用にSVD値を使用することがいつ有効であるかは、まったくわかりませんでした。
フィラメント

助かります。この投稿があなたの質問に答えると信じているなら、あなたは答えを受け入れることを検討することができます。k-手段(おそらく)はクラスタリングを見つけることができました。 ε-そのクラスターの半径に対するDBSCANのような要素。ただし、クラスタリングが賢明であるとは限りません。sklearnのPython DBSCAN実装を使用していないため、その品質についてコメントすることはできません。ただし、一部の実装ではデフォルトの前処理手順を実行する場合があり、適用すると誤ってパフォーマンスに影響を与える場合があります。
usεr11852
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.