python-科研绘图系列(5)-用TSNE降维并可视化

1. 用TSNE 降维


import numpy as np
import matplotlib.pyplot as plt
from sklearn import manifold
import  pickle
import time
import pandas as pd

def visual(X):
    tsne = manifold.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]))

    #'''嵌入空间可视化'''
    x_min, x_max = X_tsne.min(0), X_tsne.max(0)
    X_norm = (X_tsne - x_min) / (x_max - x_min)

    return  X_norm
  • n_components=2 控制降维后的维度

  • init=‘pca’ 用PCA 方法降维

  • random_state=501 代表随机种子

  • 输入:需要降维的矩阵 X shape=(m,n) m:代表样本数量,n:代表样本长度

  • 返回:降维后的矩阵X_norm shape=(m,2)

2.画图

import numpy as np
import matplotlib.pyplot as plt
from sklearn import manifold
import pandas as pd


S_X1=np.random.random((200,200))#原始特征

class_num=10  
#####生成标签
y_s=np.zeros((20*class_num))
for i in range(20* class_num):
    y_s[i] = i // 20
###################

maker=['o','v','^','s','p','*','<','>','D','d','h','H']#设置散点形状
colors = ['black','tomato','yellow','cyan','blue', 'lime', 'r', 'violet','m','peru','olivedrab','hotpink']#设置散点颜色

Label_Com = ['S-1', 'T-1', 'S-2', 'T-2', 'S-3',
             'T-3', 'S-4', 'T-4','S-5','T-5', 'S-6', 'T-6', 'S-7','T-7','S-8', 'T-8','S-9','T-9',
             'S-10','T-10','S-11', 'T-11', 'S-12','T-12'] ##图例名称

### 设置字体格式
font1 = {'family' : 'Times New Roman',

         'weight' : 'bold',
'size'   : 32,
}




def visual(X):
    tsne = manifold.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]))

    #'''嵌入空间可视化'''
    x_min, x_max = X_tsne.min(0), X_tsne.max(0)
    X_norm = (X_tsne - x_min) / (x_max - x_min)

    return  X_norm


def plot_with_labels(S_lowDWeights,Trure_labels,name):
    plt.cla()#清除当前图形中的当前活动轴,所以可以重复利用

    # 降到二维了,分别给x和y
    True_labels=Trure_labels.reshape((-1,1))
    
    S_data=np.hstack((S_lowDWeights,True_labels))
    S_data=pd.DataFrame({'x':S_data[:,0],'y':S_data[:,1],'label':S_data[:,2]})



    for index in range(class_num):
        X= S_data.loc[S_data['label'] == index]['x']
        Y=S_data.loc[S_data['label'] == index]['y']
        plt.scatter(X,Y,cmap='brg', s=100, marker=maker[0], c='', edgecolors=colors[index],alpha=0.65)

    plt.xticks([])  # 去掉横坐标值
    plt.yticks([])  # 去掉纵坐标值
    #
    plt.title(name,fontsize=32,fontweight='normal',pad=20)




fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(111)
plot_with_labels(visual(S_X1),y_s,'(a)')


plt.subplots_adjust(left=None, bottom=0.15, right=None, top=None,
                wspace=0.1, hspace=0.15)
plt.legend(scatterpoints=1,labels = Label_Com, loc='best',labelspacing=0.4,columnspacing=0.4,markerscale=2,bbox_to_anchor=(0.9, 0),ncol=12,prop=font1,handletextpad=0.1)

# plt.savefig('./'+str(sour)+str(tar)+'.png', format='png',dpi=300, bbox_inches='tight')
plt.show(fig)

3.可视化结果

在这里插入图片描述

  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值