谱聚类算法

原文地址:http://blog.csdn.net/hjimce/article/details/45749757

作者:hjimce

一、算法概述

谱聚类算法建立在谱图理论基础上,与传统的聚类算法相比,它具有能在任意形状的样本空间上聚类且收敛于全局最优解的优点。  谱聚类的求解方法有很多种,其中比较简单常用的是Nomarlized cut。其算法流程如下:

1、采用knn搜索最近k邻样本,然后构造样本相似度稀疏矩阵W(N,N)(如果不采用knn,那么构造的是全连接图,不是稀疏矩阵,如果样本多的话,求解起来速度就会很慢了),两样本之间的相似度度量可采用如下公式:

这边先定义W的对角线元素为0(Wii=0),然后归一化这个W矩阵的每一行和为1。

2、对W矩阵做归一化处理后,构造归一化的拉普拉斯矩阵L(归一化的拉普拉斯矩阵的对角线元素为1,每一行所有元素和为0),即:

L=I-W

3、求解L矩阵的前k个最小特征值对应的特征向量(k为聚类的个数),然后把这K个特征向量竖着并排在一起,形成一个新的特征向量空间数据E(N,K)的矩阵。这样E每一行对应于原始数据的每一个样本,然后我们对这N行数据做k-means聚类(也可以用其它的聚类方法),得到的聚类结果就是谱聚类的结果。

二、源码实践

#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster   import KMeans
import random#生成两个高斯分布训练样本用于测试
#第一类样本类
mean1 = [0, 0]
cov1 = [[1, 0], [0, 1]]  # 协方差矩阵
x1, y1= np.random.multivariate_normal(mean1, cov1, 100).Tdata=[]
for x,y in zip(x1,y1):data.append([x,y])
#第二类样本类
mean2 = [3,3]
cov2 = [[1, 0], [0, 1]]  # 协方差矩阵
x2, y2= np.random.multivariate_normal(mean2, cov2, 100).T
for x,y in zip(x2,y2):data.append([x,y])
random.shuffle(data)#打乱数据
data=np.asarray(data,dtype=np.float32)#算法开始
#计算两两样本之间的权重矩阵,在真正使用场景中,样本很多,可以只计算邻接顶点的权重矩阵
m,n=data.shape
distance=np.zeros((m,m),dtype=np.float32)for i in range(m):for j in range(m):if i==j:continuedis=sum((data[i]-data[j])**2)distance[i,j]=dis
#构建归一化拉普拉斯矩阵
similarity = np.exp(-1.* distance/distance.std())
for i in range(m):similarity[i,i]=0for i in range(m):similarity[i]=-similarity[i]/sum(similarity[i])#归一化操作similarity[i,i]=1#拉普拉斯矩阵的每一行和为0,对角线元素之为1#计算拉普拉斯矩阵的前k个最小特征值
[Q,V]=np.linalg.eig(similarity)
idx = Q.argsort()
Q = Q[idx]
V = V[:,idx]
#前3个最小特征值
num_clusters =3
newd=V[:,:3]#k均值聚类
clf = KMeans(n_clusters=num_clusters)
clf.fit(newd)
#显示结果
for i in range(data.shape[0]):if clf.labels_[i]==0:plt.plot(data[i,0], data[i,1], 'go')elif clf.labels_[i]==1:plt.plot(data[i,0], data[i,1], 'ro')elif clf.labels_[i]==2:plt.plot(data[i,0], data[i,1], 'yo')elif clf.labels_[i]==3:plt.plot(data[i,0], data[i,1], 'bo')plt.show()

聚类结果:

参考文献:

1、http://liuzhiqiangruc.iteye.com/blog/2117144

************************作者:hjimce     联系qq:1393852684原创文章,转载请保留作者、原文地址信息*************

