% 定义一个名为 specclustering 的函数,输入参数为数据矩阵 data,输出为两个聚类簇 cluster1 和 cluster2
function [cluster1,cluster2]=func_speccluster(data)
dim=size(data,2);% 获取数据矩阵的维度(列数)
W=zeros(dim); % 初始化相似度矩阵 W,大小为 dim x dim
% 计算每一对特征向量之间的相似度,并填充到 W 矩阵中
for i=1:dim
for j=1:dim
% 使用高斯核函数计算相似度,指数衰减因子为 0.1
W(i,j)=exp(-(norm(data(:,i)-data(:,j))^2)*0.1);
end
end
%初始化度矩阵 D,大小也为 dim x dim
D=zeros(dim);
for i=1:dim % 计算每个节点的度(邻居节点相似度之和)
sum=0;
for j=1:dim
sum=sum+W(i,j);
end
D(i,i)=sum;
end
L=D-W; % 计算拉普拉斯矩阵 L = D - W
K=0;
for i=1:dim% 计算拉普拉斯矩阵 L 的迹
K=K+L(1,i);
end
% 计算归一化拉普拉斯矩阵 P
P=(D^-0.5)*L*(D^-0.5);
% 计算归一化拉普拉斯矩阵 P 的特征值和特征向量
[V,B]=eig(P);
% 对特征值按升序排序,并获取排序后的特征向量对应的列索引
[~, ind]=sort(diag(B),'ascend');
% 排序后的特征向量
V2=V(:,ind);
% 初始化两个聚类簇为空
cluster1=[];
cluster2=[];
for i=1:dim% 根据第二特征向量的正负性将特征向量分配到两个不同的聚类簇
if(V2(i,2)<0)
cluster1=[cluster1 data(:,i)];% 将特征向量添加到 cluster1
else
cluster2=[cluster2 data(:,i)]; % 将特征向量添加到 cluster2
end
end
end
fpga和matlab
- 粉丝: 17w+
- 资源: 2630
最新资源
- 微信小程序接口工具包,耗费服务器,耗费开发后台,开箱即用,轻松开发小程序.zip
- 微信小程序拼音导航.zip
- 微信小程序手势解锁(Dom实现,避免小程序Canvas卡顿问题),基于原生小程序.zip
- 微信小程序所有API promise化,支持await、支持请求列队、支持拦截小程序所有API.zip
- 微信小程序录音播放录音demo.zip
- 基于CMSIS-DAP协议的ESP8266/ESP32无线调试器设计源码
- 基于Python和JavaScript的swdz_crawls思维定制爬虫设计源码
- 基于Java和Kotlin的RxTool设计源码同步自Gitee
- 基于HomeAssistant的ha-homepage浏览器主页设计源码
- 基于C#、JavaScript、Java、CSS的中小型C-S架构设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