南无阿弥陀佛

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是修改后的代码实现: ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.datasets import make_swiss_roll from sklearn.decomposition import PCA from sklearn.manifold import Isomap import torch # 生成瑞士卷数据 X, color = make_swiss_roll(n_samples=1000, noise=0.2, random_state=42) # 可视化高维数据 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral) ax.set_title("Original Data") plt.show() # 对数据进行PCA降维并可视化 pca = PCA(n_components=2) X_pca = pca.fit_transform(X) plt.figure(figsize=(8, 6)) plt.scatter(X_pca[:, 0], X_pca[:, 1], c=color, cmap=plt.cm.Spectral) plt.title("PCA") plt.show() # 对数据进行ISOMAP降维并可视化 isomap = Isomap(n_components=2, n_neighbors=10) X_iso = isomap.fit_transform(X) # 定义低维坐标矩阵变量 X_iso_var = torch.tensor(X_iso, requires_grad=True) # 定义损失函数 def isomap_loss(X_var, A, b): # 计算欧氏距离矩阵D和权重矩阵W D = torch.cdist(X_var, X_var) W = torch.exp(-A*D**2 + b) # 计算低维距离矩阵D_iso和权重矩阵W_iso D_iso = torch.cdist(X_iso_var, X_iso_var) W_iso = torch.exp(-A*D_iso**2 + b) # 计算损失函数值 loss = torch.sum((W - W_iso)**2) return loss # 定义优化器和学习率 optimizer = torch.optim.Adam([X_iso_var], lr=0.01) # 训练过程 for i in range(1000): # 计算损失函数 loss = isomap_loss(X_var, A=0.1, b=0.1) # 梯度清零 optimizer.zero_grad() # 计算梯度 loss.backward() # 更新参数 optimizer.step() # 可视化低维数据 X_iso = X_iso_var.detach().numpy() plt.figure(figsize=(8, 6)) plt.scatter(X_iso[:, 0], X_iso[:, 1], c=color, cmap=plt.cm.Spectral) plt.title("ISOMAP") plt.show() ``` 这段代码实现了对瑞士卷数据的生成,并按照数据点位置关系赋颜色进行可视化;然后使用PCA和ISOMAP对数据进行降维,并按照高维数据点位置关系赋颜色进行可视化,观察效果。 其中,对ISOMAP降维后的低维空间坐标矩阵进行优化的过程,使用了PyTorch的自动微分机制实现梯度下降算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值