将5个特征映射到二维或三维图

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 featuresX = df.loc[:, features].values# Standardizing the featuresX = StandardScaler().fit_transform(X)tsne = TSNE(n_components=3, n_jobs=5).fit_transform(X)

我想将我的5个特征映射到二维或三维图中。我有点困惑该怎么做。我怎样才能从这些信息中构建一个图表呢?


回答:

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

至于实际查看结果,尽管你已经有了坐标,你仍然需要以某种方式绘制它们。matplotlib库是一个不错的选择,这里我们将使用它。

绘制二维图你有几种选择。你可以保持大部分代码不变,只需执行2D t-SNE即可

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

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

import matplotlib.pyplot as pltplt.scatter(*zip(*tsne[:,:2]))plt.show()

zip(*...)会转置你的数据,以便你可以将x坐标和y坐标分别传递给scatter(),而[:,:2]部分选择了两个坐标进行查看。如果你的数据已经是二维的,你可以忽略它,或者你可以用[:,[0,2]]替换它,以查看高维数据中的第0和第2个特征,而不仅仅是前两个。

绘制三维图代码看起来非常相似,至少对于一个最简版本是这样。

from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as pltfig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.scatter(*zip(*tsne))plt.show()

主要区别在于使用了3D绘图库和创建了3D子图。

添加颜色: t-SNE可视化通常在某种程度上进行颜色编码时会更有帮助。一个例子可能是你当前存储在X[:,2]中的平滑中间价格。对于探索性可视化,我发现二维图更有帮助,所以我将使用它作为例子:

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

你仍然需要导入等操作,但通过传递关键字参数c,你可以对散点图进行颜色编码。要调整这些数值数据的显示方式,你可以使用不同的颜色映射,如下所示:

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

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

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注