在python,代码和最有用的可视化中绘制2D矩阵

Hos*_*ein 7 python plot visualization numpy matplotlib

我有一个非常大的矩阵(10x55678),采用"numpy"矩阵格式.该矩阵的行对应于一些"主题",列对应于单词(来自文本语料库的唯一单词).该矩阵中的每个条目i,j是概率,意味着单词j以概率x属于主题i.因为我使用的是id而不是真实的单词,因为我的矩阵的维度非常大,我需要以某种方式对其进行可视化.你建议使用哪种可视化?一个简单的情节?或者更复杂和信息量更大的一个?(我问这些因为我对可用的可视化类型一无所知).如果可能,你能给我一个使用numpy矩阵的例子吗?谢谢

我问这个问题的原因是我希望对我的语料库中的单词主题分布有一个大致的看法.欢迎任何其他方法

Jos*_*del 17

您当然可以使用matplotlib imshowpcolor方法来显示数据,但正如评论所提到的,如果不放大数据的子集,可能很难解释.

a = np.random.normal(0.0,0.5,size=(5000,10))**2
a = a/np.sum(a,axis=1)[:,None]  # Normalize

pcolor(a)
Run Code Online (Sandbox Code Playgroud)

未排序的随机示例

然后,您可以按照它们属于群集的概率对单词进行排序:

maxvi = np.argsort(a,axis=1)
ii = np.argsort(maxvi[:,-1])

pcolor(a[ii,:])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在这里,y轴上的单词index不再等于原始顺序,因为事物已被排序.

另一种可能性是使用networkx包来为每个类别绘制单词群集,其中具有最高概率的单词由更大或更接近图表中心的节点表示,并忽略那些在该类别中没有成员资格的单词.这可能更容易,因为您有大量的单词和少量的类别.

希望其中一个建议很有用.

  • 对于单词频率,请尝试对数刻度 - 请参阅[Zipf定律](http://en.wikipedia.org/wiki/Zipf's_law). (2认同)