我目前正在研究使用t-SNE进行高维数据的可视化。我有一些包含二进制和连续变量混合的数据,并且数据似乎很容易将二进制数据聚类。当然,这是按比例缩放(介于0和1之间)数据的预期:二进制变量之间的Euclidian距离将始终最大/最小。如何使用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之前将其删除,这将是一个遗憾,因为这些特征可能包含用于生成聚类的有用信息。