特征选择、特征降维(PCA、LDA)


)

  • 如果我们的样本中特征维度过大,可能会影响到我们算法本身的学习效率,
  • 或者有些特征并不是一些有效特征,是一些冗余的,无效的特征,会对算法的学习产生一定的干扰

这个时候,就要考虑对数据特征进行降维操作,是非常有必要的。

降维的两种方式

  • 特征选择
    • 从原有的特征当中,选择出其中有效的特征出来(选择之后,有一些特征不要了,但是,留些来的特征仍然是原有的特征)
  • 主成分分析(可以理解成一种特征提取的方式)
    • 可能会得到“新的特征矩阵”,且维度降低,新的特征,和原始的特征不一样,比如原有特征矩阵mn,通过一些方式,比如矩阵变换,得到了新的m1m1的特征矩阵,从而达到降维的目的。

举例说明:
比如我现在有一个正方体,特征分别为(长,宽,高)

  • 特征选择:当,高,这个特征对算法模型训练来说,并没有多大价值的时候,我可以只选择(长,宽)两个特征,从而达到降维的效果,但是,新的特征属性任然是原始特征中的
  • 主成分分析,如果我对原始特征(长,宽,高)进行转换得到新的特征(面积,体积)也可以用来算法的训练,达到降维的目的,这个时候新的特征(面积,体积)就是通过对原始特征进行主成分分析得来的,但是,新的特征却不是原有特征之中的。

这个例子可能有些不准确,但是主要理解两种降维方式新特征,与原始特征的关系。


特征选择

数据中包含冗余或无关的变量(或特征,属性,指标等),旨在从原有特征中找出主要特征。

机器学习中特征选择主要有以下三种方式:

  • Filter:过滤法。按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,从而选择特征;常用方法包括方差选择法、相关系数法、卡方检验、互信息法等。比如,我们之前提到的,当某一特征的方差为0,或者方差几乎为零,这个时候说明这个特征非常的接近,就可以考虑是否删去这个特征。
  • Wrapper:包装法。根据目标函数(通常是预测效果评分),每次选择若干特征或者排除若干特征;常用方法主要是递归特征消除法。比如,我们有一个基础的模型,有x1,x2,x3,x4特征,现在我每次选择两个不同的特征组合进行训练,如果,我X1,x2,特征组合训练模型的准确性是0.8,但是我用X1,X2,X3,组合训练的结果却为0.5,这个时候是不是要考虑,X3特征是否要舍去。(需要基础模型)
  • . Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权重系数,根据系数从大到小选择特征;常用方法主要是基于惩罚项的特征选择法。要求模型能够得到特征的权重系数。
    目的
    去除冗余数据,提高算法效率,避免过拟合

特征选择实例sklearn

import numpy as np
import warnings

from sklearn.feature_selection import VarianceThreshold,SelectKBest
from sklearn.feature_selection import f_regression
from sklearn.feature_selection import chi2
from sklearn.feature_selection import RFE
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression


X = np.array([
    [0, 2, 0, 3],
    [0, 1, 4, 3],
    [0.1, 1, 1, 3]
], dtype=np.float32)
Y = np.array([1,2,1])

#方差选择:
# 基于方差选择最优的特征属性
variance = VarianceThreshold(threshold=0.1)
print(variance)
variance.fit(X)
print("各个特征属性的方差为:")
print(variance.variances_)
print('-----------------')
print(variance.transform(X))


# ## 相关系数法

# In[4]:


sk1 = SelectKBest(f_regression, k=2)
sk1.fit(X, Y)
print(sk1)
print('------------')
print(sk1.scores_)
print('------------')
print(sk1.transform(X))


# ## 卡方检验

# In[5]:


# 使用chi2的时候要求特征属性的取值为非负数
sk2 = SelectKBest(chi2, k=2)
sk2.fit(X, Y)
print(sk2)
print(sk2.scores_)
print(sk2.transform(X))


# ## Wrapper-递归特征消除法

# 基于特征消去法做的特征选择
estimator = LogisticRegression()
selector = RFE(estimator, 2, step=5)
selector = selector.fit(X, Y)
print(selector.support_)
print(selector.n_features_)
print(selector.ranking_)
print(selector.transform(X))


