t-SNE可视化示例

T 分布随机近邻嵌入(T-Distribution Stochastic Neighbour Embedding)是一种用于降维的机器学习方法,它能帮我们识别相关联的模式。t-SNE 主要的优势就是保持局部结构的能力。这意味着高维数据空间中距离相近的点投影到低维中仍然相近。t-SNE 同样能生成漂亮的可视化。

理论方面可查看Hinton 在 2008 年发表的论文:《Visualizing Data using t-SNE》

http://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf

我的理解是:高位空间和低维空间理论上相似性应该得到保留,为了让低维空间近似于高位空间的距离,通过概率分布来建模点与点之间的关系,然后利用高位空间和低维空间的同样分布,用KL散度作为loss来训练,使低维空间最大近似保留高位空间的距离。

SKLearn 代码如下:https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html

#visualize : t-SNE
from sklearn.manifold import TSNE
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.patheffects as PathEffects
import random
def scatter(X, y):
    #X,y:numpy-array
    classes = len(list(set(y.tolist())))#get number of classes
    #palette = np.array(sns.color_palette("hls", classes))# choose a color palette with seaborn.
    color = ['c','y','m','b','g','r']
    marker = ['o','x','+','*','s']
    plt.figure(figsize=(8,8))#create a plot
    for i in range(classes):
        plt.scatter(X[y == i,0], X[y == i,1], c=color[i], marker=marker[i], label=str(i))
    plt.axis('off')
    plt.legend(loc='lower left')
    #plt.savefig('digits_tsne-generated.png', dpi=100)
    plt.show()

#prepare data,classes=5
idx= random.sample(np.where(np.array(teY)==0)[0].tolist(),100)
X0= np.array(teF)[idx]
y0= np.array(teY)[idx]

idx= random.sample(np.where(np.array(teY)==1)[0].tolist(),100)
X1= np.array(teF)[idx]
y1= np.array(teY)[idx]

idx= random.sample(np.where(np.array(teY)==2)[0].tolist(),100)
X2= np.array(teF)[idx]
y2= np.array(teY)[idx]

idx= random.sample(np.where(np.array(teY)==3)[0].tolist(),100)
X3= np.array(teF)[idx]
y3= np.array(teY)[idx]

idx= np.where(np.array(teY)==4)[0].tolist()
X4= np.array(teF)[idx]
y4= np.array(teY)[idx]

y = np.append(y0,y1)
y = np.append(y,y2)
y = np.append(y,y3)
y = np.append(y,y4)
X = np.vstack((X0,X1))
X = np.vstack((X,X2))
X = np.vstack((X,X3))
X = np.vstack((X,X4))
#training t-sne 
tsne = TSNE(n_components=2, init='pca', random_state=501)
X_tsne = tsne.fit_transform(X)
print("Org data dimension is {}.Embedded data dimension is {}".format(X.shape[-1], X_tsne.shape[-1]))

#visualize
scatter(X_tsne, y)

可见分类模型的效果不是很好。 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值