图解机器学习第四部分第十三章——与10近邻相似度对应的拉普拉斯特征映射图

n = 1000;
k = 10; % 10 近邻相似度
a = 3 * pi * rand(n,1);
x = [a.*cos(a) 30*rand(n,1) a.*sin(a)]; % 3 维
x = x-repmat(mean(x),[n,1]); % 中心化
x2=sum(x.^2,2);
d = repmat(x2,1,n)+repmat(x2',n,1)-2*x*x';% 高斯核函数
[p,i]=sort(d);
W = sparse(d<=ones(n,1)*p(k+1,:)); % 创建相似度矩阵(稀疏矩阵)
W = (W+W'~=0);
D=diag(sum(W,2));
L=D-W;
[z,v]=eigs(L,D,3,'sm'); % 求一般化特征值

figure(1);
clf;
hold on;
view([15 10]);
scatter3(x(:,1),x(:,2),x(:,3),40,a,'o');
figure(2);
clf;
hold on;
scatter(z(:,2),z(:,1),40,a,'o');



初始化变量:

n = 1000:数据点的数量。
k = 10:近邻的数量,用于计算相似度。
a = 3 * pi * rand(n,1):生成一个长度为n的随机向量a,用于生成数据点的坐标。
x = [a.*cos(a) 30*rand(n,1) a.*sin(a)]:根据随机向量a生成三维数据点的坐标。数据点的x坐标由a的余弦值决定,y坐标为随机值,z坐标由a的正弦值决定。
x = x-repmat(mean(x),[n,1]):将数据点进行中心化,即将每个维度的均值减去整个数据集在该维度上的均值。



计算相似度矩阵W:

x2=sum(x.^2,2):计算每个数据点的平方和。
d = repmat(x2,1,n)+repmat(x2',n,1)-2*x*x':计算数据点之间的欧氏距离的平方,得到距离矩阵d。
[p,i]=sort(d):对距离矩阵d进行排序,返回排序后的值和对应的索引。
W = sparse(d<=ones(n,1)*p(k+1,:)):创建相似度矩阵W,将距离小于等于第k+1个最近邻距离的元素设为1,其余元素设为0。这里使用了稀疏矩阵表示以节省内存。
W = (W+W'~=0):将相似度矩阵W转化为对称矩阵,将非零元素设为1。
D=diag(sum(W,2)):计算度矩阵D,对角线上的元素为每个数据点与其他数据点的相似度之和。




计算拉普拉斯矩阵L和一般化特征值:

L=D-W:计算拉普拉斯矩阵L,L的对角线元素为度矩阵D的对角线元素减去相似度矩阵W的对应元素。
[z,v]=eigs(L,D,3,'sm'):通过求解广义特征值问题,找到L对应于度矩阵D的前3个最小的特征值和特征向量。结果存储在z和v中,其中z是特征向量矩阵,v是特征值矩阵。




可视化结果:

figure(1):创建第一个图形窗口。
scatter3(x(:,1),x(:,2),x(:,3),40,a,'o'):在三维空间中绘制数据点的散点图,颜色由向量a决定。
figure(2):创建第二个图形窗口。
scatter(z(:,2),z(:,1),40,a,'o'):在二维空间中绘制数据点的散点图,颜色由向量a决定。这里只使用了z的前两个特征向量进行可视化。

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值