【机器学习】特征工程——数据降维

﹏ヽ暗。殇╰゛Y 2022-12-23 15:21 420阅读 0赞

特征工程

定义:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性。
内容:主要有三部分:
  1、特征抽取
  2、特征预处理
  3、数据的降维

数据降维

机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。
目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为:①在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少冗余信息所造成的误差,提高识别(或其他应用)的精度。 ②又或者希望通过降维算法来寻找数据内部的本质结构特征。

1、数据降维的目的

数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃。

2、数据降维的方法:

  • 特征选择
  • 主成分分析法(PCA)

一、特征选择

1、定义

特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值 ,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。

2、特征选择的原因:

  • 冗余:部分特征的相关度高,容易消耗计算性能
  • 噪声:部分特征对预测结果有影响

3、特征选择的主要方法:

  • Filter(过滤式):Variance Threshold(从方差大小考虑所有样本中这个特征的数据情况)
  • Embedded(嵌入式):正则化、决策树
  • Wrapper(包裹式)

4、过滤式

  1. sklearn特征选择APIsklearn.feature_selection.VarianceThreshold

VarianceThreshold语法:

  • VarianceThreshold(threshold=0.0): 删除所有低方差特征
  • VarianceThreshold.fit_transform(x):
    x: numpy array格式的数据[n_samples, n_features];返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征

流程:
1、初始化VarianceThreshold,指定阀值方差
2、调用fit_transform

  1. from sklearn.feature_selection import VarianceThreshold
  2. # 特征选择 -- 删除低方差的特征
  3. def var():
  4. var = VarianceThreshold(threshold=0.0)
  5. data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])
  6. print(data)
  7. return None
  8. if __name__ == "__main__":
  9. var()

二、主成分分析法(PCA)

1、PCA的本质:PCA是一种分析、简化数据集的技术。

2、PCA的目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

3、PCA的作用:可以削减回归分析或者聚类分析中特征的数量。

4、sklearn主成分分析API:

  1. sklearn.decomposition

PCA语法:

  • PCA(n_components=None): 将数据分解为较低维数空间。
    n_components有两种形式:小数(最好是90%~95%)或整数(较少到的特征数量)
  • PCA.fit_transform(x)
    x: numpy array格式的数据[n_samples, n_features];返回值:转换后指定维度的array

PCA流程:
1、初始化PCA,指定减少后的流程
2、调用fit_transform

  1. from sklearn.decomposition import PCA
  2. # 主成分分析进行特征降维
  3. def pca():
  4. pca = PCA(n_components=0.9)
  5. data = pca.fit_transform([[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]])
  6. print(data)
  7. return None
  8. if __name__ == "__main__":
  9. pca()

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读