python - t-SNE 映射到 2D 或 3D 图

标签 python machine-learning plot

features =  ["Ask1", "Bid1", "smooth_midprice", "BidSize1", "AskSize1"]

client = InfluxDBClient(host='127.0.0.1', port=8086, database='data',
                        username=username, password=password)

series = "DCIX_2016_11_15"

sql = "SELECT * FROM {} where time  >= '{}' AND time <= '{}' ".format(series,FROMT,TOT)

df = pd.DataFrame(client.query(sql).get_points())

#Separating out the features
X = df.loc[:, features].values

# Standardizing the features
X = StandardScaler().fit_transform(X)

tsne = TSNE(n_components=3, n_jobs=5).fit_transform(X)

我想将我的 5 个特征映射到 2D 或 3D 图中。我有点困惑该怎么做。我如何根据这些信息绘制图表?

最佳答案

您已经完成了大部分工作。 t-SNE 是一种用于理解高维数据的常见可视化方法,现​​在变量 tsne 是一个数组,其中每一行代表一组来自获得的嵌入的 (x, y, z) 坐标。如果愿意,您可以使用其他可视化,但 t-SNE 可能是一个很好的起点。

就实际看到的结果而言,即使您有可用的坐标,您仍然需要以某种方式绘制它们。 matplotlib 库是一个不错的选择,我们将在此处使用它。

要在 2D 中绘制,您有几个选择。您可以保持大部分代码不变,只需使用

执行 2D t-SNE
tsne = TSNE(n_components=2, n_jobs=5).fit_transform(X)

或者您可以只使用现有的组件,一次只查看其中的两个。以下代码段应处理这两种情况:

import matplotlib.pyplot as plt

plt.scatter(*zip(*tsne[:,:2]))
plt.show()

zip(*...) 转置您的数据,以便您可以将 x 坐标和 y 坐标分别传递给 scatter(),而 [:,:2] block 选择两个坐标查看。如果你的数据已经是二维的,你可以忽略它,或者你可以用 [:,[0,2]] 之类的东西替换它来查看,例如,更高维度的第 0 和第 2 个特征数据而不仅仅是前 2 个。

要以 3D 方式绘制,代码看起来大同小异,至少对于最小版本而言是这样。

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(*zip(*tsne))
plt.show()

主要区别在于使用 3D 绘图库和制作 3D 子图。

添加颜色:如果以某种方式对 t-SNE 可视化进行颜色编码,它们通常会更有帮助。一个示例可能是您当前存储在 X[:,2] 中的平滑中间价。对于探索性可视化,我发现 2D 图更有用,所以我将使用它作为示例:

plt.scatter(*zip(*tsne[:,:2]), c=X[:,2])

您仍然需要导入等等,但是通过传递关键字参数 c 您可以对散点图进行颜色编码。要调整数字数据的显示方式,您可以像这样使用不同的颜色图:

plt.scatter(*zip(*tsne[:,:2]), c=X[:,2], cmap='RdBu')

顾名思义,此颜色图由红色和蓝色之间的渐变组成,X[:,2] 的较低值将对应于红色。

关于python - t-SNE 映射到 2D 或 3D 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51386902/

相关文章:

python - 使用 Python 在 PDF 3D 中保存 3D 图

python - 为什么第二个线程没有启动?

python - python中不同颜色的打印字符串 - IDLE

python - 使用 PyPlot 绘制平滑线

java - 在 Java 中绘制数据并使用余弦进行最小二乘回归

Python 从文件中创建单词列表

MATLAB:重新排列特征矩阵

machine-learning - Vowpal Wabbit - 精确召回 f 测量

r - SVM 在 R 中具有相同输入和参数的不同结果

r - 在所有列中绘制每一行数据(意大利面条图)