sklearn与机器学习系列专题之降维(五)一文弄懂Isomap特征筛选&降维

本文介绍了Isomap降维算法,一种使用测地距离而非欧式距离的流形学习方法,适用于非线性数据结构的降维。文章详细阐述了算法原理,包括邻近图构建、测地距离计算和低维映射,并探讨了其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Isomap算法简介

等度量映射(Isometric Feature Mapping,Isomap)是流形学习的一种,用于非线性数据降维,是一种无监督算法。

Isomap所采用的核心算法和MDS是一致的,区别在于原始空间中的距离矩阵的计算上。很多数据是非线性结构,不适合直接采用PCA算法和MDS算法。在非线性数据结构中,流形上距离很远(测地距离,即在曲面上(不允许离开曲面)从A点走到B点的最短距离)的两个数据点,在高维空间中的距离(欧式距离)可能非常近。

在这里插入图片描述
Isomap最主要的优点就是使用“测地距离”,而不是使用原始的欧几里得距离,这样可以更好得控制数据信息的流失,能够在低维空间中更加全面地将高维空间的数据表现出来,如下图经典的“瑞士卷”模型,通过从点1到点9的k近邻层层递进方法,得到红色曲线,即为两点之间的测地距离。
在这里插入图片描述

2.Isomap算法原理

**(1)首先建立邻近图:**对于每个样本点,计算它的k近邻,利用流形在局部上的欧式空间同胚性质,基于欧式距离,找出每个点在低维流形上的近邻点,建立近邻连接图;
**(2)计算两个点之间的测地距离:**调用最短路径算法计算任意两样本点之间的距离,计算近邻图上任意两点之间的最短路径,作为两点之间的距离;
**(3)低维映射:**得到两点之间的测地距离后,通过MDS算法获得样本点在地位空间中的坐标。

近邻图有两种类型:
**(1)k近邻图:**指定近邻点个数,例如指定距离最近的k个点为近邻点;
**(2)ε近邻图:**指定近邻点阈值ε,距离小于ε的点被认为是近邻点。

在建立近邻图时,应当注意控制近邻图的范围,否则容易出现“短路”或者“断路”问题:
**(1)“短路”问题:**近邻范围制定过大,距离很远的点也被误认为是近邻;
**(2)“断路”问题:**近邻范围制定过小,本应当相邻的点被认为断开的。

3.Isomap算法优缺点

Isomap算法针对MDS算法,解决了MDS基于欧式距离映射非线性结构高维数据的局限性。
然而,对于新样本,难以将其映射到低维空间。理论上可以将新样本添加到数据集中,重新调用Isomap算法,但这方案计算量太大。一般的解决方法是,训练一个回归学习器对新样本的低维空间进行预测

4.python实战Isomap

以鸢尾花数据集为例,实现Isomap降维算法。原始数据集包含三种不同的分类,共150条数据,每个数据有四个特征。

#(1)导入必要程序库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets,decomposition,manifold

#(2)加载数据
def load_data():
    iris=datasets.load_iris()
    return iris.data,iris.target

#(3)使用Isomap
def test_Isomap(*data):
    X,y=data
    for n in [4,3,2,1]:
        isomap=manifold.Isomap(n_components=n)
        isomap.fit(X)
        print('reconstruction_error(n_components=%d):%s'%(n,
            isomap.reconstruction_error()))
X,y=load_data()
test_Isomap(X,y)

#(4)降维后的样本分布图
def plot_Isomap(*data):
    X,y=data
    Ks=[1,5,25,y.size-1]
    fig=plt.figure()
    for i,k in enumerate(Ks):
        isomap=manifold.Isomap(n_components=2,n_neighbors=k)
        X_r=isomap.fit_transform(X)
        ax=fig.add_subplot(2,2,i+1)
        colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5),
               (0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),)
        for label,color in zip(np.unique(y),colors):
            position=y==label
            ax.scatter(X_r[position,0],X_r[position,1],label='target=%d'%label,color=color)
        ax.set_xlabel('X[0]')
        ax.set_ylabel('X[1]')
        ax.legend(loc='best')
        ax.set_title("k=%d"%k)
    plt.suptitle('Isomap')
    plt.tight_layout(pad=2)
    plt.show()
plot_Isomap(X,y)

#(5)将原始数据压缩到一维
def plot_Isomap_k_d1(*data):
    X,y=data
    Ks=[1,5,25,y.size-1]
    fig=plt.figure()
    for i,k in enumerate(Ks):
        isomap=manifold.Isomap(n_components=2,n_neighbors=k)
        X_r=isomap.fit_transform(X)
        ax=fig.add_subplot(2,2,i+1)
        colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),(0.5,0,0.5),
               (0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),)
        for label,color in zip(np.unique(y),colors):
            position=y==label
        ax.scatter(X_r[position],np.zeros_like(X_r[position]),label='target=%d'%label,color=color)
        ax.set_xlabel('X[0]')
        ax.set_ylabel('Y')
        ax.legend(loc='best')
        ax.set_title("k=%d"%k)
    plt.suptitle('Isomap')
    plt.tight_layout(pad=2)
    plt.show()
plot_Isomap_k_d1(X,y)

代码运行如下:

reconstruction_error(n_components=4):1.0094929893039135
reconstruction_error(n_components=3):1.0181252006659833
reconstruction_error(n_components=2):1.0275229261937564
reconstruction_error(n_components=1):1.0715321251523136

降维后的样本分布如下:
在这里插入图片描述
将原始数据的特征直接压缩到一维效果如下:
在这里插入图片描述

5.下篇预告

sklearn与机器学习系列专题之降维(六)一文弄懂LLE特征筛选&降维

敬请期待!

欢迎关注公众号“码点联盟”,不定期分享机器学习、深度学习干货,及各种资料大礼包!
另外,这是一个由一线互联网大厂算法工程师及双985研究生创建的公众号,后续会经常分享各类实用机器学习算法技术文章,欢迎交流讨论!在这里插入图片描述

sklearn MDS是指在sklearn(一个用于机器学习和数据分析的Python库)中实现的MDS算法。MDS(多缩放)是一种数据技术,它可以将高数据映射到低空间,同时保持数据点之间的相对距离关系不变。MDS常用于市场调研和心理学数据分析等领域。通过使用sklearn中的MDS类,可以方便地进行MDS算法的实现和应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [sklearn算法:PCA、LDA、MDS、流形学习Isomap](https://blog.csdn.net/qq_42797457/article/details/100675654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [sklearn机器学习系列专题(三)一文弄懂MDS特征筛选&](https://blog.csdn.net/weixin_45234485/article/details/109729659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Math599_solution:Math599讲义的解决方案](https://download.csdn.net/download/weixin_42128315/15868190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值