聚类算法(六)——谱聚类 (含代码)
聚类算法相关:
聚类算法(一)——DBSCAN
聚类算法(二)—— 优缺点对比
聚类算法(三)—— 评测方法1
聚类算法(三)—— 评测方法2
聚类算法(三)—— 评测方法3(代码)
聚类算法(四)—— 基于词语相似度的聚类算法(含代码)
聚类算法(五)——层次聚类 linkage (含代码)
聚类算法(六)——谱聚类 (含代码)
原理
谱聚类是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据聚类的目的。谱聚类可以理解为将高维空间的数据映射到低维,然后在低维空间用其它聚类算法(如KMeans)进行聚类。
代码
'''
谱聚类方法
参考github代码:https://github.com/leekeiling/Cluster/blob/master/spectral.py
原理介绍:https://blog.csdn.net/qq_24519677/article/details/82291867
'''from sklearn.cluster import KMeans
import numpy as np
import math as m
import matplotlib.pyplot as plt
import pandas as pd
from collections import OrderedDictfrom cluster_v2 import Embedding, load_keywords# import evaluate as eval# flame.txt
# Jain_cluster=2.txt
# Aggregation_cluster=7.txt
# Spiral_cluster=3.txt
# Pathbased_cluster=3.txtdata_path = "flame.txt"def load_data():"""导入数据:return:"""points = np.loadtxt(data_path, delimiter='\t')return pointsdef get_dis_matrix(data):"""获得邻接矩阵:param data: 样本集合:return: 邻接矩阵"""nPoint = len(data)dis_matrix = np.zeros((nPoint, nPoint))for i in range(nPoint):for j in range(i + 1, nPoint):dis_matrix[i][j] = dis_matrix[j][i] = m.sqrt(np.power(data[i] - data[j], 2).sum())return dis_matrixdef getW(data, k):"""利用KNN获得相似矩阵:param data: 样本集合:param k: KNN参数:return:"""dis_matrix = get_dis_matrix(data)W = np.zeros((len(data), len(data)))for idx, each in enumerate(dis_matrix):index_array = np.argsort(each)W[idx][index_array[1:k+1]] = 1tmp_W = np.transpose(W)W = (tmp_W+W)/2return Wdef getD(W):"""获得度矩阵:param W: 相似度矩阵:return: 度矩阵"""D = np.diag(sum(W))return Ddef getL(D, W):"""获得拉普拉斯举着:param W: 相似度矩阵:param D: 度矩阵:return: 拉普拉斯矩阵"""return D - Wdef getEigen(L):"""从拉普拉斯矩阵获得特征矩阵:param L: 拉普拉斯矩阵:return:"""eigval, eigvec = np.linalg.eig(L)ix = np.argsort(eigval)[0:cluster_num]return eigvec[:, ix]def plotRes(data, clusterResult, clusterNum):"""结果可视化:param data: 样本集:param clusterResult: 聚类结果:param clusterNum: 聚类个数:return:"""nPoints = len(data)scatterColors = ['black', 'blue', 'green', 'yellow', 'red', 'purple', 'orange']for i in range(clusterNum):color = scatterColors[i % len(scatterColors)]x1 = []; y1 = []for j in range(nPoints):if clusterResult[j] == i:x1.append(data[j, 0])y1.append(data[j, 1])plt.scatter(x1, y1, c=color, alpha=1, marker='+')plt.show()if __name__ == '__main__':cluster_num = 10KNN_k = 5keywords = [] # 需要聚类的词语 句子的话可以采用fasttext向量或者TfidfVectorizer, 参见开头其它聚类文章embedding_file2 = ''embedding_model2 = Embedding(embedding_file2, 200, type='w2v')X = [embedding_model2.get_word_embedding(keyword) for keyword in keywords]data = X# data = load_data()data = np.asarray(data)W = getW(data, KNN_k)D = getD(W)L = getL(D, W)eigvec = getEigen(L)clf = KMeans(n_clusters=cluster_num)s = clf.fit(eigvec)labels = s.labels_# plotRes(data, np.asarray(C), 7) # plot 展示print(labels)data = []dic = OrderedDict()for keyword, label in zip(keywords, labels):dic.setdefault(label, [])dic[label].append(keyword)for item in dic:data.extend([[x, item] for x in dic[item]])data.append([])df = pd.DataFrame(data=data, columns=['keyword', 'class_index'])df.to_excel(result_file, index=False)
参考链接:
https://blog.csdn.net/qq_24519677/article/details/82291867
https://github.com/leekeiling/Cluster/blob/master/spectral.py
聚类算法(六)——谱聚类 (含代码)相关推荐
- python谱聚类算法_谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 聚类算法实践——谱聚类、Chameleon聚类
转载自:http://www.itongji.cn/article/0R52D42013.html 上一篇文章里说到的层次聚类和K-means聚类,可以说是聚类算法里面最基本的两种方法(wiki的cl ...
- python谱聚类算法_谱聚类Spectral clustering(SC)
在之前的文章里,介绍了比较传统的K-Means聚类.Affinity Propagation(AP)聚类.比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian ...
- python谱聚类算法_谱聚类 - python挖掘 - 博客园
谱聚类(Spectral Clustering,SC)是一种基于图论的聚类方法,将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量远.能够识别任意形状的样本空间且收敛于全 ...
- 机器学习(聚类十)——谱聚类及代码实现
谱聚类是基于谱图理论基础上的一种聚类方法,与传统的聚类方法相比:具有在任意形状的样本空间上聚类并且收敛于全局最优解的优点.(但效率不高,实际工作中用的比较少) 谱聚类 通过对样本数据的拉普拉斯矩阵的特 ...
- python谱聚类算法_Python机器学习高级算法!谱聚类(Spectal Clustering)算法分析和实例详解...
谱聚类(Spectal Clustering)算法是聚类算法的一种,比起传统的K-Means聚类算法,谱聚类算法的效果更优秀,其计算量也小很多,除了谱聚类和K-Means聚类算法,另外还有密度聚类和层 ...
- ML之Clustering之普聚类算法:普聚类算法的相关论文、主要思路、关键步骤、代码实现等相关配图之详细攻略
ML之Clustering之普聚类算法:普聚类算法的相关论文.主要思路.关键步骤.代码实现等相关配图之详细攻略 目录 普聚类算法的相关论文 普聚类算法的主要思路 普聚类算法的关键步骤 普聚类算法的代码 ...
- 基于KMeans聚类的协同过滤推荐算法推荐原理、过程、代码实现 Canopy聚类算法 KMeans+Canopy聚类算法 聚类算法程序实现 KMEans聚类算法代码java
基于KMeans聚类的协同过滤推荐算法可运用于基于用户和基于项目的协同过滤推荐算法中,作为降低数据稀疏度和提高推荐准确率的方法之一,一个协同过滤推荐过程可实现多次KMeans聚类. 一.基于KMean ...
- 模式识别:C-means(K-means)聚类算法与分级聚类(层次聚类)算法
C均值聚类算法与分级聚类算法的聚类分析 一.实验目的 理解聚类的整体思想,了解聚类的一般方法: 掌握 C-means与分级聚类算法算法思想及原理,并能够熟练运用这些算法进行聚类分析: 能够分析二者的优 ...
- 【聚类算法】常见聚类算法总结
转自:https://blog.csdn.net/u010062386/article/details/82499777 感谢博主 1.常见算法 1.原型聚类 "原型"是指样本空间 ...
最新文章
- RecycleView中使用Glide加载图片防止加载错乱
- 【数据挖掘笔记六】挖掘频繁模式、关联和相关性:基本概念和方法
- SpringIOCAOP
- HEVC支持苹果HLS的几个关键问题
- java 长轮询_java – Spring中的长轮询
- 前端学习(1774):前端调试之local storage原理和查看
- 本地缓存之Guava简单使用
- .net core consul 服务配置 服务发现 服务健康检测 服务变更加载
- 安装Kubernetes V1.18.2
- 白板随手一画,嗖嗖变成代码
- ubuntu16.04 安装python3.6
- html访问共享文件夹,教大家如何通过IP地址访问共享文件夹
- exposure x5胶片滤镜插件如何安装及使用下载技巧
- Unity3D引擎入门搭建一个FPS游戏Demo
- 2022年Java应届生面试之Spring框架基础知识
- 美国队长的工资 python代码-Python入门必学,用Python练习画个美队盾牌
- PyQT之多窗口切换
- mysql 分区 less than_mysql分区
- 系统中IDE硬盘与SCSI硬盘的区别
- 吴恩达深度学习笔记(10)-更多的导数讲解