Jer*_*mie 1 python plot machine-learning
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)
Run Code Online (Sandbox Code Playgroud)
我想将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)
Run Code Online (Sandbox Code Playgroud)
或者,您可以只使用现有的组件,一次只查看其中两个。以下代码段应处理两种情况:
import matplotlib.pyplot as plt
plt.scatter(*zip(*tsne[:,:2]))
plt.show()
Run Code Online (Sandbox Code Playgroud)
该zip(*...)调换你的数据,这样就可以通过X坐标和Y坐标分别以scatter(),和[:,:2]一块选择两个坐标图。如果您的数据已经是2D,则可以忽略它,或者可以用类似[:,[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()
Run Code Online (Sandbox Code Playgroud)
主要区别在于使用3D绘图库和制作3D子图。
添加颜色:如果以某种方式对它们进行颜色编码,则t-SNE可视化通常会更有用。一个例子可能是您当前存储在中的平滑中间价X[:,2]。对于探索性的可视化,我发现2D图更有用,因此我将其用作示例:
plt.scatter(*zip(*tsne[:,:2]), c=X[:,2])
Run Code Online (Sandbox Code Playgroud)
您仍然需要导入和其他功能,但是通过传递关键字参数c,可以对散点图进行颜色编码。要调整数字数据的显示方式,可以使用其他颜色图,如下所示:
plt.scatter(*zip(*tsne[:,:2]), c=X[:,2], cmap='RdBu')
Run Code Online (Sandbox Code Playgroud)
顾名思义,此颜色图由红色和蓝色之间的渐变组成,并且较低的值X[:,2]将对应于红色。