• 特征工程之特征降维-特征选择-PCA/LDA


    机器学习项目大体流程:

    从业场景抽象出问题—>数据获取/采集—>数据清洗—>探索性数据分析—>特征工程 ( 数据采样、特征处理、特征降维[ 特征选择 or 线性降维 ] )—>选择和应用场景以及数据类型相符的机器学习模型
    数据采集:哪些数据丢最后的预测结果有帮助?能否采集到这类数据?线上实时计算时数据获取是否快捷?
    数据清洗:最后机器学习模型预测结果的好坏 肯定取决于 原材料——数据 的好坏。数据清洗就是要去除“脏”数据。

    特征降维之前还可能做的事情:
    数据采样【正对样本类别不平衡问题】、特征处理【标准化、归一化、二值化、哑编码、缺失值、数据转换…】

    数据采样

    数据在采集、清洗过后,正负样本有可能是不均衡的。所以要进行数据采样,采样的方式有随机采样分层抽样
    但是随机采样存在隐患,因为随机采样得到的数据很不均匀,因此更多的是根据特征进行分层抽样。

    正负样本不平衡的处理办法:
    正样本>负样本,样本量大的话,可以采用下采样
    样本量不大的话,可以使用上采样,如:图像识别中的 镜像 和 旋转;修改损失函数,设置样本权重。
    【周志华 《机器学习》3.6节有介绍】

    特征处理

    feature scaling

    学习链接:https://mp.weixin.qq.com/s/tG9igr5dXawr_ZDWnLwRgg
    网上对于 标准化、归一化这两个词的解释,以及代表的含义 五花八门…这里干脆用 feature scaling 统一起来。
    feature scaling 的两个原因:

    • 特征的单位(尺度)不一样,就不能放在一起比较。如:一个特征的变化范围是[1000,1000000],而另一个特征的变化范围是[-0.01,0.2],在进行距离计算时,明显尺度大的特征起决定性作用,尺度小的特征的作用极有可能被忽略。
    • 原始特征下,因为尺度差异,损失函数的等高线图可能是椭圆形,如果梯度下降的话,会走zigzag路线。通过zero-mean 或者 unit-variance变换后,损失函数的登高线图更加接近圆形,梯度下降的震荡更小,收敛更快。
      常用feature scaling方法主要有4种:
    1. Rescaling
      在这里插入图片描述
    2. mean normalization:
      在这里插入图片描述
    3. standardization(Z-score Normalization)
      在这里插入图片描述
      每一个特征维度的均值都为0,方差都为1. (zero-mean and unit-variance)
    4. scaling to unit length
      在这里插入图片描述
      每一个样本,除以其长度。这样,每一个样本向量都是单位向量。

    如果将每一个样本按列排放,即,每一列代表一个样本,每一行代表一个特征维度(和我们平常用的反过来)。那么,前三种方法都是逐行操作,即,对所有样本的特定特征维度进行操作,变化主要体现在特征上。最后一种方法是对一个个样本,逐列进行操作。

    前三种都可以看作是去量纲的方法【因为分子分母相除,单位消失】,降低特征尺度的影响,可以看作是某种尺度无关操作。但是,最大最小值缩放对outliers比较敏感。outliers对后者的影响与outliers数量和数据集大小有关,outliers越少,数据集越大,影响越小。

    最后一种除以长度,把所有样本映射到单位球上,可以看作是某种长度无关操作。【计算余弦距离、内积相似度时需要】

    在这里插入图片描述
    观察上图,standardization是不会消除变量之间的线性相关性的。

    • 定量特征二值化
    • 定性特征哑编码
    • 缺失值处理
    • 数据变换

    多重共线性

    多重共线性指的是特征变量彼此线性相关。
    特征变量之间如果存在多重共线性 该如何处理?
    PCA是一个解决办法,PCA 降维后,得到的特征的相关性会降低。但是,PCA会丢掉特征的可解释性。【可以计算PCA前后特征的方差膨胀因子VIF,看看是否是这样。】

    一、特征降维之特征选择

    特征选择是建模中常用的降维手段,比较暴力,直接将不重要特征删除。
    缺点:造成信息丢失,不利于模型精度。【与之形成对比的是PCA、LDA等降维方式。】
    主要标准有两个:

    1. 特征是否发散。
    2. 特征与目标的相关性。

    :在进行特征工程之前,需要进行特征的设计,因为没有特征又何来的特征选择?项目提供的数据集特征不一定就能直接作为模型训练的特征,需要对具体场景进行理解、建模,得到合理的特征,毕竟“数据决定了机器学习模型能力的上限”。

    1. 过滤式特征选择

    使用统计的方式对特征进行打分排名。
    优点:有统计学理论分析保证。
    缺点:独立考虑每个特征与目标相关性,忽略不同特征之间关联性。【与之对比的是wrapper和embedded等特征选择方式。】

    简介:
    用于 连续型 与 连续型 变量的相关性分析。所以主要用于回归模型,各个 特征与目标之间 的线性相关性。
    属于过滤式(filter)特征筛选。pearson相关系数描述两个变量间的相关性,即两个变量在随时间变化过程中,是同向变化,还是反向变化,还是其他。同向变化,即正相关,pearson系数接近1;反向变化即负相关,pearson系数接近-1;其他变化Pearson系数刻画不出来【只能刻画线性相关】,pearson系数接近0。
    spearman相关系数刻画两个变量之间是否有单调关系。定义为两个变量秩统计量的pearson相关系数。

    操作:
    可以筛选与target,pearson相关系数大于0.5的特征;或者,依据相关系数进行特征排序,取前几名。

    说明:
    相关系数主要用于判别线性相关,对于target变量如果存在更复杂的函数形式的影响,建议使用树模型的特征重要性去筛选。

    • 卡方检验

    简介:
    用于 类别型 与 类别型 变量的相关性分析。所以主要用于分类模型。
    卡方统计量公式:
    X α 2 = Σ i ( O i − E i ) 2 E i \mathcal{X}_{\alpha}^2=\Sigma_i \frac{(O_i - E_i)^2}{E_i} Xα2=ΣiEi(OiEi)2
    其中, α \alpha α代表自由度,O代表观察值,E代表期望值。
    理论具体可以看这篇:https://blog.csdn.net/weixin_44360866/article/details/127108754

    操作:
    可以筛选与target,卡方值大的特征。
    为什么是筛选卡方值大的?因为卡方值很大,就拒绝原假设,原假设是两变量之间无关。

    • 最大信息系数法:

    简介:
    用于 类别型 与 类别型 变量的相关性分析。所以主要用于分类模型。
    有关信息论的基础可以看:https://blog.csdn.net/weixin_44360866/article/details/126304210
    两个随机变量X,Y互信息的定义思路就是:已知Y后,X的不确定性减少了多少。因此,可以用来衡量两个变量之间相互依赖程度的度量
    公式:
    I ( X , Y ) = Σ x ∈ X Σ y ∈ Y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) I(X,Y)=\Sigma_{x\in \mathcal{X}\Sigma_{y\in \mathcal{Y}}} p(x,y){\rm log}\frac{p(x,y)}{p(x)p(y)} I(X,Y)=ΣxXΣyYp(x,y)logp(x)p(y)p(x,y)
    两个变量独立时,联合概率等于边际概率的乘积,所以log里面的值都等于1,log1为0,因此,互信息为0.
    优缺点:
    MIC要比相关系数general,不管是什么函数的相关关系,都能识别。
    不需要标准化/归一化,不同数据集可以直接识别。
    线性相关性有时不如pearson相关系数强。独立性检测不如dcor(距离相关系数)。用于大规模探索性分析会产生太多错误判例。

    操作:
    可以看到公式中设计计算两个变量的概率分布。具体数据集中,使用频率代替概率。【蒙特卡洛思想】
    计算各个特征和target的MIC,进行排名,选前几名。

    图例:
    在这里插入图片描述

    • 方差选择法

    简介:
    属于过滤式特征选择。
    不同于上面依照——与目标的相关性程度,这个评价标准进行特征选择,方差选择法根据——特征自身的发散程度,进行特征选择。
    发散程度越大的变量,提供的信息越多。而方差就是衡量变量发散程度的一个指标。
    变量的方差大家都会算,不放公式了。
    操作:
    根据阈值选择方差大于阈值的特征。

    注:不同的特征单位不同,所以不能直接根据方差进行特征筛选。需要进行归一化 or 标准化 后再用。
    更加常用的是变异系数。

    • 变异系数coefficient of variation,CV

    也称相对标准差、标准偏差系数
    为了针对单位不一致时,可以更加准确地说明两组数据的离散程度,就引入了相对标准差,只需要用标准差除以均值。
    公式:
    1.总体CV: C V = σ μ CV = \frac{\sigma}{\mu} CV=μσ
    2.样本CV: C V = S X ˉ CV = \frac{S}{\bar{X}} CV=XˉS

    2. 嵌入式特征选择

    将机器学习的模型训练过程与特征筛选过程融为一体,在模型训练完成之后便可得出哪些特征是有用的,哪些是没用的。
    但是,只有特定的模型能够用来做特征选择。
    目前常用的有两种:

    1. LASSO:正则项是1-范数,模型求出来的解具有稀疏性,可以通过调整惩罚项系数大小来控制解的稀疏程度。【解就是要学习的参数,即,线性回归中的回归系数。】
    2. 树模型:随机森林RF or 梯度提升树GBDT,可以输出特征的重要性【这就有点像过滤法了…】,通过特征重要性对特征进行排序,选择最重要的那几个特征。

    树模型做特征选择

    树的集成算法最著名的有 随机森林Random Forest、梯度提升树Gradient Boosting Decision Tree.
    随机森林属于Bagging,使用自助采样Bootstrap,可以并行训练 ;GBDT属于Boosting,每一轮训练一棵树,且改善前一轮的结果,所以不能并行,使用的是前向分步算法的优化框架。
    随机森林具有很好的抵抗过拟合的特性,参数(决策树的个数)对预测能力的影响较小,调参比较容易,一般设置一个较大的数。
    GBDT理论丰富,一般性能更加有优势。

    关于GBDT:
    https://blog.csdn.net/weixin_44360866/article/details/127143440
    GBDT详细原理:https://blog.csdn.net/yangxudong/article/details/53872141
    关于随机森林:https://wap.sciencenet.cn/blog-3431904-1263043.html?mobile=1

    随机森林做特征选择:https://zhuanlan.zhihu.com/p/404691931
    RF是通过包外OOB误差率来计算特征重要程度的。
    GBDT做特征选择:https://zhuanlan.zhihu.com/p/344052390
    GBDT是计算 每一个树中,与特征相关的节点减少了多少平方损失,然后相加 作为特征重要程度的。
    其实只要是树 or 森林,就可以按照上面GBDT的思路计算特征重要程度。所以,XGboost、lightGBM也可以用来计算特征重要程度。
    【再附上XGboost的学习链接:https://zhuanlan.zhihu.com/p/142413825
    lightGBM文档:https://lightgbm.readthedocs.io/en/latest/index.html
    lightGBM学习链接:https://www.biaodianfu.com/lightgbm.html
    注意:GBDT中的树一定是回归树!!

    catBoost学习:link1
    link2

    天池经典赛题-蒸汽量预测 之特征工程

    只提供代码进行举例:


    未完待续…

  • 相关阅读:
    辅助驾驶功能开发-功能规范篇(24)-1-影子模式功能触发规范
    京东数据分析软件:2023年8月京东护肤行业品牌销售排行榜
    golang 并发--goroutine(四)
    centOS7中启动MySQL数据库提示: Failed to start mysqld.service Unit not found
    基于SuperMap iObjects C++之地形凹凸点提取
    vscode使用svn
    如何保障Facebook账号登录稳定?跨境人必看
    MySQL中的日志(redo log、undo log、binlog)
    Linux——线程练习
    java(线程初级)
  • 原文地址:https://blog.csdn.net/weixin_44360866/article/details/127100609