什么是列聚类?
对博客数据使用了分级聚类的方式分析,我们可以又学的一种聚类方式:列聚类。刚刚的分级聚类就是对行进行了一个聚类。行是什么?行就是一个又一个的博客名,列是什么?列就是一个又一个的单词,那么进行行聚类的时候,我们是根据单词的词频将不同的博客聚了一次类。当我们对单词进行聚类的时候,我们就称之为列聚类。
意义何在
正面回答,我们知道了哪些单词会时常一起使用。对于这个列子来讲,似乎没什么意义。
但是如何行是消费者,列是购买的物品,那么每一行将是某位客户购买某一个商品的数量的列表数组,此时,如果去统计购买的物品的聚类,就非常有意义了。曾经有一个尿布与啤酒的故事,这两个毫无关系的商品居然销售量居然有着正相关的关系。后来发现是父亲来买尿布的时候往往会就会为自己买上一点啤酒,很显然这非常有意义,可以进行捆绑销售。在货物的摆放方面也更加有意义。
博客的例子
还是沿用之前那个数据集blogdata.txt。实现过程其实非常简单,简直用一句话就能说清:帮行和列做一个对换,然后直接调用之前写的过的函数。就可以产生聚类的结果。首先是行列对置的函数:
def rotatematrix(data):
newdata=[]
for i in range(len(data[0])):
newrow=[data[j][i] for j in range(len(data))]
newdata.append(newrow)
return newdata
其他的都是调用了在分级聚类中使用过的代码。
执行以下代码可以得到结果:
blognames,words,data=readfile('blogdata.txt')
rdata=rotatematrix(data)
wordclust=hcluster(rdata)
drawdendrogram(wordclust,labels=words,jpeg='列聚类图.jpg')
结果是一幅图,首先看截取得其中的一部分。
我们可以看到,microsoft/software/windows和pro/mac/apple经常一起使用。相信在读这篇博客的人都知道上面留六个词的含义,当然software为什么会和windows经常一起用,看起来似乎有点不太合理,但是谁知道会不会又是像“尿布和啤酒”一样呢?
当然,并不是说图中所有词的聚类都具有意义,实际上,大多数恐怕都没有意义,或者看不出有什么意义。
最后得到的一张大图,由于csdn限制了图片宽度的像素。所以下一幅图看起来不完整,但是需要的朋友可以通过右键另存为图片观看。