使用谱聚类(spectral clustering)进行特征选择

大厂光环
• 阅读 1045

在本文中,我们将介绍一种从相关特征的高维数据中选择或提取特征的有用方法。

谱聚类是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据聚类的目的。谱聚类可以理解为将高维空间的数据映射到低维,然后在低维空间用其它聚类算法(如KMeans)进行聚类

本文使用2021-2022年常规赛NBA球员的赛季数据。从特征之间的相关矩阵中绘制一个图表,显示可能相似的特征组,然后将研究谱聚类如何在这个数据集中工作。

数据中存在相关特征

在数据集进行EDA时,可能会得到一个结论:某些特征没有那么丰富的信息,一个简单的线性模型可以通过其他特征来准确预测它们。这种现象称为“多重共线性”,它不利于模型的泛化和可解释性。在理想情况下,我们希望特征都是彼此独立的,这样可以更好地解释和满足一些统计过程的假设,因为大多数统计模型假设随机变量是独立的。

我们可以用谱聚类算法对特征进行聚类来解决这个问题。

我们的数据集包括三张表:2021-2022赛季NBA球员的平均数据、高级数据和每百次控球数据。在球员姓名栏中加入特征后,我们计算特征的方差膨胀系数(VIF)来研究多重共线性。结果得到了下表:

使用谱聚类(spectral clustering)进行特征选择

因为合并了三个表,所以这些表中的一些特征彼此相关。

从相关矩阵创建图

为了能够看到相关的特征,我们画了一个特征图,将高度相关的特征连接在一起,希望能够找到公共相关性,循环相关性应该创建一些区域,其中每个特征依赖于其他特征。

 # We only display correlations higher than 0.7 in absolute value
 G=nx.Graph()
 foriinrange(len(columns)):
     col1=columns[i]
     forjinrange(i):
         col2=columns[j]
         val=corr_matrix.values[i,j]
         ifabs(val) >vis_threshold:
             G.add_edge(columns.index(col1), columns.index(col2) , color=get_color(abs(val), color_threshold))

使用谱聚类(spectral clustering)进行特征选择

圆圈内的每一个整数都对应这个图中的一个特征。看看在图的右下角形成一个五边形的公共相关性,10-3323-3-4。

10:投篮命中率,33:进攻效率,23:真实命中率,3:有效投篮命中率。这几个都表示进攻的效率。

而中心的密集连接使我们无法手工选择所有的特征。所以需要一种数学方法来找到这些规律。

拉普拉斯特征图

首先需要为一对特征定义“链接”或“邻居”的概念。我们的目标是将上图分解为不相连的部分,其中每个部分都由成对相关的特征组成,不同的部分应尽可能独立。由于我们只显示高于 0.7 的相关性(绝对值,相关性也可以为负,这里不关心符号),因此使用以下邻接矩阵定义:

使用谱聚类(spectral clustering)进行特征选择

我们有D个特征,矩阵B是邻接矩阵。

而我们希望在K维空间中找到这些特征的表示形式,其中K是用户定义的数字,指定将使用多少个坐标来表示每个特征。拉普拉斯特征映射方法的目的是寻找特征的表示法,使相邻特征尽可能接近地表示。这是通过以下损失函数[1]来实现的。

使用谱聚类(spectral clustering)进行特征选择

y向量是K维特征的表示。E函数惩罚相邻表示之间的距离。我们与论文不同,将y按行而不是列堆叠,以便更容易地看到特征向量的坐标解释。D是数据中特征的数量。

通过显式地写出这个和的项,可以很容易地看到这个问题实际上是一个轨迹最小化问题。

使用谱聚类(spectral clustering)进行特征选择

对使用 D 矩阵缩放的 Y 施加正交约束,可以从与 K 个最小非零特征值相关联的归一化拉普拉斯算子的特征向量中获得此优化问题的解 Y [1]。

使用谱聚类(spectral clustering)进行特征选择

Y矩阵的初始定义是将表示叠加到行上,但这里我们将特征向量叠加到列上,表明每个特征向量为表示增加一个维度。

我们最初的目标是将邻接图切割成小块,其中每个小块是一组独立于其他小块的特征。

这里我们想用损失函数来模拟目标。所以假设有m个不相交的邻接图顶点子集,惩罚子集之间的交叉连接,也就是说,不希望一个子集中的顶点连接到另一个子集[1]中的顶点。

使用谱聚类(spectral clustering)进行特征选择

这里的F是符合目标的损失函数。分子在一个顶点的交叉连接上求和,用总的簇内连接归一化。这里可以将总和中的项解释为给定子集的交叉连接与内部连接的比率。不相交的子集实际上就是要寻找的特征的谱簇。

下一步就是要证明拉普拉斯特征映射误差F和E之间的相似性。对于特征(上面定义的V集)的给定划分(聚类),定义一个矩阵Z,其形状为(D, m)。

使用谱聚类(spectral clustering)进行特征选择

该矩阵的列表示簇的元素。为了更清楚地说明这一点,这里演示了当D = 4和m = 3时这个矩阵是怎样的

使用谱聚类(spectral clustering)进行特征选择

上图有问题,只是为了演示

函数F是

使用谱聚类(spectral clustering)进行特征选择

这里的L是上面定义的拉普拉斯矩阵。与拉普拉斯特征映射的轨迹恒等式相同,但约束条件不同。

这样,我们将找到簇的问题变为找到一个最小化这条轨迹的上述形式的矩阵 Z。尽管有相似性,但这与拉普拉斯特征图不是同一个问题,因为 Z 的选择仅限于上述形式。如果不局限于这种形式,则Z的列一定是前m个特征向量。

