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