机器学习(十一)谱聚类算法相关推荐

  1. 机器学习之谱聚类算法

    参考https://www.cnblogs.com/pinard/p/6221564.html 谱聚类(spectral clustering)是一种基于图论的聚类算法,第一步是构图:将数据集中的每个 ...

  2. python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...

    谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...

  3. 【机器学习】5:谱聚类算法原理介绍

    前言:学习谱聚类,最好有一些图论.矩阵分解(SVD)方面的知识,这样会更加有利于谱聚类的学习.当然,谱聚类理解起来并不困难,实际操作也大多是谱聚类+K-means聚类联合使用的. –--------- ...

  4. 聚类(下) 谱聚类算法

    谱聚类算法 该算法首先根据给定的样本数据集定义一个描述成对数据点相似度的亲合矩阵,并且计算矩阵的特征值和特征向量 , 然后选择合适 的特征向量聚类不同的数据点.谱聚类算法最初用于计算机视觉 .VLS ...

  5. 谱聚类算法入门教程(一)——Introduction

    该教程记录了我从一个聚类算法小白学习谱聚类算法的过程,在开始学习之前,请确保你了解下面的知识: 线性代数矩阵的相关性质 导数的相关知识 欧式距离 图的基本知识 如果你学过上面的知识但是忘记了也没关系, ...

  6. 谱聚类python代码_Python 谱聚类算法从零开始

    谱聚类算法是一种常用的无监督机器学习算法,其性能优于其他聚类方法. 此外,谱聚类实现起来非常简单,并且可以通过标准线性代数方法有效地求解. 在谱聚类算法中,根据数据点之间的相似性而不是k-均值中的绝对 ...

  7. 聚类算法小结(2)——谱聚类算法

    上一篇博客中简单介绍了K均值聚类算法,在本篇博客中介绍一下关于谱聚类算法,简单谈一谈自己的心得.简单介绍一下谱聚类算法 谱聚类算法建立在谱图理论基础上,与传统的聚类算法相比,它具有能在任意形状的样本空 ...

  8. 小白入门谱聚类算法原理与实现

    小白入门谱聚类算法原理与实现 小白入门谱聚类算法原理与实现 1. 谱聚类是什么? 2.谱聚类步骤 2.1 谱聚类构图 2.2 谱聚类切图 2.2.1RatioCut 2.2.2Ncut 3谱聚类实现 ...

  9. 机器学习入门:聚类算法-5

    机器学习入门:聚类算法 1.实验描述 本实验先简单介绍了一下各聚类算法,然后利用鸢尾花数据集分别针对KMeans聚类.谱聚类.DBSCAN聚类建模,并训练模型:利用模型做预测,并使用相应的指标对模型进 ...

最新文章

  1. 如何解决请求URL长度超过配置的maxurlLength值问题
  2. excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇
  3. 11、E-commerce in Your Inbox:Product Recommendations at Scale-----产品推荐(prod2vec和user2vec)...
  4. 渗透工具开发——XSS平台的命令行实现
  5. python简单目标检测代码_Python Opencv实现单目标检测的示例代码
  6. python 将文件描述符包装成文件对象
  7. spring cloud 微服务调用--ribbon和feign调用
  8. git保留两个repo的commit并进行合并
  9. Keil 5 解锁被锁定的文件 修改其中的代码 STM32
  10. 多个PDF怎么免费合并成一个PDF
  11. 从高考到程序员——我一直在寻找答案
  12. Win10环境下安装VS2010旗舰版 和安装Visual Assist10.9.2108.0
  13. canvas实现动态矩形碰撞
  14. ES6读书笔记(下)
  15. 1.大数据存储选型——何时用hbase
  16. kafka动态权限认证(SASL SCRAM + ACL)
  17. android app 的后台代码,包括后台的Android美食APP项目开源代码
  18. Hadoop 和 spark 读取多个文件通配符规则(正则表达式)joe
  19. electron入门——安装及创建项目
  20. 功能点:3秒倒计时自动跳转指定页面

热门文章

  1. php用正则匹配远程图片,php中通过正则表达式下载内容中的远程图片的函数代码...
  2. 【Linux】kali 2019.4 安装中文输入法
  3. 终端母体服务器是心识,自我意识的觉醒与重返母体的归属.doc
  4. Linux通过SSH实现免密登录
  5. 蓝牙耳机按键事件linux,调用蓝牙耳机的按键,或者有线耳机的按键方法?
  6. linux7.0安装过程详解,图解红旗Linux7.0安装过程.doc
  7. windows怎么将图片变为单色图片_印刷丨单色黑与四色黑
  8. java按钮改变窗口大小_java – 当我们调整窗口大小时,Container中的元素如何调整?...
  9. ios APP进程杀死之后和APP在后台接收到推送点击跳转到任意界面处理
  10. vue的生命周期和钩子函数的理解