【计算机视觉】特征选择&特征提取

本文介绍了计算机视觉中的特征选择和提取。特征选择通过搜索、评价和验证过程来确定最佳子集,降低学习任务的复杂度。主成分分析PCA是一种有效的特征提取方法,用于数据降维,通过求新基和最大化方差来保留关键信息。PCA算法的优缺点、代码实现及鸢尾花数据的降维实例也被详细讨论。
摘要由CSDN通过智能技术生成

1. 特征选择

1.1 简介

  • 特征的主要分类:

    1. 相关特征:对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;

    2. 无关特征:对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;

    3. 冗余特征:不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出。

  • 进行特征选择的主要目的: 降维 、降低学习任务的难度、提升模型的效率

  • 特征选择标准定义:从N个特征中选择其中M(M<=N)个子特征,并且在M个子特征中,准则函数 可以达到最优解。

    特征选择想要做的是:选择尽可能少的子特征,模型的效果不会显著下降,并且结果的类别分布尽可能的接近真实的类别分布。

1.2 特征选择过程

在这里插入图片描述

1.2.1 生成过程:生成候选的特征子集

生成过程是一个搜索过程,这个过程主要有以下三个策略:

1. 完全搜索:根据评价函数做完全搜索。完全搜索主要有两种:穷举搜索非穷举搜索;

2. 启发式搜索:根据一些启发式规则在每次迭代时,决定剩下的特征是应该被选择还是被拒绝。这种方法很简单并且速度很快。

3. 随机搜索:每次迭代时会设置一些参数,参数的选择会影响特征选择的效果。

1.2.2 评价函数:评价特征子集的好坏

评价函数主要用来评价选出的特征子集的好坏,一个特征子集是最优的往往指相对于特定的评价函数来说的。评价函数主要用来度量一个特征(或者特征子集)可以区分不同类别的能力。

  • 根据具体的评价方法主要有三类:

    • 过滤式(filter): 先进行特征选择,然后去训练学习器,所以特征选择的过程与学习器无关。相当于先对于特征进行过滤操作,然后用特征子集来训练分类器。对每一维的特征“打分”,即给每一 维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。
    • 包裹式(wrapper):直接把最后要使用的分类器作为特征选择的评价函数,对于特定的分类器选择最优的特征子集。将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个优化问题。
    • Filter和Wrapper组合式算法:先使用Filter进行特征选择,去掉不相关的特征,降低特征维度;然 后利用Wrapper进行特征选择。
    • 嵌入式(embedding):把特征选择的过程与分类器学习的过程融合一起,在学习的过程中进行特征选择。其主要思想是:在模型既定的情况下学习出对提高模型准确性最好的属性。即在确定模型的过程中,挑选出那些对模型的训练有重要意义的属性。
  • 5种比较常见的评价函数:

    • 距离度量:如果 X 在不同类别中能产生比 Y 大的差异,那么就说明 X 要好于 Y;

    • 信息度量:主要是计算一个特征的信息增益(度量先验不确定性和期望, 后验不确定性之间的差异);

    • 依赖度量:主要用来度量从一个变量的值预测另一个变量值的能力。最常见的是相关系数:用来发现一个特征和一个类别的相关性。如果 X 和类别的相关性高于 Y与类别的相关性,那么X优于Y。对相关系数做一点改变,用来计算两个特征之间的依赖性,值代表着两 个特征之间的冗余度。

    • 一致性度量:对于两个样本,如果它们的类别不同,但是特征值是相同的,那么它们是不一致的;否则是一致的。找到与全集具有同样区分能力的最小子集。严重依赖于特定的训练集和最小特征偏见(Min-Feature bias)的用法;找到满足可接受的不一致率(用户 指定的参数)的最小规模的特征子集。

    • 误分类率度量:主要用于Wrapper式的评价方法中。使用特定的分类器,利用选择的特 征子集来预测测试集的类别,用分类器的准确率来作为指标。这种方法准确率很高,但是 计算开销较大。

1.2.3 停止条件:决定什么时候该停止

停止条件用来决定迭代过程什么时候停止,生成过程和评价函数可能会对于怎么选择停止条件产生影响。

停止条件有以下四种选择:

  • 达到预定义的最大迭代次数;
  • 达到预定义的最大特征数;
  • 增加(删除)任何特征不会产生更好的特征子集;
  • 根据评价函数,产生最优特征子集;

1.2.4 验证过程:特征子集是否有效

2. 特征提取

2.1 特征提取简介

特征是什么:常见的特征有边缘、角、区域等。

特征提取:是通过属性间的关系,如组合不同的属性得到新的属性,这样就改变了原来的特征空间。

特征选择:是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。

目前图像特征的提取主要有两种方法:传统图像特征提取方法 和 深度学习方法。

  • 传统的特征提取方法:基于图像本身的特征进行提取
  • 深度学习方法:基于样本自动训练出区分图像的特征分类器;

特征选择(feature selection)和特征提取(Feature extraction)都属于降维(Dimensionreduction)

2.2 特征提取主要方法——主成分分析PCA

2.2.1 主成分分析PCA

主要目的:为了排除信息量小的特征,减少计算量等

实现方法:将数据从原始的空间中转换到新的特征空间中,例如原始的空间是三维的(x,y,z),x、y、z 分别是原始空间的三个基,我们可以通过某种方法,用新的坐标系(a,b,c)来表示原始的数据,那么a、b、c 就是新的基,它们组成新的特征空间。在新的特征空间中,可能所有的数据在c上的投影都接近于0,即可 以忽略,那么我们就可以直接用(a,b)来表示数据,这样数据就从三维的(x,y,z)降到了二维的(a,b)。

