数据预处理:数据降维

目录

数据降维的应用场景

基于特征选择的降维

基于维度转换的降维

参考资料:

1.《Python数据分析与数据化运营》宋天龙

2.主成分分析(PCA)原理详解 - 知乎

3.机器学习中SVD总结

数据降维的应用场景

数据降维可以降低模型的计算量并减少模型运行时间、降低噪音对于模型结果的影响、便于通过可视化方式展示归约后的维度信息并减少数据存储空间。因此,大多数情况下,当我们面临高维数据时,都需要对数据做降维处理。是否进行降维主要考虑以下方面:

  • 维度数量。高维的数据大部分情况下是需要降维的,同时需要考虑维度本身的重要性、共线性以及其他排除关系。
  • 建模输出是否必须保留原始维度。某些场景下,我们需要完整保留参与建模的原始维度并在最终建模输出时能够得以分析、解释和应用,这种情况下不能选择基于维度转换的降维,只能选择基于特征选择的降维。
  • 是否要保留完整数据特征。数据降维的基本出发点是在最大化保留原始数据特征的前提下,降低参与建模的维度。在降维过程中,无论未被表示出来的特征是噪音还是正常分布,这部分信息都无法参与建模过程。如果某些场景下需要所有数据集的完整特征,那么通常不选择降维。
  • 对模型的计算效率与建模时效性要求。当面临高维数据建模时,数据模型消耗的资源将呈几何倍数增长,这种增长带来的结果便是运算效率慢、耗时长。如果对建模时间和时效性有要求,那么降维几乎是必要步骤。

数据降维只是处理高维数据的思路之一,除此之外还有其他高维数据建模的方法。以高维数据聚类为例,除了降维方法外,其他方法还包括:基于超图的聚类、基于子空间的聚类、联合聚类等。

基于特征选择的降维

基于特征选择的降维是根据一定规则和经验,直接选取原有维度的一部分参与到后续的计算和建模过程。整个过程不产生新的维度。

这种降维方法的好处是,既能满足后续数据处理和建模需求,又能保留维度原本的业务含义,以便于业务理解和应用。

基于特征选择的降维方法有4种:

  • 经验法:通过业务专家、数据专家的以往经验、实际数据情况、业务理解程度等综合考虑选择。从众多维度特征中选择对结果影响较大的特征,或从对后期数据处理和建模的影响来选择维度。
  • 测算法:通过不断测试多种维度选择参与计算,通过结果来反复验证和调整并最终找到最佳特征方案。
  • 基于统计分析的方法:通过计算不同维度间的相关性分析,找到具有较高线性相关性的维度,然后筛选;或者通过计算不同维度间的互信息量,找到具有较高互信息量的维度,然后筛选。
  • 机器学习算法:通过机器学习算法得到不同特征的重要程度,然后再根据权重来选择较大的特征。

基于维度转换的降维

基于维度转换的降维是按照一定的数学变换方法,把给定的一组相关变量通过数学模型将高维空间的数据点映射到低维度空间中,然后利用映射后变量的特征来表示原有变量的总体特征。整个过程会产生新的维度。

维度变换是非常重要的降维方法,这种降维方法分为线性降维和非线性降维两种,其中常用的代表算法包括独立成分分析(ICA)、主成分分析(PCA)、因子分析(Factor Analysis,FA)、线性判别分析(LDA)、局部线性嵌入(LLE)、核主成分分析(Kernel PCA)等。

Q:在机器学习中,经常会把数据分为训练集和测试集,也有可能包括应用集,多份数据需要单独降维还是整体降维?

A:对于线性方法(例如PCA)而言,它旨在寻找一个高维空间到低维空间的映射矩阵,当映射矩阵找到后便可直接将其应用到其他数据集进行降维,因此这种降维方式下可以单独降维;而非线性方法(例如LLE)则需要在保持某种局部结构的条件下实现数据的整体降维,因此这种降维方式下需要整体降维。

以下介绍PCA主要适用的场景:

  • 非监督式的降维方法,适用于不带有标签的数据集。而对于带有标签的数据集则可以采用LDA。
  • 根据方差自主控制特征数量。最大的主成分的数量会小于等于原始特征的数量。
  • 更少的正则化处理。选择较多的主成分将导致较少的平滑,因为我们将能够保留更多的数据特征,从而减少正则化。
  • 数据量较大的数据集。PCA对大型数据集的处理效率较高。
  • 数据分布是位于相同平面上,数据中存在线性结构。

代码如下:

# 导入库
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.decomposition import PCA

# 读取数据文件
data = np.loadtxt('data1.txt')  
x = data[:, :-1]  
y = data[:, -1]  
print(x[0], y[0])  

