我目前正在研究使用 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
所以我的原始数据是:
其中颜色是第三个特征 (x3) 的值 - 在 3D 中,数据点位于两个平面中(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 之前放弃它们,这将是一种耻辱,因为这些特征可能包含用于生成集群的有用信息。