为了放宽此约束并使用拉普拉斯特征图的机制,并且观察到 Z 矩阵的每一行都分配给一个簇,这与拉普拉斯特征映射类似,所以可以用Y矩阵代替Z, Y矩阵的行是K维特征的表示。所以要使用这两个最小化问题之间的联系,Z可以被认为是Y行的聚类版本。为了简化问题,只要设置Z等于与前m个非零最小特征值相关的前m个特征向量的堆栈,然后将其行聚类。

聚类步骤

取拉普拉斯算子的前 7 个特征向量来构造 Z,并采用分层聚类方法寻找Z行内的聚类。

使用谱聚类(spectral clustering)进行特征选择

我们检查树图,决定设置n_cluster = 6。这些特征簇是:

使用谱聚类(spectral clustering)进行特征选择

这6个组都有有意义的解释。

  • 第一个有点复杂,因为图的中心有一个非常密集的区域但是可以看到投篮次数、罚球次数、PER、使用率和场均时间统计数据被收集在这里,其他数据随着球员上场时间和进攻责任的增加而增加。因此可以得出结论,这个簇对应于进攻活动。
  • 第二个是组织能力,因为持球者通常有更高的失误。
  • 第三个对应进攻效率。
  • 第四个只有一个特征,表示球员的防守技巧
  • 第五个是篮板能力。
  • 最后一个是球员的三分球技术。

这里一个很好的发现是,我们的方法成功地区分了篮板和防守技能。好的篮板手并不总是好的防守(篮板包含进攻和防守,而防守不仅仅只有篮板),但是他们之间可能存在相关性。

该方法可以说的确成功地找到了邻接图的分组

总结

本文中我们绘制了特征的邻接图,展示了如何通过拉普拉斯矩阵的行发现特征之间的公共相关性,并进行聚类。

本文的代码:

https://avoid.overfit.cn/post/cfaa81824c714736970e7f49ffde07ab

作者:Yiğithan Gediz

点赞
收藏
评论区
推荐文章
不是海碗 不是海碗
2年前
IP 归属地查询 API 教你从0到1顺着网线找到键盘侠
IP归属地是利用大数据挖掘和大规模网络探测技术,对IP地址的基础信息和网络拓扑数据进行采集、处理,结合IP地址所在的应用场景与网络属性等因素,利用动态密度聚类算法和基于多层神经网络的IP地址定位算法,完成IP地址地理位置定位。
待兔 待兔
3年前
面向对象设计原则之 - 高内聚
通常在面向对象设计中,我们经常听到,高内聚,低耦合,那么到底什么是内聚呢?内聚究竟是什么?参考百度百科的解释,内聚的含义如下:内聚(Cohesion),科学名词,是一个模块内部各成分之间相关联程度的度量。我自己的理解是:内聚指一个模块内部元素之间的紧密程度看起来很好理解,但只要深入思考一下,其实没有那么简单。首先,“模块”如何理解?一定会有人说,模块
专注IP定位 专注IP定位
3年前
聚类算法有哪些?又是如何分类?
想要了解聚类算法并对其进行区别与比较的话,最好能把聚类的具体算法放到整个聚类分析的语境中理解。聚类分析是一个较为严密的数据分析过程。从聚类对象数据源开始到得到聚类结果的知识存档,共有四个主要研究内容聚类分析过程:1984年,Aldenderfer等人提出了聚类分析的四大功能:一是数据分类的进一步扩展;二是对实体归类的概念性探索;三是通过数据探索而生成假
Wesley13 Wesley13
3年前
MySQL中Innodb的聚簇索引和非聚簇索引
聚簇索引数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种。Innodb的聚簇索引在同一个BTree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中,中间的节点页保存指向下一层页面的指针。“聚簇”的意思是数据行被按照一定顺序一个个紧密地排列在一起存储。一个表只能有一个聚簇索引,因为在一个表中数据的
Stella981 Stella981
3年前
DGA聚类 使用DBScan
featuressc.parallelize(data\_group\idx\).map(lambdax:(x.host\_ip'^'x.domain,1)).reduceByKey(operator.add).map(get\_domain\_features)defget\_domain\_features(x):   
Wesley13 Wesley13
3年前
Java 类之间的关系
总述类和类之间的关系,耦合度从高到低:is。继承、实现has。组合、聚合、关联use。依赖。要求是:高内聚、低耦合。继承Person和Man之间是继承关系。!(https://oscimg.oschina.net/oscnet/7b9f06e3a37b7bc9c5c2fe14
Wesley13 Wesley13
3年前
KNN分类算法原理分析及代码实现
1、分类与聚类的概念与区别分类:是从一组已知的训练样本中发现分类模型,并且使用这个分类模型来预测待分类样本。目前常用的分类算法主要有:朴素贝叶斯分类算法(NaïveBayes)、支持向量机分类算法(SupportVectorMachines)、KNN最近邻算法(kNearestNeighbors)、神经网络算法(NNet)以及决策树(De
linbojue linbojue
1年前
史上最全的后端技术
系统开发1.高内聚/低耦合高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方
尤老娘 尤老娘
3个月前
提高IT运维效率,深度解读京东云基于自然语言处理的运维日志异常检测AIOps落地实践
作者:京东科技张静基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要。解决这一问题的传统方法需要复杂的基于规则的有监督方法和大量的人工时间成本。我们提出了一种基于自然语言处理
京东云开发者 京东云开发者
3个月前
提高IT运维效率,深度解读京东云基于自然语言处理的运维日志异常检测AIOps落地实践
作者:京东科技张静基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要。解决这一问题的传统方法需要复杂的基于规则的有监督方法和大量的人工时间成本。我们提出了一种基于自然语言处理