数据聚类的简单应用

数据聚类的简单应用

数据聚类data clustering:用来寻找紧密相关的事物,并将其可视化的方法。

1. 聚类时常被用于数据量很大(data-intensive)的应用中。

2. 聚类是无监督学习(unsupervised learning)的一个例子。无监督学习算法并不利用带有正确答案的样本数据进行“训练”,它们的目的是要在一组数据中找寻某种结构,而这些数据本身并不是我们要找的答案。

3. 聚类的结果不会告诉零售商每位顾客可能会买什么,也不会预测新来的顾客适合哪种时尚,聚类算法的目标是采集数据,然后从中找出不同的数组。

例如:可以通过聚类来对博客用户进行分类

这个说法的假设前提是:我们有众多的博客用户,但这些用户并没有显著的特征标签,在这种情况下,如何有效的对这些用户进行分类。这时候聚类就派上用场了。

基本过程:

1. 构建一个博客订阅源列表

2. 利用订阅源列表建立一个单词列表,将其实际用于针对每个博客的单词计数。

3. 我们利用上述单词列表和博客列表来建立一个文本文件,其中包含一个大的矩阵,记录者针对每个博客的所有单词的统计情况。(例如:可以用列对应单词,用行对应博客),一个可用的代码如下:

[python] view plain copy

    import feedparser  
    import re  
      
    # Returns title and dictionary of word counts for an RSS feed  
    def getwordcounts(url):  
      # Parse the feed  
      d=feedparser.parse(url)  
      wc={}  
      
      # Loop over all the entries  
      for e in d.entries:  
        if 'summary' in e: summary=e.summary  
        else: summary=e.description  
      
        # Extract a list of words  
        words=getwords(e.title ' ' summary)  
        for word in words:  
          wc.setdefault(word,0)  
          wc[word] =1  
      return d.feed.title,wc  
      
    def getwords(html):  
      # Remove all the HTML tags  
      txt=re.compile(r'<[^>] >').sub('',html)  
      
      # Split words by all non-alpha characters  
      words=re.compile(r'[^A-Z^a-z] ').split(txt)  
      
      # Convert to lowercase  
      return [word.lower() for word in words if word!='']  


4. 当然这里有很多可以减少需要统计的单词量的技巧,有些常用的习惯性用于可以从这些列表中删除掉。具体的构建过程这里省略不谈,感兴趣的可以参考相关书籍。

5. 进行聚类:这里有两种可用的方法

分级聚类:

分级聚类通过连续不断地将最为相似的群组两两合并,直到只剩一个群组为止,来构造出一个群组的层级结构。其过程可以参考下图:

图:分级聚类的过程
分级聚类基本算法如下:(这里省略了一些细节函数,如加载文件,计算皮尔逊相似度等)

[python] view plain copy

    def hcluster(rows,distance=pearson):  
      distances={}  
      currentclustid=-1  
      
      # Clusters are initially just the rows  
      clust=[bicluster(rows[i],id=i) for i in range(len(rows))]  
      
      while len(clust)>1:  
        lowestpair=(0,1)  
        closest=distance(clust[0].vec,clust[1].vec)  
    

转载于:https://www.cnblogs.com/amengduo/p/9586694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值