PCA降维的几何意义:对于一组数据,如果它在某一坐标轴上的方差(变量到均值的偏移程度)越大,说明坐标点越分散,该属性能够比较 好的反映源数据。

PCA算法的优化目标就是:① 降维后同一维度的方差最大 (即每个维度之间的特征差异比较大,才能更好地区分不同)② 不同维度之间的相关性为0(互相不能推导出来特征,即协方差为0)

2.2.2 求新基(a,b,c)一般步骤

  1. 对原始数据零均值化(中心化)

    中心化:指变量减去它的均值,使均值为0。 就是一个平移的过程,平移后使得所有数据的中心是(0,0)

    中心化原因:只有中心化数据之后,计算得到的方向才能比较好的“概括”原来的数据。

    中心化的几何意义:将样本集的中心平移到坐标系的原点O上。
    在这里插入图片描述

    # 中心化
    def _centralized(self):
        '''矩阵X的中心化'''
        print('样本矩阵X:\n', self.X)
        centrX = []
        mean = np.array([np.mean(attr) for attr in self.X.T]) #样本集的特征均值 X.T即X的转置
        print('样本集的特征均值:\n',mean)
        centrX = self.X - mean #样本集的中心化
        print('样本矩阵X的中心化centrX:\n', centrX)
        return centrX
    
  2. 求协方差矩阵

    协方差:用来度量两个随机变量关系的统计量。

    同一元素的协方差就表示该元素的方差:(一组数据,如果它在某一坐标轴上的方差越大,说明坐标点越分散,该属性能够比较 好的反映源数据。)
    s 2 = ∑ i = 1 n ( X i − X ‾ ) 2 n − 1 s^2=\frac{\sum \limits _{i = 1}^n(X_i-\overline X)^2}{n-1} s2=n1i=1n(XiX)2
    不同元素之间的协方差就表示它们的相关性 :
    C o v ( X , Y ) = ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) n − 1 Cov(X,Y)= \frac{\sum \limits _{i = 1}^n(X_i-\overline X)(Y_i-\overline Y)}{n-1} Cov(X,Y)=n1i=1n(XiX)(YiY)
    协方差的性质: ①Cov(X, Y)=Cov(Y, X)②Cov(aX, bY)=abCov(X, Y)③Cov(X1+X2, Y)=Cov(X1, Y)+Cov(X2, Y)

    由定义可以看出:Cov(X, X)=D(X),Cov(Y, Y)=D(Y)

    协方差衡量了两属性之间的关系

    当cov(X,Y)>0时,表示X与Y正相关

    当cov(X,Y)<0时,表示X与Y负相关

    当cov(X,Y)=0时,表示X与Y不相关

    def _cov(self):
        '''求样本矩阵X的协方差矩阵C'''
        #样本集的样例总数
        ns = np.shape(self.centrX)[0]
        #样本矩阵的协方差矩阵C
        C = np.dot(self.centrX.T, self.centrX)/(ns - 1)
        print('样本矩阵X的协方差矩阵C:\n', C)
        return C
    
  3. 对协方差矩阵求特征向量和特征值,对特征值进行排序

    前置知识点:

    协方差矩阵:

    在这里插入图片描述

    协方差矩阵的特点:

    • 协方差矩阵计算的是不同维度之间的协方差, 而不是不同样本之间的。

    • 样本矩阵的每行是一个样本, 每列为一个维度, 所以我们要按列计算均值。

    • 协方差矩阵的对角线就是各个维度上的方差

    特别的,如果做了中心化,则协方差矩阵为(**中心化矩阵的协方差矩阵公式,**m为样本个数)
    D = 1 m Z T Z D=\frac {1}{m}Z^TZ D=m1ZTZ

    特征值和特征向量的定义:A为n阶矩阵,若数λ和n维非0列向量x满足Ax=λx,那么数λ称为A的特征值,x称为A的对应于特征值λ 的特征向量

    Ax=λx

    → (A-λE)x=0

    (因为λ为数字,A为矩阵,故相减时λ要乘以单位矩阵才能进行运算)

    在这里插入图片描述

    E是单位矩阵,并且|A-λE|叫做A 的特征多项式。

    当特征多项式等于0的时候,称为A的特征方程,特征方程是一个齐次线性方程组,求解特征值的过程其实就是求解特征方程的解

    求解降维后的矩阵的过程:根据公式|A-λE|=0计算出特征值λ,再代入(A-λE)x=0中计算特征向量x。将特征值按照从大到小的排序,选择其中最大的k个,将对应的k个特征向量作为列向量组成特征向量矩阵Wnxk。计算XnewW(原来的矩阵乘以Wxnk),即将原始的数据集Xnew投影到选取的特征向量上,这样就得到了已交降维的数据集XnewW。

    def _U(self):
        '''求X的降维转换矩阵U, shape=(n,k), n是X的特征维度总数,k是降维矩阵的特征维度'''
        #先求X的协方差矩阵C的特征值和特征向量
        # np.linalg.eig函数用来求特征值和特征向量。
        a,b = np.linalg.eig(self.C) # 特征值赋值给a,对应特征向量赋值给b。函数doc:https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.eig.html
        print('样本集的协方差矩阵C的特征值:\n', a)
        print('样本集的协方差矩阵C的特征向量:\n', b)
        #给出特征值降序的topK的索引序列
        ind = np.argsort(-1*a)# x.argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出到y
        #构建K阶降维的降维转换矩阵U
        UT = [b[:,ind[i]] for i in range(self.K)]
        U = np.transpose(UT)
        print('%d阶降维转换矩阵U:\n'%self.K, U)
        return U
        
    def _Z(self):
        '''按照Z=XU求降维矩阵Z, shape=(m,k), n是样本总数,k是降维矩阵中特征维度总数'''
        Z = np.dot(self.X
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃_早餐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值