Matplotlib 可视化

matplotlib绘制散点图

上一篇文章,我们通过自编码器,将高维的特征压缩至二维和三维,这样就可以实现可视化效果。

# 压缩特征维度至2维
encoding_dim = 3

# this is our input placeholder
input_img = Input(shape=(784,))

# 编码层
encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(10, activation='relu')(encoded)
encoder_output = Dense(encoding_dim)(encoded)

如上面的代码,我们利用全连接神经网络实现了降维,降至二维。

我们训练好自编码器模型后,从中获取编码模型,接下来我们会用这个编码模型对测试数据进行编码。

# predict & plotting
encoded_imgs = encoder.predict(x_test)
plt.figure(figsize= (12,9)) # 设置窗口大小
plt.scatter(encoded_imgs[:, 0], encoded_imgs[:, 1], c=y_test) # 绘制散点图
plt.colorbar() 
plt.show()

x_test的初始shape为(10000, 784),10000表示10000张图,784为每张图片的像素点数目(28*28)。经过编码器压缩之后encoder.predict() 变成了(10000,2)

再利用matplotlib的散点图绘制出只有二个特征的特征向量。

具体效果如图:

二维的可视化效果

可以看出,自编码器的降维效果也是不错的。

同样的,我们在把特征压缩到三维的时候,可以画出一个三维的散点图。绘制过程稍有点不同。

# predict & plotting
encoded_imgs = encoder3D.predict(x_test)
plt.figure(figsize= (12,9))
ax1 = plt.axes(projection='3d')
ax1.scatter3D(encoded_imgs[:, 0], encoded_imgs[:, 1],encoded_imgs[:, 2], c=y_test)
plt.show()

二维的可视化效果

  • 下面记录一下散点图的用法

文档地址:scatter文档

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=<deprecated parameter>, edgecolors=None, \*, plotnonfinite=False, data=None, \*\*kwargs)
scatter(x, y, 点的大小, 颜色,标记) # 这是最主要的几个用法

点的形状属性由marker控制,默认为。, c 控制点的颜色, norm 控制亮度


  上一篇
常见排序算法实现与比较——Python版 常见排序算法实现与比较——Python版
本文用Python实现列几种排序算法(冒泡排序、选择排序、插入排序、二分插入排序、快速排序、优化快速排序,并比较了他们在随机数组上的排序效率。
2019-07-07
下一篇 
神经网络——自编码器(Autoencoder) 神经网络——自编码器(Autoencoder)
自编码器(Autoencoder,AE),是一种利用反向传播算法使得输出值等于输入值的神经网络,它先将输入压缩成潜在空间表征,然后通过这种表征来重构输出。是一种简单却非常奇妙的神经网络结构。
2019-04-16
   目录