zoukankan      html  css  js  c++  java
  • 特征工程3:缺失值及数据降维

    缺失值的处理
    由于各种原因,许多现实世界的数据集包含缺少的值,通常编码为空白,NaN或其他占位符。然而,这样的数据集与scikit-learn的分类器不兼容,它们假设数组中的所有值都是数字,并且都具有和保持含义。使用不完整数据集的基本策略是丢弃包含缺失值的行或列。然而,这样的代价是可能丢失有价值的数据,如果每行或每列缺失数据占比比较大,建议直接放弃这些数据,否则更好的策略是估算缺失值,并将其填充。
    scikit-learn中填充缺失值的API是Imputer类,使用方法如下:
    from sklearn.preprocessing import Imputer 

    import numpy as np
    # 缺失值填补的时候必须得是float类型
    # 缺失值要填充为np.nan,它是浮点型,strategy是填充的缺失值类型,这里填充平均数,axis代表轴,这里第0轴是列
    im = Imputer(missing_values='NaN',strategy='mean',axis=0)
    data = im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
    print(data)
    参数strategy有三个值可选:mean(平均值),median(中位数),most_frequent(众数)
    输出结果:
    array([[ 1., 2.], 
              [ 4., 3.], 
              [ 7., 6.]])
    可见:之前的缺失值被这一列的平均值((1+7)/2=4)填充了
     
    数据降维
     
    1、数据降维是什么?
     
    降维不是指的数组的维度减少,而是特征的数量减少。
     
    2、为什么要降维?
     
    当数据集的特征非常多时,特征冗余,要么是一些无用的特征,要么是表达重复信息的特征,这些数据会消耗计算性能,正确降维后的数据一般保留了原始数据的大部分重要信息,完全可以替代原始数据作为输入,从而提高性能。
     
    3、常用的两种降维方式:1、特征选择; 2、 主成分分析(PCA);
     
    1、特征选择
    特征选择是什么?
    特征选择就是从所有特征中选择一部分特征作为算法的输入数据
    特征选择的三种方法:
    1. 过滤式(Filter):VarianceThreshold
    2. 嵌入式(Embedded):正则化、决策树
    3. 包裹式(Warpper)
    4. 神经网络
    这里我们先只介绍过滤式的方差过滤,包裹式很少使用,嵌入式和神经网络留到后面具体介绍
     
    scikit-learn中使用方差进行过滤的API是:feature_selection.VarianceThreshold
    from sklearn.feature_selection import VarianceThreshold 
    # 返回值:训练集将删除方差低于threshold的特征,threshold默认为0,即删除方差为0的特征 
    var = VarianceThreshold(threshold=0.0) 
    # 使用fit_transform进行转化 
    data = var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]) print(data)
    输出结果:
    array([[2, 0], 
          [1, 4],
          [1, 1]])
    上面使用方差过滤后,输出结果是删除了方差为0的数据。 过滤式的方法常用的就是方差选择,因为方差代表了数据的稳定性,方差越小,数据的波动越小,对结果的影响也就越小,方差为0时,说明这一列的特征值相同,对于结果判断毫无影响,因此将其删除,以提高计算性能。
     
    2、主成分分析(PCA)
     
    主成分分析是什么?
     
    顾名思义:主成分分析即对数据集进行简化,通过线性变换将多个特征合并为少数互不相关的综合特征(即主成分),简化之后,数据的维度降低,但所包含的信息量并不减少,能够最大限度的反映原始数据。
     
    scikit-learn中PCA的API是:decomposition.PCA
    当特征数量非常多达到上百时,才有必要使用主成分分析,下面只是用四个特征演示一下用法
    from sklearn.decomposition import PCA 
    # n_components:指定要保留的数据信息为90%,通常保留值在90%-95%之间 
    pca = PCA(n_components=0.9) 
    data = pca.fit_transform([[2,8,4,5], [6,3,0,8], [5,4,9,1]]) print(data)
    PCA中的参数n_components可以为整数,也可以为小数; 为小数时代表保留的信息百分比,比如上面0.9就是保留90%的信息; 为整数时代表保留的特征数量,我们通常不会预先知道保留几个特征比较合适,所以通常不用整数。
     
    输出结果:
    array([[ -9.33473422e-16, 3.82970843e+00], 
              [ -5.74456265e+00, -1.91485422e+00], 
              [ 5.74456265e+00, -1.91485422e+00]])
     
    总结:
    1、scikit-learn中缺失值的处理;
    2、数据降维的两种方式:过滤式特征选择、PCA(主成分分析);
    3、过滤式特征选择所得到数据是原始数据的子集,PCA得到的数据是经过重新计算的,不是原始数据的子集,但保留了原始数据所代表的信息。
  • 相关阅读:
    Linq之旅:Linq入门详解(Linq to Objects)(转)
    第四章 禅坐和外相的修行
    第三章 生活就是我们的修行
    第二章 更正我们的知见
    第一章 明了佛陀的教导(宁静的森林水池)
    第二章 取其一半
    你的程序员是在努力工作还是在偷懒?
    给JavaScript初学者的24条最佳实践
    简单理解Socket
    oracle18c linux x86-64 install 杂记
  • 原文地址:https://www.cnblogs.com/chaofan-/p/11050120.html
Copyright © 2011-2022 走看看