- import numpy as np
- import matplotlib.pyplot as plt
- from sklearn.manifold import TSNE
-
- # 对样本进行预处理并画图
- def plot_embedding(data, label, class_num):
- """
- :param data:数据 (数据大小,特征),即二维。对于多维数据,压缩成二维即可
- :param label:标签
- :param title:类别数
- :return:图像
- """
- x_min, x_max = np.min(data, 0), np.max(data, 0)
- data = (data - x_min) / (x_max - x_min) # 对数据进行归一化处理
- fig = plt.figure() # 创建图形实例
- plt.subplot(111) # 创建子图
- # 遍历所有样本
- for i in range(class_num):
- plt.scatter(data[:, 0][label==i], data[:, 1][label==i],label=str(i))
-
- plt.xticks([]) # 去刻度
- plt.yticks([]) # 去刻度
- plt.legend(loc='upper left')
- # plt.title("标题", fontsize=14)
- return fig
-
- # 主函数,执行t-SNE降维
- def main(data=None, label=None,class_num=4):
- """
- :param data:数据 (数据大小,特征),即二维。对于多维数据,压缩成二维即可
- :param label:标签
- :param title:类别数
- """
-
- # data, label = np.random.random((200,100)),np.zeros((200))
- # label[50:100]=1
- # label[100:150] = 2
- # label[150:] = 3
-
- print('Starting compute t-SNE Embedding...')
- """
- n_components(默认值:2):嵌入空间的维度,需要降到几维写几维。
- init: 初始化方法,多采用 PCA 初始化
- perplexity(默认值:30):perplexity 与其他流形学习算法中使用的最近邻的数量有关。考虑选择 5 到 50 之间的值。
- n_iter(默认值:1000):优化的最大迭代次数。应至少为 250。
- random_state: 随机种子
- """
- ts = TSNE(n_components=2, init='pca', random_state=0)
- # t-SNE降维
- reslut = ts.fit_transform(data)
- # 调用函数,绘制图像
- fig = plot_embedding(reslut, label, class_num)
- # 显示图像
- plt.show()
-
- # 主函数
- if __name__ == '__main__':
- main()