首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 3.4 降维、特征提取与流形学习 在机器学习领域,数据往往是多维的,这意味着每个样本都由多个特征描述。然而,高维数据不仅增加了计算复杂度和存储需求,还可能导致“维度灾难”,即随着维度的增加,数据点之间的距离变得难以区分,从而影响模型的性能和泛化能力。因此,降维、特征提取与流形学习成为了处理高维数据的关键技术。本章将深入探讨这些技术的基本原理、常用方法以及它们在Python中的实现。 #### 3.4.1 降维概述 **降维**是指在不显著损失信息的前提下,将高维数据转换为低维数据的过程。它有助于减少计算成本,提高模型的可解释性,并可能揭示数据的内在结构。降维技术主要分为两类:特征选择和特征提取。 - **特征选择**:直接从原始特征中选择一个子集作为新的特征集,不涉及特征的转换或组合。 - **特征提取**:通过某种变换或映射,将原始特征空间中的数据转换到一个新的、通常维度更低的特征空间中。 #### 3.4.2 常见的降维方法 ##### 3.4.2.1 主成分分析(PCA) **主成分分析(Principal Component Analysis, PCA)** 是一种广泛使用的线性降维技术。它通过正交变换将可能相关的变量转换为一组线性不相关的变量,即主成分。这些主成分按照方差从大到小排列,第一个主成分具有最大的方差,代表了数据中的最主要变化方向。通过选择前几个主成分,可以在保留大部分信息的同时减少数据的维度。 在Python中,可以使用`scikit-learn`库中的`PCA`类来实现PCA降维: ```python from sklearn.decomposition import PCA from sklearn.datasets import load_iris # 加载数据 data = load_iris() X = data.data # 初始化PCA,设置目标维度为2 pca = PCA(n_components=2) # 拟合数据并转换 X_pca = pca.fit_transform(X) print(X_pca.shape) # 输出降维后的数据形状 ``` ##### 3.4.2.2 线性判别分析(LDA) **线性判别分析(Linear Discriminant Analysis, LDA)** 是一种有监督的降维技术,它旨在找到一种线性组合,使得类间散度最大化而类内散度最小化,从而有利于分类任务。LDA通常用于二分类问题,但也可以扩展到多分类问题。 在Python中,`scikit-learn`的`LinearDiscriminantAnalysis`类可用于LDA: ```python from sklearn.discriminant_analysis import LinearDiscriminantAnalysis # 初始化LDA lda = LinearDiscriminantAnalysis(n_components=2) # 拟合数据并转换 X_lda = lda.fit_transform(X, data.target) print(X_lda.shape) # 输出降维后的数据形状 ``` ##### 3.4.2.3 核主成分分析(KPCA) **核主成分分析(Kernel Principal Component Analysis, KPCA)** 是PCA的非线性扩展。它通过引入核函数,将数据映射到高维特征空间中进行PCA,然后再映射回原空间(或更低维空间)以获取非线性主成分。KPCA适用于处理非线性数据。 在Python中,`scikit-learn`的`KernelPCA`类可用于KPCA: ```python from sklearn.decomposition import KernelPCA from sklearn.metrics.pairwise import rbf_kernel # 初始化KPCA,使用RBF核 kpca = KernelPCA(kernel="rbf", fit_inverse_transform=True, gamma=10) # 拟合数据并转换 X_kpca = kpca.fit_transform(X) print(X_kpca.shape) # 输出降维后的数据形状 ``` #### 3.4.3 特征提取技术 特征提取不仅仅是降维,它还涉及从原始数据中提取出对模型构建更有用的信息。 ##### 3.4.3.1 文本数据的特征提取 对于文本数据,常用的特征提取方法包括词袋模型(Bag of Words, BoW)、TF-IDF(Term Frequency-Inverse Document Frequency)等。这些方法将文本转换为数值向量,便于机器学习模型处理。 在Python中,`scikit-learn`的`CountVectorizer`和`TfidfVectorizer`可用于文本数据的特征提取: ```python from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer texts = ["Hello world", "Python programming", "Machine learning"] # 使用词袋模型 vectorizer = CountVectorizer() X_bow = vectorizer.fit_transform(texts) # 使用TF-IDF vectorizer_tfidf = TfidfVectorizer() X_tfidf = vectorizer_tfidf.fit_transform(texts) ``` ##### 3.4.3.2 图像数据的特征提取 图像数据通常包含大量像素点,直接作为特征输入到机器学习模型中效率低下。因此,常通过卷积神经网络(CNN)等深度学习模型自动提取图像特征。 虽然本节主要讨论非深度学习技术,但值得注意的是,CNN等深度学习模型在图像特征提取方面取得了巨大成功,它们能够自动从原始像素中学习并提取出高级抽象特征。 #### 3.4.4 流形学习 **流形学习**是一类旨在发现高维数据中低维流形结构的非线性降维方法。流形学习假设数据虽然在高维空间中分布复杂,但本质上可能嵌入在一个低维流形上。 ##### 3.4.4.1 等距映射(ISOMAP) **等距映射(Isometric Mapping, ISOMAP)** 是一种基于图论的流形学习方法,它试图保持数据点之间的测地距离(即两点之间的最短路径长度),在降维后的空间中尽可能接近原始空间中的距离。 ##### 3.4.4.2 局部线性嵌入(LLE) **局部线性嵌入(Locally Linear Embedding, LLE)** 假设每个数据点可以由其邻居数据点的线性组合近似表示,并试图在降维后的空间中保持这种局部线性关系。 在Python中,`scikit-learn`的`manifold`模块提供了ISOMAP和LLE的实现: ```python from sklearn.manifold import Isomap, LocallyLinearEmbedding # ISOMAP iso = Isomap(n_neighbors=5, n_components=2) X_iso = iso.fit_transform(X) # LLE lle = LocallyLinearEmbedding(n_neighbors=10, n_components=2, method='standard') X_lle = lle.fit_transform(X) ``` #### 3.4.5 总结 降维、特征提取与流形学习是处理高维数据、提升机器学习模型性能的重要技术。通过选择合适的降维方法或特征提取技术,我们可以有效地减少数据维度,同时保留或增强对模型有用的信息。在Python中,`scikit-learn`库提供了丰富的工具来支持这些操作,使得实现和应用这些技术变得简单高效。未来,随着深度学习等技术的进一步发展,我们期待在降维和特征提取领域看到更多创新性的解决方案。
上一篇:
3.3.4 预处理对监督学习的作用
下一篇:
3.4.1 主成分分析
该分类下的相关小册推荐:
Python机器学习基础教程(下)
Python合辑6-字典专题
Python合辑3-字符串用法深度总结
Python甚础Django与爬虫
Python数据分析与挖掘实战(上)
Python与办公-玩转Word
Python编程轻松进阶(四)
Python面试指南
剑指Python(万变不离其宗)
Python3网络爬虫开发实战(上)
Python编程轻松进阶(一)
Python合辑9-判断和循环