# ## Embedded【嵌入法】-基于惩罚项的特征选择法
X2 = np.array([
    [ 5.1,  3.5,  1.4,  0.2],
    [ 4.9,  3. ,  1.4,  0.2],
    [ -6.2,  0.4,  5.4,  2.3],
    [ -5.9,  0. ,  5.1,  1.8]
], dtype=np.float64)
Y2 = np.array([0, 0, 2, 2])
estimator = LogisticRegression(penalty='l2', C=0.1)
sfm = SelectFromModel(estimator,threshold=0.1)
sfm.fit(X2, Y2)
print(sfm.transform(X2))
print("系数:")
print(sfm.estimator_.coef_)

补充

  • 某一个特征X很重要,知道了这个特征X,就可以预测目标值Y,但是这个特征又很难收集,那么这个时候,就要考录舍弃这个特征。
  • 现在有A、B两个模型,在模型A中有一个X特征的重要性非常的大,而在模型B中所有特征的重要性都相对比较均衡,那么相同数据特征,B模型的撸棒性更强,抗风险能力更好。

特征降维

当特征选择完成后,可以直接可以进行训练模型了,但是可能由于特征矩阵过大,导致计算量比较大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。
常见的降维方法除了基于L1的惩罚模型外,还有主成分析法(PCA)和线性判别分析法(LDA)这两种方法的本质都是将原始数据,映射到维度更低的样本空间中
但是采用的方式不同

主成分分析法(PAC)

PCA是了让映射后的样本具有更大的发散性,PCA是无监督的学习算法(只需要特征X就可以降维),是根据特征的方差进行降维的

无监督,线性降维方式。
算法原理:通过某种线性投影的方式将高维数据映射到低维空间中表示,并且,期望在投影的维度上数据的方差最大(最大方差论),以此使用较少的数据维度,并保留原有数据点特征。

线性判别分析法(LDA)

LDA是为了让映射后的样本有最好的分类性能,LDA是有监督学习算法。(除了特征属性X还需要标签Y)
**算法原理:**将带上标签的数据(点)通过投影的方法,投影到更低的维度空间中,使得投影后的点会形成按类别区分,一簇一簇的情况,相同类别的点将会在投影后的空间中更接近,用一句话概括就是:投影后类内方差最小,类间方差最大。

PCA和LDA相同点不同的

  • 相同点
    • 两者均可以对数据完成降维操作
    • 两者在降维的时候均值用矩阵分解的思想
    • 两者都假设数据符合高斯分布
  • 不同点
    • LDA有监督降维算法,PCA无监督降维算方法
    • LDA降维最多降到类别数目K的K-1维度,而PCA没有限制
    • LDA除了降维外还可以用来分类
    • LDA选择是分类性能最好的投影,PCA选择样本投影具有最大方差的方向
  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LDA降维PCA降维是两种常用的降维方法,它们有一些区别。首先,LDA是一种有监督学习方法,而PCA是一种无监督学习方法。这意味着LDA降维过程中可以利用类别的先验知识,而PCA则无法使用类别先验知识。\[2\] 其次,LDA在样本分类信息依赖均值而不是方差的情况下表现较好,而PCA则不考虑样本的类别信息,只关注数据的方差。因此,在样本分类信息依赖方差而不是均值的情况下,LDA降维效果可能不如PCA。\[2\] 另外,LDA降维最多可以降到类别数k-1的维数,而PCA没有这个限制。如果需要降维的维度大于k-1,则不能使用LDA。当然,目前也有一些LDA的进化版算法可以绕过这个问题。\[2\] 总的来说,LDA降维更适合在有类别信息的情况下进行降维,而PCA降维则更适合在无监督学习的场景下进行降维。此外,它们在处理非高斯分布样本、样本分类信息依赖方差而不是均值以及过度拟合数据等方面也有一些不同的表现。\[2\] \[3\] #### 引用[.reference_title] - *1* *2* *3* [降维(PCALDA)](https://blog.csdn.net/weixin_43584807/article/details/105162516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

企鹅家的北极熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值