2. t-NSE 可视化

1. t-NSE 可视化

t-SNE是t-Distributed Stochastic Neighbor Embedding简写,出自Visualizing Data using t-SNE论文。

t-SNE是一种非线性降维算法,通过原始空间和嵌入空间的联合概率的KL散度来评估降维到嵌入空间的效果,就是用KL散度的函数作为loss函数,然后通过梯度下降最小化loss函数,最终获得收敛结果。但是t-SNE计算复杂度高。

下面是t-SNE可视化手写数字的代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler
import seaborn as sns


df = pd.read_csv('mnist_train.csv')

# 看看数据样子
print(df.head(4))
# 获取标签列
labels = df['label']

# 获取训练的数字图片的pixel
data = df.drop("label", axis=1)

输出:

   label  1x1  1x2  1x3  1x4  1x5  ...  28x23  28x24  28x25  28x26  28x27  28x28
0      5    0    0    0    0    0  ...      0      0      0      0      0      0
1      0    0    0    0    0    0  ...      0      0      0      0      0      0
2      4    0    0    0    0    0  ...      0      0      0      0      0      0
3      1    0    0    0    0    0  ...      0      0      0      0      0      0

[4 rows x 785 columns]

2. 数据预处理

## 预处理数据 标准化
standardized_data = StandardScaler().fit_transform(data)
print(standardized_data.shape) #(60000, 784) 

#只取前5000样例
data_5000 = standardized_data[0:5000, :]
labels_5000 = labels[0:5000]

3. t-SNE降维及可视化

##建立TSNE实例
model = TSNE(n_components=2, random_state=0)
# n_components:降维后维度,一般设置2,
# 还有像perplexity困惑度,默认30
# learning rate学习率,默认200
# n_iter迭代次数,最大1000

#训练得到降维后数据
tsne_data = model.fit_transform(data_5000)

#将降维后数据和对应label纵向拼接后再转置为样本数5000x4列的矩阵
tsne_data = np.vstack((tsne_data.T, labels_5000)).T
tsne_df = pd.DataFrame(data=tsne_data,
                       columns=("dim_1", "dim_2", "label"))

# 可视化tSNE结果
plt.figure(dpi=500)
sns.FacetGrid(tsne_df, hue="label", height=10).map(
    plt.scatter, 'dim_1', 'dim_2').add_legend()

plt.savefig('tSNE.png')
plt.show()

结果如下:

2. t-NSE 可视化_第1张图片

Inference

[1] 数据降维与可视化——t-SNE

你可能感兴趣的:(机器学习,机器学习,数据可视化)