連続変数とバイナリ変数が混在するt-SNE


10

現在、t-SNEを使用した高次元データの可視化について調査しています。バイナリ変数と連続変数が混在しているデータがあり、そのデータはバイナリデータを非常に簡単にクラスター化しているようです。もちろん、これはスケーリングされた(0と1の間の)データの場合に予想されます。ユークリッド距離は、バイナリ変数間で常に最大/最小になります。t-SNEを使用して混合バイナリ/連続データセットをどのように処理する必要がありますか?バイナリ列を削除する必要がありますか?metric使用できる別のものはありますか?

例として、次のpythonコードを考えます。

x1 = np.random.rand(200)
x2 = np.random.rand(200)
x3 = np.r_[np.ones(100), np.zeros(100)]

X = np.c_[x1, x2, x3]

# plot of the original data
plt.scatter(x1, x2, c=x3)
# … format graph

だから私の生データは:

生データ

ここで、色は3番目のフィーチャ(x3)の値です。3Dでは、データポイントは2つの平面(x3 = 0平面とx3 = 1平面)にあります。

次に、t-SNEを実行します。

tsne = TSNE() # sci-kit learn implementation
X_transformed = StandardScaler().fit_transform(X)
tsne = TSNE(n_components=2, perplexity=5)
X_embedded = tsne.fit_transform(X_transformed)

結果のプロット:

tsne_data

もちろん、データはx3によってクラスター化されています。私の直感は、距離メトリックがバイナリ機能に対して適切に定義されていないため、t-SNEを実行する前にそれらを削除する必要があるということです。


1
注:これについてのコメントや、この分野へのUMAPの適用可能性についての意見を聞きたいと思っています。
FChm 2019年

賞金をありがとう、再び興味はありますが、公平にするためにこれを検討するのに多くの時間を費やしていません。本日は、初期調査を行う時間があり、該当する場合は更新を追加します。
FChm

2
実際にこの問題に遭遇しました。これはtSNEに固有のものではないと思いますが、距離ベースの教師なし学習アルゴリズム(クラスタリングを含む)にも同様に影響します。また、適切な解決策は、バイナリ機能が何を表しているか、およびそれらがどれほど重要であるかについての専門家の判断に強く依存すると思います。だから私は、さまざまな可能性のある状況を議論する答えを探しています。ここには万能のソリューションはないはずです。
アメーバ

回答:


8

免責事項:私はこのトピックに関する接線の知識しか持っていませんが、他に誰も答えていないので、私はそれを試してみます

距離は重要です

距離に基づく次元削減手法(tSNE、UMAP、MDS、PCoAなど)は、使用する距離メトリックと同じ程度の効果しかありません。@amoebaが正しく指摘しているように、万能のソリューションはあり得ません。データで重要と見なすものをキャプチャする距離メトリックが必要です。別の距離が大きいと考えてください。

どのようにして適切な距離メトリックを選択しますか?まず、少し流用させてください。

叙階

現代の機械学習の栄光の日々のかなり前に、コミュニティの生態学者(そしておそらく他の人も)は、多次元データの探索的分析のための素晴らしいプロットを作成しようとしました。彼らはプロセスの序列と呼んでおり、少なくとも70年代にさかのぼり、今日でも依然として強い生態学文献で検索することは有用なキーワードです。

重要なことは、生態学者は非常に多様なデータセットを持ち、バイナリ、整数、および実数値の特徴(たとえば、種の存在/不在、観察された標本の数、pH、温度)の混合物を扱うことです。彼らは多くの時間を費やして距離と変換を考え、序列をうまく機能させてきました。私はこの分野をよく理解していませんが、たとえば、コミュニティデータの分散としてのルジャンドルとデカセレスベータの多様性によるレビュー:非類似度係数と分割は、チェックしたい可能性のある距離の圧倒的な数を示しています。

多次元スケーリング

序列化の主なツールは、多次元スケーリング(MDS)、特にt-SNEに加えて試すことをお勧めする非メトリックバリアント(NMDS)です。私はPythonの世界については知りませんmetaMDSが、veganパッケージの機能でのRの実装は多くのトリックを実行します(たとえば、類似する2つが見つかるまで複数の実行を実行します)。

これは議論の余地があります。コメントを参照してください。MDSの良い点は、機能(列)も投影されるため、次元削減を促進する機能を確認できることです。これは、データを解釈するのに役立ちます。

t-SNEは理解を引き出すためのツールとして批判されていることを覚えておいてください。たとえば、この落とし穴の調査を参照してください。UMAPはいくつかの問題を解決すると聞きましたが、UMAPの経験はありません。私はまた、生態学者がNMDSを文化と慣性である理由の一部に疑いはありません。おそらくUMAPまたはt-SNEが実際に優れています。正直わからない。

自分の距離を広げる

[0,1] フィーチャの数に関係なく、ユークリッド距離の大きさはフィーチャの数を反映します。

注意の言葉

調整するノブが非常に多いので、見たいものが見つかるまで簡単に調整の罠に陥る可能性があることを常に心に留めておく必要があります。これを探索的分析で完全に回避することは困難ですが、注意する必要があります。


1
+1。ここには多くの良い点があり、私は古い「統制」文献への参照を気に入っています。私の注意を引いたことの1つ:「MDSの良い点は、機能(列)も投影するので、どの機能が次元削減を促進するかを確認できることです」-それでよろしいですか?私が理解している限り、それは真実ではありません。少なくとも、t-SNEよりもMDSの方がそうではありません。
アメーバ

@amoebaここに私の限られた知識が入ります:-)私が知っているのは、metaMDSサンプルと機能の両方をプロットするためのデフォルトのプロット方法です(たとえば、このビネットを参照してください:cran.r-project.org/web/packages/vegan/vignettes/ intro-vegan.pdf
MartinModrák19年

あなたの答えと洞察をありがとう。今はUMAPにさらに焦点を当てています。Jaccard距離のようないくつかの類似性測定値を定義することは、混合変数型を処理するための良い方法だと思います。MDSは使用していませんが、認識しています。それが有用である場合、私は理解に少し時間を費やす必要があります。
FChm

1
@MartinModrák veganパッケージがそこで何をしているのか正確にはわかりませんが、MDS / NMDSは非線形でノンパラメトリックな方法(厳密にはt-SNE)であり、元の機能をMDSディメンションに一致させる「内部」方法はありません。元の機能とMDSディメンション間の相関を計算していると想像できます。もしそうなら、これはt-SNEを含むあらゆる埋め込みに対して行うことができます。正確に何が行われるかを知るのは興味深いでしょうvegan
アメーバ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.