web-dev-qa-db-ja.com

カスタムメトリックを使用したDBSCAN

私は次のことを与えました:

  • 数千の範囲のデータセット

  • 類似性を計算する方法ですが、データポイント自体はユークリッド空間にプロットできません

DBSCANがカスタム距離メトリックをサポートする必要があることは知っていますが、その使用方法がわかりません。

私には機能があると言う

def similarity(x,y):
    return  similarity ... 

その関数にペアごとに渡すことができるデータのリストがありますが、scikit-learnのDBSCAN実装を使用するときにこれを指定するにはどうすればよいですか?

理想的には、クラスターのリストを取得することですが、そもそも開始方法がわかりません。

まだ私を混乱させる多くの用語があります:

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

機能配列を渡すにはどうすればよいですか?それは何ですか?この実装を自分のニーズに合わせるにはどうすればよいですか?このアルゴリズムから「サブリスト」を取得するにはどうすればよいですか?

10
zython

「機能配列」は、データセット内のデータポイントの機能の配列です。

metricはあなたが探しているパラメータです。文字列(組み込みメトリックの名前)、または 呼び出し可能 にすることができます。 similarity関数は呼び出し可能です。これはドキュメントでは十分に説明されていませんが、メトリックはそれを実行し、2つのデータポイントをパラメーターとして受け取り、数値を返す必要があります。

def similarity(x, y):
    return ...

reduced_dataset = sklearn.cluster.DBSCAN(metric=similarity).fit(dataset)
8
j4nw

誰かがカスタムメトリックで文字列を同じように検索している場合

    def metric(x, y):
        return yourDistFunc(string_seqs[int(x[0])],string_seqs[int(y[0])])
    def clusterPockets():          
        global string_seqs
        string_seqs = load_data() #["foo","bar"...]
        dat = np.arange(len(string_seqs)).reshape(-1, 1)
        clustered_dataset = DBSCAN(metric=metric)).fit(X=dat, y=dat)
1
maniac