当前位置: 首页 > news >正文

谱聚类

谱聚类算法:1
在这里插入图片描述
针对如下数据:

import matplotlib.pyplot as plt

def gen_ring(r, var, num):
    r_array = np.random.normal(r,var,num)
    t_array = [ np.random.random()*2*np.math.pi for i in range(num)]
    data = [[r_array[i]*np.math.cos(t_array[i]),
             r_array[i]*np.math.sin(t_array[i])] 
            for i in range(num)]
    return data

def gen_gauss(mean,cov,num):     
    return np.random.multivariate_normal(mean,cov,num)
    
def gen_clusters():
    data = gen_ring(1,0.1,100)
    data = np.append(data,gen_ring(3,0.1,300),0)
    data = np.append(data,gen_ring(5,0.1,500),0)
    mean = [7,7]
    cov = [[0.5,0],[0,0.5]]
    data = np.append(data,gen_gauss(mean,cov,100),0)
    return np.round(data,4)

def show_scatter(data,colors):
    cm = plt.cm.get_cmap('Spectral')
    x,y = data.T
    plt.scatter(x,y,c=colors,cmap=cm)
    plt.axis()
    plt.xlabel("x")
    plt.ylabel("y")

data = gen_clusters()
show_scatter(data,'k')
plt.show()

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 径向基函数 计算相似度
def affinity(a,b):
    one_over_2sigma2 = 10
    return np.math.exp(-one_over_2sigma2*np.dot(a-b,a-b))

# 前 k 大特征值对应的 k 个特征向量
def topk(mat,k):
    e_vals,e_vecs = np.linalg.eig(mat)
    sorted_indices = np.argsort(e_vals)
    return e_vals[sorted_indices[:-k-1:-1]],e_vecs[:,sorted_indices[:-k-1:-1]]

data = gen_clusters()

# 每个点之间的相似度
A = np.matrix([[affinity(i,j) for i in data] for j in data])

# 此处D对应算法中 D^{-1/2}
D = np.matrix(np.sqrt(np.diag(np.sum(A,axis=1).flatten().getA()[0]))).I

# 对应算法中的 L
L = D.dot(A).dot(D)

# 前 4 个特征向量
vals,X = topk(L,4)

# Y 具有单位行向量的
Y = np.matrix(np.diag(np.sqrt(np.sum(np.multiply(X,X),axis=1)).flatten().getA()[0])).I.dot(X)

# 用 K-Means 对Y的行向量聚类
estimator = KMeans(init='k-means++', n_clusters=4, n_init=4)
estimator.fit(Y)
label2color = ['r','g','b','k']
colors = [label2color[i] for i in estimator.labels_]
show_scatter(data,colors)
plt.show()

结果如下:
在这里插入图片描述


  1. Ng A Y, Jordan M I, Weiss Y. On spectral clustering: analysis and an algorithm[J]. Proc Nips, 2001, 14:849–856. ↩︎

相关文章:

  • XX^{T} 和 X^{T}X 的关系
  • Think in Code,用代码思考
  • PCA 主成分分析
  • 范数的共轭函数
  • Python几种开发工具介绍
  • 对偶锥与自对偶
  • VC2005使用SQLite,适用于WIN32以及WINCE
  • 凸函数的梯度的单调性 (Monotonicity of gradient)
  • 恢复Debian下root用户bash高亮显示
  • SVM——支持向量机
  • VMWare桥接模式虚拟机网络配置
  • SVM——支持向量机【Latex原稿】
  • VMWare Pocket ACE实例包的创建
  • AdaBoost 算法
  • 文件读写操作的缓存机制
  • JavaScript-如何实现克隆(clone)函数
  • python3.6+scrapy+mysql 爬虫实战
  • 【RocksDB】TransactionDB源码分析
  • 08.Android之View事件问题
  • android 一些 utils
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Date型的使用
  • express.js的介绍及使用
  • HomeBrew常规使用教程
  • HTTP那些事
  • leetcode388. Longest Absolute File Path
  • Magento 1.x 中文订单打印乱码
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL几个简单SQL的优化
  • React中的“虫洞”——Context
  • Vue 2.3、2.4 知识点小结
  • 工作手记之html2canvas使用概述
  • 离散点最小(凸)包围边界查找
  • 每天10道Java面试题,跟我走,offer有!
  • 使用 @font-face
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • HanLP分词命名实体提取详解
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #Lua:Lua调用C++生成的DLL库
  • #pragma 指令
  • #QT(一种朴素的计算器实现方法)
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (搬运以学习)flask 上下文的实现
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)php新闻发布平台 毕业设计 141646
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (十一)c52学习之旅-动态数码管
  • (四)模仿学习-完成后台管理页面查询
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • ..回顾17,展望18
  • .form文件_一篇文章学会文件上传