• 任务七 特征工程 特征选择


    特征工程是什么

    范围:

    特征构建 特征探索 特征增强 特征衍生 特征选择 特征转换 特征学习

    特征选择的定义

    尽管有些特征对我们的问题是有意义的,但是不同特征的重要性不同,有些特征之间可能存在了信息冗余,过多的特征也可能会导致过拟合的情况发生,因此选出一些对问题影响比较大的特征就尤为重要了。

    特征选择是从原始的特征集中选择出一个子集,从而在不降低甚至提高模型性能的情况下,减少输入数据的规模。

    特征选择的目的

    • 减少特征数量、降维,使模型泛化能力更强,减少过拟合;
    • 增强对特征和特征值之间的理解。

    filter过滤法

    过滤法一般做预处理步骤,特征选择完全独立于任何机器学习算法

    根据各种统计检验中的分数 以及 相关性的各项指标来选择特征

    方差选择法

    该方法先计算个各个特征的方差,然后移除方差不满足阈值的特征。

    假设我们有一个带有布尔特征的数据集,我们要移除那些超过80%的数据都为1或0的特征。布尔特征是伯努利随机变量

    sklearn默认设置下,它将移除所有方差为0的特征,即所有样本中数值完全相同的特征。而在本例中,我们将阈值设为:

    1. >>> from sklearn.feature_selection import VarianceThreshold
    2. >>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
    3. >>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
    4. >>> sel.fit_transform(X)
    5. array([[0, 1],
    6. [1, 0],
    7. [0, 0],
    8. [1, 1],
    9. [1, 0],
    10. [1, 1]])

    VarianceThreshold_Danker01的博客-CSDN博客

    相关系数法

    在sklearn当中,有三种常用的方法来评判特征与标签之间的相关性。

    卡方过滤/卡方检验法

    卡方过滤是专门针对 离散型标签(即分类问题)的相关性过滤

    卡方检测类feature_selection.chi2计算每个非负特征和标签之间的卡方统计量,并依照卡方统计量由高到低为特征排名。再结合feature_selection.SelectKBest

    用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:

    1. from sklearn.feature_selection import SelectKBest
    2. from sklearn.feature_selection import chi2
    3. #选择K个最好的特征,返回选择特征后的数据
    4. SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

    卡方检测的本质是推测两组数据间的差异,其检测的原假设是“两组数据是相互独立的”

    卡方检测返回卡方值和P值两个统计量,p值一般使用0.01或0.05作为显著性水平

    从特征工程的角度,希望选取卡方值很大,p值小于0.05的特征,是和标签相关联的特征 

    互信息法

    互信息(Mutual Information,简称MI)是变量间相互依赖性的量度。当两个随机变量相互独立时,其互信息为0。

     

    包裹式特征选择

    使用预测模型给特征子集打分。每个新子集都被用来训练一个模型,然后用验证数据集来测试。通过计算验证数据集上的错误次数(即模型的错误率)给特征子集评分。由于包装类方法为每个特征子集训练一个新模型,所以计算量很大。不过,这类方法往往能为特定类型的模型找到性能最好的特征集。

     

    1. from sklearn.datasets import make_friedman1
    2. from sklearn.feature_selection import RFE
    3. from sklearn.svm import SVR
    4. import pandas as pd
    5. #sklearn的friedman1数据集
    6. X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
    7. #estimator为用于训练原始特征的预测模型,此处选择支持向量机SVR
    8. estimator = SVR(kernel="linear")
    9. #RFE参数为:预测模型、选择的特征数、每轮迭代淘汰的特征数量
    10. selector = RFE(estimator, n_features_to_select = 5, step=1)
    11. selector = selector.fit(X, y)
    12. #返回选取特征的结果
    13. print(selector.support_)
    14. '''
    15. array([ True, True, True, True, True,
    16. False, False, False, False, False], dtype=bool)
    17. '''
    18. #特征排名,所有被选上的特征都是rank1
    19. print(selector.ranking_)
    20. '''
    21. array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
    22. '''

    嵌入式特征选择

    Embedded(嵌入法)是特征选择的一种方法,它先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。这种方法通过训练来确定特征的优劣。

    特征选择-嵌入式选择_clvsit的博客-CSDN博客_嵌入式特征选择

    基于LASSO的特征学习方法

    lasso函数时 代价函数后面加了一个正则化

    深度学习-正则化 - 知乎 

    机器学习必知必会:正则化 - 知乎

    机器学习(十):损失函数 - 知乎

    损失函数(Loss Function) - 知乎

    numpy_square函数_付康为的博客-CSDN博客_np.square

    numpy之linspace()函数使用详解 | w3c笔记 

    写给初学者的LASSO回归 - 腾讯云开发者社区-腾讯云

    主成分算法PCA

     

  • 相关阅读:
    【Linux 基础笔记】(二)
    JavaScript-DOM
    【无标题】软件测试自动化“领导者”SmartBear举办首场中国线上研讨会:洞悉全球自动化测试走向,探讨降本增效之策
    探索 Python 的动态类型系统:变量引用、不可变性及高效内存管理与垃圾回收机制的深入分析
    ARP协议:网络世界的临门一脚
    【leetcode】二分法和牛顿迭代法=>69
    【跟小嘉学 Apache Flink】二、Flink 快速上手
    LuatOS-SOC接口文档(air780E)--lcd - lcd驱动模块
    ubuntu python serial实现串口数据收发
    华为云云耀云服务器L实例评测 | 搭建docker环境
  • 原文地址:https://blog.csdn.net/m0_62309595/article/details/126273272