楼主: casey_c
2137 1

[程序分享] Scikit-Learn 流形学习(manifold learning) [推广有奖]

  • 0关注
  • 10粉丝

博士生

92%

还不是VIP/贵宾

-

威望
0
论坛币
96 个
通用积分
2.1003
学术水平
2 点
热心指数
15 点
信用等级
2 点
经验
11502 点
帖子
278
精华
0
在线时间
94 小时
注册时间
2016-11-22
最后登录
2022-5-2

楼主
casey_c 发表于 2017-7-4 11:43:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币



以下内容转自 数析学院,只节选了部分,有需要的同学可以直接查看原文

流形学习(manifold learning)是机器学习、模式识别中的一种方法,在维数约简方面具有广泛的应用。本节将向大家介绍在 Python 中利用 Scikit-Learn 工具库实现流形学习的一系列方法与技巧。

首先需要导入相关的可视化工具库,并构造本节的第一个示例数据:


  1. %matplotlib inline
  2. import matplotlib.pyplot as plt
  3. import seaborn as sns; sns.set()
  4. import numpy as np
复制代码


构建如下函数 make_hello 用于示例数据集构建:


  1. def make_hello(N=1000, rseed=42):
  2.     # 绘制一个“HELLO”形状,并将它保存为png
  3.     fig, ax = plt.subplots(figsize=(4, 1))
  4.     fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
  5.     ax.axis('off')
  6.     ax.text(0.5, 0.4, 'HELLO', va='center', ha='center',
  7.             weight='bold', size=85)
  8.     fig.savefig('hello.png')
  9.     plt.close(fig)
  10.    
  11.     # 打开这个 PNG,并根据图片生成随机散点
  12.     from matplotlib.image import imread
  13.     data = imread('hello.png')[::-1, :, 0].T
  14.     rng = np.random.RandomState(rseed)
  15.     X = rng.rand(4 * N, 2)
  16.     i, j = (X * data.shape).astype(int).T
  17.     mask = (data[i, j] < 1)
  18.     X = X[mask]
  19.     X[:, 0] *= (data.shape[0] / data.shape[1])
  20.     X = X[:N]
  21.     return X[np.argsort(X[:, 0])]
复制代码


构建示例数据集 X,一组拼接成“HELLO”字样的散点样本:



  1. X = make_hello(1000)
  2. colorize = dict(c=X[:, 0], cmap=plt.cm.get_cmap('rainbow', 5))
  3. plt.scatter(X[:, 0], X[:, 1], **colorize)
  4. plt.axis('equal');
复制代码


1.jpg

我们构建的数据样本如上所示,接下来我们对样本点的坐标进行以下旋转,将旋转后的数据集命名为 X2:


  1. def rotate(X, angle):
  2.     theta = np.deg2rad(angle)
  3.     R = [[np.cos(theta), np.sin(theta)],
  4.          [-np.sin(theta), np.cos(theta)]]
  5.     return np.dot(X, R)
  6.    
  7. X2 = rotate(X, 20) + 5
  8. plt.scatter(X2[:, 0], X2[:, 1], **colorize)
  9. plt.axis('equal');
复制代码


2.jpg

为了直观地展现流形学习,我们运用 Scikit-Learn 中的 pairwise_distances 工具计算样本点两两之间的距离指标,并存储为矩阵 D:


  1. from sklearn.metrics import pairwise_distances
  2. D = pairwise_distances(X)
  3. D.shape
复制代码
(1000, 1000)
我们可以用像素图来描绘矩阵 D 中的内容,1000 个样本点中两两间的距离如下图所示:
  1. plt.imshow(D, zorder=2, cmap='Blues', interpolation='nearest')
  2. plt.colorbar();
复制代码

3.jpg
可以看到,X2 与 X 中样本点两两间的距离不会因为整体旋转而改变:
  1. D2 = pairwise_distances(X2)
  2. np.allclose(D, D2)
复制代码
True
以上内容节选自 数析学院,后文还有三维数据集处理、图像处理实例等,内容较多,先搬运到这,有需要的同学可以先直接到 数析学院 查看原文


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 2 人评分经验 论坛币 收起 理由
晓七 + 100 精彩帖子
残阳_等待 + 60 + 10 精彩帖子

总评分: 经验 + 160  论坛币 + 10   查看全部评分

沙发
casey_c 发表于 2017-7-7 14:11:45

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-22 14:11