【集体智慧编程】第三章、发现群组

本文介绍了如何利用聚类算法来分析博客数据,重点讲述了分级聚类的原理和实现,通过Universal Feed Parser解析RSS订阅源获取数据,然后计算博客之间的相似度,构建树状图以展示群组结构。此外,还探讨了无监督学习中的监督学习区别,以及在数据密集型应用中的聚类应用。
摘要由CSDN通过智能技术生成

一、前言

本章中,我们将学习到如下内容:从各种不同的来源中构造算法所需的数据;两种不同的聚类算法;更多有关距离度量(distance metrics)的知识;简单的图形可视化代码,用以观察所生成的群组;最后,我们还会学习如何将异常复杂的数据集投影到二维空间中。


聚类时常被用于数据量很大(data-intensive)的应用中。跟踪消费者购买行为的零售商们,除了利用常规的消费者统计消息外,还可以利用这些信息自动检测出具有相似购买模式的消费者群体。年龄和收入都相仿的人也许会有迥然不同的着装风格,但是通过使用聚类算法,我们就可以找到“时装岛屿”,并据此开发出相应的零售或市场策略。聚类在计量生物学领域里也有大量的运用,我们用它来寻找具有相似行为的基因组,相应的研究结果可以表明,这些基因组中的基因会以同样的方式响应外界的活动,或者表明它们是相同生化通路中的一部分。


二、监督学习和无监督学习

(1)监督学习

利用样本输入和期望输出来学习如何预测的技术被称为监督学习法(supervised learning methods)。常用的监督学习法包括:神经网络、决策树、向量支持机以及贝叶斯过滤。采用这些方法的应用程序,会通过检查一组输入和期望的输出来进行“学习”。当我们想要利用这些方法中的任何一种来提取信息时,我们可以传入一组输入,然后期望应用程序能够根据其此前学到的知识来产生一个输出。


(2)无监督学习

聚类是无监督学习(unsupervised learning)的一个例子。与神经网络或决策树不同,无监督学习算法不是利用带有正确答案的样本数据进行“训练”。它们的目的是要在一组数据中找寻某种结构,而这些数据本身并不是我们要找的答案。在前面提到的时装的例子中,聚类的结果不会告诉零售商每一位顾客可能会买什么,也不会预测新来的顾客适合哪种时尚。聚类算法的目标是采集数据,然后从中找出不同的群组。其他无监督学习的例子还包括非负矩阵因式分解(non-negative matrix factorization)和自组织映射(self-organizing maps)。


三、对订阅源中的单词进行计数

几乎所有的博客都可以在线阅读,或者通过RSS订阅源进行阅读。RSS订阅源是一个包含博客及其所有文章条目信息的简单的XML文档。为了给每个博客中的单词计数,首先第一步就是要解析这些订阅源。所幸的是,有一个非常不错的程序能够完成这项工作,它就是Universal Feed Parser。从python的包或者使用pip安装feedparser包即可。


有了Universal Feed Parser,我们就可以很轻松地从任何RSS或Atom订阅源中得到标题、链接和文章的条目了。下一步,我们来编写一个从订阅源中提取所有单词的函数。新建一个feedvector.py,将下列代码加入。

import feedparser
import re


# 返回一个RSS订阅源的标题和包含单词计数情况的字典
def getwordcounts(url):
    # 解析订阅源
    d = feedparser.parse(url)
    wc = {}

    # 循环遍历所有的文章条目
    for e in d.entries:
        if 'summary' in e:
            summary = e.summary
        else:
            summary = e.description

        # 提取一个单词列表
        words = getwords(e.title+''+summary)
        for word in words:
            wc.setdefault(word, 0)
            wc[word] += 1
    return d.feed.title, wc

每个RSS和Atom订阅源都会包含一个标题和一组文章条目。通常,每个文章条目都有一段摘要,或者是包含了条目中实际文本的描述性标签。函数getwordcounts将摘要传给函数getwords,后者会将其中所有的HTML标记剥离掉,并以非字母字符作为分隔符拆分出单词,再将给过以列表的形式加以返回。

def getwords(h
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值