本节书摘来自华章计算机《大数据架构和算法实现之路:电商系统的技术实战》一书中的第2章,第2.1节,作者 黄 申,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
第2章
方案设计和技术选型:聚类
学习了这么多关于分类的知识后,让我们再回到小丽提出的第二大需求:帮助商家进行合理的搜索关键词优化。对于电商平台的商家而言,站内搜索的流量和转化率是至关重要的。而要想被搜索引擎搜索到,最基本的条件是使用了足够并且合理的关键词来描述商品。因此,帮助他们在商品文描中优化和补充适当的关键词,将会提升商品被用户搜索到的可能性,也能增加商家运营的效率。对此,小明是这么理解的:“可以充分利用大家的智慧,来帮助商家进行关键词SEO。对于某个新刊登的商品A,根据其现有的关键词,查找和其最相似的其他商品,并将这些相似品放入集合B中。然后在集合B中,统计热门的关键词,为A发现它可能漏掉的用词。”
“可是,我们怎样为某个商品查找所有的相似品呢?之前阐述监督学习的时候,你提到的KNN算法好像可以完成这个任务。”
“没错。但是KNN算法最大的问题是需要人工标注的数据。这里将学习另一种非监督式的机器学习方法——聚类,以及聚类中的经典算法K均值(K-Means)。该算法的原理和KNN在一定程度上比较类似,不过其应用场景有所不同。”
2.1 聚类的基本概念
如前所述,监督式学习通过训练资料学习建立一个模型,并依此模型推测出了新的实例。实际场景中,我们经常还会遇到另一种更为原始的情况:不存在任何关于样本的先验知识,让我们在没人指导的情形下去将很多东西进行归类。因此,归类系统必须通过一种有效的方法“发现”样本的内在相似性,然后通过一种被称为“非监督学习”的方法来设计该归类系统。这一节将致力于阐述特征向量的非监督学习方式,通常称为“聚类”(Clustering)。实质上这是一种数据驱动的方法,它试图发现数据自身的内部结构,将数据对象以群组(Cluster)的形式进行分组。假想另外一个场景,还是以1000颗水果为例,这次我们不会事先告诉果农,只可能有苹果、甜橙和西瓜三种水果,而是让他们按照水果之间的相似程度,进行归组,更相似的放入一组。这就是最基本的聚类问题。和分类问题相同的地方在于,果农可能会将甜橙和苹果弄混淆。不同之处在于,在没有修改游戏规则之前,分类问题下永远只有3个分类,而聚类这种方式可能会导致聚出多于或少于3个的分组。
根据数据的类型、样本在聚类中的积聚规则,以及应用这些规则所用的方法来看,有很多种聚类算法。大体上可以分为如下两大类。
- 质心调整型(Centroid Adjustment):这种算法使用一种迭代的方法来调整聚类的典型模式点,也称聚类的质心,从而形成一系列可以分配给它们的样本。
- 层次型(Hierarchical):层次型的算法也可以称为树状聚类,它采用数据对象的连接规则,去制造一个层次化序列的聚类模型。这和质心调整型所给出的扁平化解决方案有所不同。
通常情况下,由于缺乏人为的标注,聚类的效果会比分类的效果要差一些,不过聚类也有其独特的优势:更加节省人力,适合用于对精度要求不高,或是一些需要预处理的场景。例如这里提到的如何为给定的商品找到其他相似品。再有,在做客户关系管理(CRM)的时候,需要对用户进行分组并打上兴趣标签。大型的网站其用户量有上百万,而标签量也可能上万,那么完全依赖分类技术对于平台的起步而言过于困难。这时可以考虑通过聚类来发现相似的用户,并自动将他们归为一组。然后,可对聚类的初步结果进一步进行提炼,对于重要的客户再进行基于分类的标注和处理。