# 使用sklearn的DecisionTreeClassifier判断变量重要性
# 变量重要性的总得分为1,值越大重要性越高。一般情况下,如果选择的变量重要性总得分接近80%,基本上已经解释大部分的特征变化了。
model_tree = DecisionTreeClassifier(random_state=0)  # 建立分类决策树模型对象
model_tree.fit(x, y)                                 # 将数据集的维度和目标变量输入模型
print(model_tree.feature_importances_)               # 获得所有变量的重要性得分

# 使用sklearn的PCA进行维度转换
# 各主成分方差越大重要性越高。一般情况下,如果选择的主成分方差占比接近80%,基本上已经解释大部分的特征变化了。
model_pca = PCA()                   # 建立PCA模型对象
model_pca.fit(x)                    # 将数据集输入模型,仅输入x进行PCA训练
model_pca.transform(x)              # 对数据集进行转换映射,可作用于其他数据集上
components = model_pca.components_  # 获得转换后的所有主成分
components_var = model_pca.explained_variance_              # 获得各主成分的方差
components_var_ratio = model_pca.explained_variance_ratio_  # 获得各主成分的方差占比
print(components[:2])  
print(components_var[:2])  
print(components_var_ratio) 
<think>好的,我现在需要帮助用户了解数据预处理中的数据方法及其实现,特别是关于平台的内容。首先,我需要回忆用户提供的引用资料,看看里面提到了哪些关键点。 根据引用内容,数据的主要目的是低计算量、减少噪音影响、便于可视化以及节省存储空间。常见的方法分为两类:特征选择(如过滤式、包裹式、嵌入式)和度转换(如PCA、LDA、t-SNE)。用户还提到了是否保留原始度和是否需要完整数据特征等因素。 用户特别询问了平台上的实现。平台可能是一个在线编程或学习平台,可能需要具体的代码示例,比如Python中的sklearn库应用。需要确认用户提到的“平台”是否对应某个特定工具或环境,但假设它支持Python的话,可以给出相应的代码示例。 接下来要组织回答结构,按照用户的要求,分步骤清晰说明。需要包括方法分类、常用方法(如PCA)、实现步骤及代码,以及注意事项。同时,生成相关问题,如数据的应用场景、如何选择方法、平台的具体操作等。 需要确保回答中的数学公式正确使用LaTeX格式,行内公式用$...$,独立公式用$$...$$。例如,PCA的数学原理需要写出协方差矩阵和特征值分解的公式。 最后,检查引用是否正确,每个引用标记要对应到用户提供的参考资料。例如,提到的好处时引用[^2][^4],提到主成分分析时引用[^3][^4]。 现在需要将这些思考整合成一个自然流畅的中文回答,结构清晰,分点说明,并附上代码示例和相关问题。</think>### 数据方法与实现 数据数据预处理的核心步骤之一,其核心目标是在保留数据关键特征的前提下减少度数量,从而提升模型效率、低噪音干扰[^4]。以下是具体方法与实现步骤: --- #### **一、数据方法分类** 1. **特征选择(Feature Selection)** - **过滤式(Filter)**:通过统计指标(如方差、相关系数)筛选特征。例如,移除方差接近0的特征。 - **包裹式(Wrapper)**:通过迭代选择最优特征子集,如递归特征消除(RFE)。 - **嵌入式(Embedded)**:在模型训练过程中自动选择特征,例如Lasso回归的$L1$正则化[^4]。 2. **度转换(Feature Extraction)** - **主成分分析(PCA)**:通过线性变换将数据映射到低空间,保留最大方差方向。其数学原理为协方差矩阵的特征值分解: $$C = \frac{1}{n}X^TX$$ 通过选取前$k$大特征值对应的特征向量构建投影矩阵。 - **线性判别分析(LDA)**:在分类任务中寻找能最大化类间差异、最小化类内差异的特征子集。 - **t-SNE**:非线性方法,适用于高数据的可视化,通过概率分布保留局部结构[^3]。 --- #### **二、Python实现示例** 以PCA为例,使用`scikit-learn`库实现: ```python from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # 数据标准化(PCA对尺度敏感) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 应用PCA,至2 pca = PCA(n_components=2) X_pca = pca.fit_transform(X_scaled) # 输出方差贡献率 print("方差贡献率:", pca.explained_variance_ratio_) ``` --- #### **三、平台实践建议** 在平台进行数据时,通常需结合以下步骤: 1. **数据标准化**:使用`StandardScaler`消除量纲影响。 2. **选择方法**:根据任务需求选择PCA(无监督)或LDA(有监督)。 3. **参数调优**:例如调整PCA的`n_components`,或通过交叉验证选择特征子集。 --- #### **四、注意事项** 1. **是否保留原始度**:若需解释性,优先选择特征选择方法[^4]。 2. **计算效率**:PCA适用于高数据快速,而t-SNE计算复杂度较高[^3]。 3. **信息损失**:后需评估模型性能是否显著下。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值