聚类是另一种无监督机器学习方法,该方法将数据点分为相似的组,称之为“类”。一个类包含来自数据集的一个观察子集,同一类中的所有观察值都被认为是“相似的”。每个类里观测值彼此之间接近(称为内聚),两个不同的类里的观测值彼此远离或者尽可能不同(称为分离)。下图描述了类的内聚和分离。
聚类算法在许多投资问题中特别有用。例如,在对公司进行分组时,类可以发现公司之间的重要相似性和差异性,而这些相似性和差异性可能不会被标准的行业分类所捕捉。在投资组合管理中,聚类方法被用来改善投资组合的多样化。
在实践中,专家判断在聚类算法中起着一定的作用。首先,专家必须确定什么是“相似”。每个公司都可以被认为是一个具有多种特征的观察值,包含营业收入、利润、财务比率等财务数值,以及其他潜在的模型输入值。有了这些特征值,两个观测值之间的相似度或“距离”就可以被定义。距离越小,观测结果越相似;距离越大,观测结果越不相似。
一个常用的定义方法是欧几里得距离,即两点之间的直线距离。在机器学习中,经常使用的距离度量有十余种。在实践中,距离度量的选择取决于数据的性质(是否是数值)和被分析的业务类别。
一旦定义了相关的距离度量,我们就可以将类似的观测结果分在一起。我们现在介绍两种比较流行的聚类方法:K-Means和分层聚类。
K-Means
K-Means是一种相对较老的算法,它将观察值重复划分为一个固定的数字k(不重叠的类)。类的数量k是一个模型超参数,它的值由研究人员在学习开始之前设置。每个类由它的形心(centroid,即中心)定义,每个观测值都由算法分配到与该观测值最接近的形心的类中。
K-Means算法遵循迭代过程。如下表所示,k=3和一组关于变量的观察结果可以用两个特征来描述。
在表中,水平轴和垂直轴分别代表第一和第二特征。例如,投资分析师可能希望将一组公司用两个测量标准分成三类。
算法将观测数据按以下步骤进行分类:
1、首先确定k(本例为3)个初始随机形心的位置。
2、算法分析每个观测值的特征。基于使用的距离度量,K-Means将每个观测值分配给最近的形心(类由形心定义)。
3、借助每个类中的观测值,K-Means算法在计算每个类新的(k个)形心(形心是观测值的平均值)。
4、然后将观测结果重新分配到新的形心,根据观测结果对类重新定义。
5、再次进行新的(k个)形心及类的确定过程。
K-Means算法将继续迭代,直到没有观察结果被重新分配到另一个新的类(即不需要重新计算新的形心)。该算法最终收敛并得到最后的K个类及类内的观察值。在k=3的约束下,K-Means算法最小化了类内的距离(内聚最大化),最大化了类间距离(分离最大化)。
K-Means算法速度快,在拥有上亿个观测数据的数据集上运行良好。但是,类的最终分配可能取决于形心的初始位置。为了解决这个问题,可以使用不同的形心多次运行该算法,然后根据业务目的选择最有用的分类。
这种技术的一个限制是,在运行K-Means之前,必须确定类的数量(超参数k)。
因此,我们需要知道,研究问题及分析数据集,选择多少个类是合理的。或者,可以选择k的取值范围,通过运行算法找到最优的类的数量——使类内距离最小,类内的相似度最大。但是,最终结果仍可能过于主观。
以罗素3000指数为例,该指数跟踪美国市值最高的3000只股票。这3000支股票可以根据财务特征(如总资产、总收益、盈利能力、杠杆率等)和经营特征(如员工人数、研发费用等)分为10个、50个甚至更多的类。由于处于同一行业类别中的公司可能具有非常不同的财务和运营特征,因此使用K-Means派生出不同的类可以为“同类”群体的性质提供独特的理解。如前所述,k的准确选择取决于所需的精度或分割的水平。我们还可以使用聚类对投资工具或对冲基金进行分类,作为标准分类的替代方法。聚类还可以帮助实现可视化数据,并有助于检测趋势或异常值。
总而言之,K-Means算法是投资实践中最常用的算法之一,特别是在高维数据中发现特有模式及作为现有静态行业分类的替代方法等方面。
分层聚类
分层聚类是一种用于构建层次类结构的迭代过程。在K-Means聚类中,算法将数据分割成预定数目的聚类;类之间没有定义的关系。然而,在分层聚类中,算法会创建大小递增(“内聚”)或递减(“分离”)的中间类,直到达到最终的聚类。正如“分层”一词所暗示的,该过程在多层类之间创建关系。虽然与K-Means聚类相比,分层聚类的计算量更大,但它的优点是允许分析师在决定使用哪种间隔的数据之前检查不同间隔数据的分段。
更详细地说,内聚式(自下至上)分层聚类先将每个观察值作为自己的类。然后,算法根据距离(相似度)的度量找到两个最近的类,并将它们合并成一个新的更大的类。这个过程不断重复,直到所有的观察值都聚集成一个类。下表中的A表描述了一个内聚聚类的假想示例,其中的观察结果用字母表示(A到K),观察结果周围的圆圈表示类。这个过程从11个单独的类开始,然后生成分组序列。第一个序列包括6个类,有5个类各自有2个观测值,1个类有单个观测值G。接下来生成2个类,一个类有6个观测值,另一个类有5个观测值。最后的结果是一个包含所有11个观测值的大类,该大类包括两个主要的子类,每个子类包含三个较小的孙类。
相反,分离式(自上而下)分层聚类从单个类的所有观察值开始。然后根据距离(相似度)将观测结果分成两个类。然后,该算法逐步将中间类划分为更小的类,直到每个类只包含一个观察值。B表描述了分离式聚类的步骤,它以一个包含11个观察值的类开始,算法生成两个较小的类,一个有6个观测值,另一个有5个观测值;然后再分为6个类;最后生成11个类,每个类只包含一个观测值。
在这个假设的例子中,内聚式和分离式聚类产生了相同的结果:两个主要的子类,每个子类有三个更小的孙类。我们可以在6个类或2个类之间进行选择。由于计算速度快,内聚式聚类是处理数据集的常用方法。内聚式聚类算法根据局部模式进行决策,不考虑数据的全局结构。因此,内聚式聚类非常适合于对较小的类进行识别。由于分离式聚类先从整体开始,所以常被侧重于分析数据的全局结构,因此更适合于识别较大的类。
为了确定内聚式和分离式聚类的最佳结果,需要对两个类之间的距离有明确的定义。一些常用的定义包括求每个类中所有观测值之间直线距离的最小值、最大值或平均值。
-
聚类算法
+关注
关注
2文章
118浏览量
12126 -
机器学习
+关注
关注
66文章
8406浏览量
132562 -
K-means
+关注
关注
0文章
28浏览量
11293
发布评论请先 登录
相关推荐
评论