用MATLAB实现 L1正则化的深度谱聚类算法
输入 数据样本集 X ∈ Rd×n ,聚簇数 k
输出 X ∈ Rd×n的聚类结果
1)初始化:β,F参数;
2)利用自编码器对样本Xn×d提取特征并构造拉普拉斯矩阵L;
3)正交化步骤:从数据集中随机选择m 个样本并计算对应的正
交化模块输出,计算Cholesky分解得到正交权重;
4)随机梯度下降步骤:从数据集中再次随机选择 m 个样本构成
Xm×k,计算相似矩阵Wm×m并利用F计算m个样本的前k个拉普拉斯
特征向量并利用正交权重求解正交化输出Ym×k;
5)重复执行步骤3)~6),直到算法收敛;
6)用训练好的模型F (θ)得到特征向量y1,y2 ,⋯,yn;
7)利用k-means对y1 ,y2 ,⋯,yn进行聚类,得到样本的聚簇划分。
用MATLAB实现L1正则化的深度谱聚类算法
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
16条回答 默认 最新
- 逆水寒718 2024-03-25 21:39关注
以下是一种可能的实现方法:
clc; clear all; close all; % generate the data % data = kmeansRnd(2, 2, 500) % data = data'; data = dlmread('test1_data.txt'); data = data; figure(1),plot(data(:,1), data(:,2),'bo'), title('Original Data Points'); %saveas(gcf, '1.jpeg'); grid on;shg hold on; % calculate the affinity / similarity matrix (W) affinity = CalculateAffinity(data); % figure,imshow(affinity,[]), title('Affinity Matrix') % compute the degree matrix (D) for i=1:size(affinity,1) D(i,i) = sum(affinity(i,:)); end % compute the normalized laplacian / affinity matrix (method 1) %NL1 = D^(-1/2) .* L .* D^(-1/2); for i=1:size(affinity,1) for j=1:size(affinity,2) NL1(i,j) = affinity(i,j) / (sqrt(D(i,i)) * sqrt(D(j,j))); end end % compute the normalized laplacian (method 2) eye command is used to % obtain the identity matrix of size m x n % NL2 = eye(size(affinity,1),size(affinity,2)) - (D^(-1/2) .* affinity .* D^(-1/2)); % perform the eigen value decomposition [eigVectors,eigValues] = eig(NL1); % select k largest eigen vectors k = 4; nEigVec = eigVectors(:,(size(eigVectors,1)-(k-1)): size(eigVectors,1)); % construct the normalized matrix U from the obtained eigen vectors for i=1:size(nEigVec,1) n = sqrt(sum(nEigVec(i,:).^2)); U(i,:) = nEigVec(i,:) ./ n; end % perform kmeans clustering on the matrix U [IDX,C] = kmeans(U',3); IDX = IDX'; % plot the eigen vector corresponding to the largest eigen value %figure,plot(IDX) figure, hold on; for i=1:size(IDX,1) if IDX(i,1) == 1 plot(data(i,1),data(i,2),'bo'); elseif IDX(i,1) == 2 plot(data(i,1),data(i,2),'ro'); elseif IDX(i,1) == 3 plot(data(i,1),data(i,2),'go'); else plot(data(i,1),data(i,2),'yo'); end end
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
- ¥15 matlab自定义损失函数
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图