谱聚类算法—Matlab代码
% =========================================================================
% 算 法 名 称: Spectral Clustering Algorithm
% 编 码 作 者: Lee Wen-Tsao
% 编 码 邮 箱: liwenchao36@163.com
% 输 入 参 数:
% W ---> 邻接矩阵
% k ---> 簇数目
% t ---> 拉普拉斯矩阵归一化处理类型
% =========================================================================
%% step1: 清理运行环境
clc;
clear;
close all;
%% step2: 读入数据
Iris = uiimport('iris.data');
Iris = cellfun(@(x) regexp(x,',','split'), Iris.iris,'UniformOutput',false);
data = cellfun(@(x) x(:,1:4),Iris,'UniformOutput',false);
data = str2double(reshape([data{:}],4,150)');
%% step3: 构造相似矩阵
H = pdist2(data, data, 'euclidean');
W = 1-exp(-(H.^2)./2);
triu_W = triu(W, 0)./(sum(triu(W, 0),2) + eps);
W = triu_W' + triu_W;
%% step4: 计算度矩阵
d = sum(W, 2); % 对W进行列求和
D = sparse(1:size(W,1), 1:size(W,2), d); % 然后将d中的元素放到对角线上
%% step5: 计算拉普拉斯矩阵
% 1.未标准化的拉普拉斯矩阵
L = D - W;
% 2.正则拉普拉斯矩阵
t = 'Symmetric';
switch t
case 'RandomWalk'
% 避免除以0
d(d==0) = eps;
% 计算D的逆
D = spdiags(1./d, 0, size(D, 1), size(D, 2));
% 随机游走正则化拉普拉斯矩阵
L = D*L;
case 'Symmetric'
% 避免除以0
d(d==0) = eps;
% 计算D^(1/2)
D = spdiags(1./(d.^0.5), 0, size(D, 1), size(D, 2));
% 对称正则化拉普拉斯矩阵
L = D*L*D;
end
%% step5: 特征值和特征向量
% 1.V表示特征向量;lamda表示特征值
k = 3;
[U, lamda] = eigs(L, k, 'smallestabs'); % 不能这么求特征向量,特征向量有重数
if strcmp('Symmetric', t)
% 对称拉普拉斯矩阵单位化
U = bsxfun(@rdivide, U, sqrt(sum(U.^2, 2)));
end
%% step6: 使用kmeans对函数分类
% 0. 问题定义
labels = zeros(size(U,1),1);
errors = zeros(k, 1);
expose = 1;
% 1. 初始化簇心
loc = randperm(size(U,1));
centroids = U(loc(1:k),:);
% 2. 迭代
N_iter = 1000;
for it=1:N_iter
for i=1:size(U,1)
dists = sqrt(sum((U(i,:) - centroids).^2, 2)); % 计算每个数据到k个簇心的距离
[distMin, idx] = min(dists); % 寻找距离每个簇心的最小距离
labels(i,:) = idx; % 给每个数据标注
end
% 3. 计算误差率
for j=1:k
errors(j, :) = sum(sqrt(sum((U(j==labels, :)- centroids(j, :)).^2, 2)));
end
% 4. 可视化
if expose
disp(sum(errors));
end
% 5. 更新簇心
for j=1:k
centroids(j,:) = mean(U((j==labels),:),1);
end
end
思考:
- 为什么要使用拉普拉斯正则化?
拉普拉斯正则化过程有两个:
(1)随机游走拉普拉斯正则化
(2)对称拉普拉斯正则化 - 上述拉普拉斯正则化的理论基础是什么?
- 这种降维方式的原理是什么呢?
- 这种聚类算法效果为啥没有论文里说的那么好,问题出现在哪里?
谱聚类算法—Matlab代码的更多相关文章
- 谱聚类算法及其代码(Spectral Clustering)
https://blog.csdn.net/liu1194397014/article/details/52990015 https://blog.csdn.net/u011089523/articl ...
- 密度峰值聚类算法MATLAB程序
密度峰值聚类算法MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 密度峰值聚类算法简介见:[转] 密度峰值聚类算法(DPC) 数据见:MATL ...
- 谱聚类算法(Spectral Clustering)
谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的 ...
- 谱聚类算法(Spectral Clustering)优化与扩展
谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用.本文将讲述进一步扩展其应用场景:首先是User- ...
- K-medodis聚类算法MATLAB
国内博客,上介绍实现的K-medodis方法为: 与K-means算法类似.只是距离选择与聚类中心选择不同. 距离为曼哈顿距离 聚类中心选择为:依次把一个聚类中的每一个点当作当前类的聚类中心,求出代价 ...
- K-modes聚类算法MATLAB
K-modes算法主要用于分类数据,如 国籍,性别等特征. 距离使用汉明距离,即有多少对应特征不同则距离为几. 中心点计算为,选择众数作为中心点. 主要功能: 随机初始化聚类中心,计算聚类. 选择每次 ...
- K-means聚类算法MATLAB
以K-means算法为例,实现了如下功能 自动生成符合高斯分布的数据,函数名为gaussianSample.m 实现多次随机初始化聚类中心,以找到指定聚类数目的最优聚类.函数名myKmeans.m 自 ...
- 谱聚类Ng算法的Matlab简单实现
请编写一个谱聚类算法,实现"Normalized Spectral Clustering-Algorithm 3 (Ng 算法)" 结果如下 谱聚类算法核心步骤都是相同的: •利用 ...
- 基于谱聚类的三维网格分割算法(Spectral Clustering)
谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...
随机推荐
- BootStrap中模态框踩坑
在模态框中使用html标签上的自定义属性来打开模态框后,在使用JS关闭模态框,就会出现多层蒙板问题 出现这个问题的原因就是没有仔细看bootstrap的官方文档,我人麻了,搞了好久 务必将模态框的 H ...
- InnoDB 索引详解
1.什么是索引 索引是存储引擎用于快速找到记录的一种数据结构. 2.索引有哪些数据结构 顺序查找结构:这种查找效率很低,复杂度为O(n).大数据量的时候查询效率很低. 有序的数据排列:二分查找法又称折 ...
- [cf1515I]Phoenix and Diamonds
将$n$类物品按照价值为第一关键字(从大到小).质量为第二关键字(从小到大)排序,此时贪心策略即依次贪心选(排序后)第$i$类的物品(其中$i$从1到$n$) 为了方便,排序后第$i$类物品质量.价值 ...
- [atAGC022D]Shopping
称0到$L$的方向为左,同时为了方便,可以假设$0<t_{i}\le 2L$ 当我们确定是进入店中的方向,根据这个店的位置以及购物时间,不难确定出来时火车经过0或$L$的次数,由于$0<t ...
- idea创建 springboot工程(支持jsp)
以前学springboot以前想搭建一个支持jsp的项目一直弄不上,现在发现用maven创建一个项目然后改成springboot效果一样的 https://blog.csdn.net/gisboygo ...
- [FJOI2021]游记
高一这条命早在\(NOIP\)就没了,现在不过是强行续命罢了,希望死的不要很难看. 高二重开一档,最后一条命了,希望能高二进队\(Orz\). \(Day -2\) 开始敲板子. 先写了个交互的题,猜 ...
- Codeforces 626G - Raffles(贪心+堆)
题面传送门 考虑对于固定的彩票池 \(i\),我们假设现在押了 \(x\) 张彩票.利用差分的思想,从 \(x\) 张彩票变为 \(x+1\) 张时,期望的变化量 \(\Delta E=\dfrac{ ...
- Bedtools genomecov 计算覆盖度
简单说明: 从2.28.0版开始,bedtools使用htslib库支持CRAM格式 除了BAM文件,bedtools默认所有的输入文件都以TAB键分割 除非使用-sorted选项,bedtools默 ...
- [Linux] 非root安装GCC9.1.0
说明 一般Linux系统自带或公共的GCC版本都很低,如目前我们的服务器版本的GCC还停留在gcc-4.9.3,而官网已到达9.2版本(下载http://ftp.gnu.org/gnu/gcc/) , ...
- A Child's History of England.4
Still, the Britons would not yield. They rose again and again, and died by thousands, sword in hand. ...