TSNE可视化自己的数据(或者叫做聚类)

刹那间又到7月份了,之前弄一些代码,添加点东西,或者增加点数据处理之类的算法都是为了水一篇核心期刊,然而现在的中文期刊并没有之前好中了,神经网络也不是加加减减卷积层,添加一下残差,或者A+B的方式等等随随便便就出论文了。随着社会的发展,各个期刊都已经开始注重来稿的创新型。以本人某次被拒稿的经历说明一下:
TSNE可视化自己的数据(或者叫做聚类)_第1张图片
就是用已经有的东西互相结合是不行滴,很难中一篇核心的。

不管怎么说,研究生多么内卷,能狗一篇水刊顺利毕业就行了,对自己要求越高活得越累,每个人都有成为凤凰男人的冲动,但很少有人坚持得下去,哈哈哈哈。

言归正传,为了顺利毕业,还是需要往大论文里添加一些必要得东西滴,例如TSNE,具体代码如下(声明:此代码忘了是从那个大佬帖子里黏贴来的,经过我的修改可以运用到我的数据了)

# -*- coding: utf-8 -*-
"""
Created on Sun Jul  4 07:53:27 2021

@author: 1
"""
#首先为了省事,将训练神经网络得库全都导入进来
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.manifold import TSNE
import numpy as np
import pandas as pd
import keras
import tensorflow as tf
from keras.models import Sequential,Model
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils,plot_model
from sklearn.model_selection import cross_val_score,train_test_split,KFold
from sklearn.preprocessing import LabelEncoder
from keras.layers import Dense,add,Input, Activation, Flatten, Convolution1D, Dropout,MaxPooling1D,BatchNormalization,GlobalAveragePooling1D,ZeroPadding1D,concatenate
from keras.models import load_model
from keras.models import model_from_json
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import itertools
from keras import layers
from keras.optimizers import SGD
# 载入数据
df = pd.read_csv(r'C:/Users/1/Desktop/4改.csv')
X = np.expand_dims(df.values[:, 0:1024].astype(float), axis=2)
Y = df.values[:, 1024]
#这里很重要,不把标签做成独热码得形式最终出的图空白一片
encoder = LabelEncoder()
Y_encoded = encoder.fit_transform(Y)
Y_onehot = np_utils.to_categorical(Y_encoded)

X=X.reshape(8621,1024)#这个形状根据读取到得csv文件得的大小自行调试,8621是列数,此列数比CSV文件中少一行
# 加载数据
def get_data():
	"""
	:return: 数据集、标签、样本数量、特征数量
	"""
	#digits = datasets.load_digits(n_class=10)
	digits=2
	data = X#digits.data		# 图片特征
	label = Y#digits.target		# 图片标签
	n_samples=8621#对应reshape中的行数
	n_features =1024 #对应reshape中的列数
	return data, label, n_samples, n_features


# 对样本进行预处理并画图
def plot_embedding(data, label, title):
	"""
	: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()		# 创建图形实例
	ax = plt.subplot(111)		# 创建子图,经过验证111正合适,尽量不要修改
	# 遍历所有样本
	for i in range(data.shape[0]):
		# 在图中为每个数据点画出标签
		plt.text(data[i, 0], data[i, 1], str(label[i]), color=plt.cm.Set1(label[i] / 10),
				 fontdict={'weight': 'bold', 'size': 7})
	plt.xticks()		# 指定坐标的刻度
	plt.yticks()
	plt.title(title, fontsize=14)
	# 返回值
	return fig


# 主函数,执行t-SNE降维
def main():
	data, label , n_samples, n_features = get_data()		# 调用函数,获取数据集信息
	print('Starting compute t-SNE Embedding...')
	ts = TSNE(n_components=2, init='pca', random_state=0)
	# t-SNE降维
	reslut = ts.fit_transform(data)
	# 调用函数,绘制图像
	fig = plot_embedding(reslut, label, 't-SNE Embedding of digits')
	# 显示图像
	plt.show()


# 主函数
if __name__ == '__main__':
	main()

出的图片如下:

TSNE可视化自己的数据(或者叫做聚类)_第2张图片
其实我是想上传矢量图的,奈何CSDN不支持。
TSNE可视化自己的数据(或者叫做聚类)_第3张图片
重新截图也并不清晰,放大后字会变得模糊。读者可以自行尝试出图研究。数据如下链接,永久有效:
链接:https://pan.baidu.com/s/1hssyw186ej5mFY4QtP9K4g
提取码:HBGC
再说明一下数据,前1024列是振动信号,第1025列是标签。如下图所示:
TSNE可视化自己的数据(或者叫做聚类)_第4张图片
要注意的地方是,本数据已经归一化了,然而代码里还要归一化,否则不出图。
另外,这个数据集并不是来自凯斯西储的轴承故障数据。具体是什么数据,我也模糊了,弄得太多了,以至于写大论文我还得做一遍数据。
目前可以实现数据的TSNE,下一步将其运用到神经网络中,将每一层特征图进行TSNE可视化。

你可能感兴趣的:(信号识别,故障诊断,深度学习,tensorflow,神经网络,机器学习)