# coding='utf-8'
"""# 一个对 S 曲线数据集上进行各种降维的说明。"""
from time import time

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatter

from sklearn import manifold, datasets

# # Next line to silence pyflakes. This import is needed.
# Axes3D

n_points = 1000
# X 是一个(1000, 3)的 2 维数据(1000个点，XYZ三个坐标的数据)，color 是一个(1000,)的 1 维数据
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10
n_components = 2        # 降低到的低维为2维

fig = plt.figure(figsize=(8, 8))
# 创建了一个 figure，标题为"Manifold Learning with 1000 points, 10 neighbors"
plt.suptitle("Manifold Learning with %i points, %i neighbors"
             % (1000, n_neighbors), fontsize=14)

'''绘制 S 曲线的 3D 图像'''
ax = fig.add_subplot(211, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)
ax.view_init(4, -72)  # 初始化视角

'''t-SNE'''
t0 = time()
tsne = manifold.TSNE(n_components=n_components, init='pca', random_state=0)
Y = tsne.fit_transform(X)  # 转换后的输出，维度1000×2（XY轴的坐标）
t1 = time()
print("t-SNE: %.2g sec" % (t1 - t0))  # 算法用时

'''绘制 S 曲线的降维到 2 维的图像'''
ax = fig.add_subplot(2, 1, 2)
plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)
plt.title("t-SNE (%.2g sec)" % (t1 - t0))
ax.xaxis.set_major_formatter(NullFormatter())  # 设置标签显示格式为空
ax.yaxis.set_major_formatter(NullFormatter())
# plt.axis('tight')

plt.show()
# coding='utf-8'
"""# 一个对 S 曲线数据集上进行各种降维的说明。"""
from time import time

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatter

from sklearn import manifold, datasets

# # Next line to silence pyflakes. This import is needed.
# Axes3D

n_points = 1000
# X 是一个(1000, 3)的 2 维数据(1000个点，XYZ三个坐标的数据)，color 是一个(1000,)的 1 维数据
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10
n_components = 2        # 降低到的低维为2维

fig = plt.figure(figsize=(8, 8))
# 创建了一个 figure，标题为"Manifold Learning with 1000 points, 10 neighbors"
plt.suptitle("Manifold Learning with %i points, %i neighbors"
             % (1000, n_neighbors), fontsize=14)

'''绘制 S 曲线的 3D 图像'''
ax = fig.add_subplot(211, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)
ax.view_init(4, -72)  # 初始化视角

'''t-SNE'''
t0 = time()
tsne = manifold.TSNE(n_components=n_components, init='pca', random_state=0)
Y = tsne.fit_transform(X)  # 转换后的输出，维度1000×2（XY轴的坐标）
t1 = time()
print("t-SNE: %.2g sec" % (t1 - t0))  # 算法用时

'''绘制 S 曲线的降维到 2 维的图像'''
ax = fig.add_subplot(2, 1, 2)
plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)
plt.title("t-SNE (%.2g sec)" % (t1 - t0))
ax.xaxis.set_major_formatter(NullFormatter())  # 设置标签显示格式为空
ax.yaxis.set_major_formatter(NullFormatter())
# plt.axis('tight')

plt.show()
# coding='utf-8' # 一个对 S 曲线数据集上进行各种降维的说明。 # # Next line to silence pyflakes. This import is needed. # Axes3D # X 是一个(1000, 3)的 2 维数据(1000个点，XYZ三个坐标的数据)，color 是一个(1000,)的 1 维数据 # 降低到的低维为2维 # 创建了一个 figure，标题为"Manifold Learning with 1000 points, 10 neighbors" 绘制 S 曲线的 3D 图像 # 初始化视角 t-SNE # 转换后的输出，维度1000×2（XY轴的坐标） # 算法用时 绘制 S 曲线的降维到 2 维的图像 # 设置标签显示格式为空 # plt.axis('tight')