update 2021.04.22
这几年的经验下来,以前以为特征提取的方法时共通的,注意力都在后续算法部分,现在的感受是,不同领域算法反而很多时候时共通的,特征提取差异很大,不能简单的一言以蔽之,这也是当初写完这个简单学习笔记之后感觉帮助不大的原因。
举例来说,CV方向,特征提取需要图像处理的相关知识,NLP方向是一些文本的计算方式,特征就是用数字描述样本,将算法应用到不同领域时候需要不同领域的先验知识,特征可以用一些常用的方法提取,也可以根据自己的相关知识,自定义特征,行业知识对特征提取来说很重要,最近正在信号处理里崩溃,有一种从头开始的感觉,不同行业算法工程师和算法工程师之间的知识储备很可能千差万别。
=============================================
2018.01.30
特征提取:利用已有的特征计算出一个抽象程度更高的特征集,也指计算得到某个特征的算法
我的理解:
特征提取:需要进行特征变换,改变向量空间
特征选择:选择,保留原始特征意义
--------------------------------------------------------------------------------------
复制一段:
PCA
以上来源 http://blog.csdn.net/lanbing510/article/details/40488787
并不完全是我想要的,好像哪里不太对。。
-----------------------------------------------------------------------------------------------
找篇论文:(CV的一篇)
几种特征提取算法性能的评估(魏英姿,刘源,不知道是哪年)http://www.docin.com/p-1230784467.html
1. 特征提取算法:
1.1 FAST(Features from Accelerated Segment Test)(从加快的segment测试中得到feature。。=.=)
1.2 SIFT(Scale Invariant Feature Transfrom)(比例不变特征转换。。=.=)(描述见后续。。图片特征提取部分)
1.3 PCA-SIFT
1.4 SURF( the Speed-up Robust Feature Detector)(加速鲁棒特征检测er。。=.=)(描述见后续。。图片特征提取部分)
1.5 ORB(Oriented Brief)(有方向的摘要。。=.=)
2. 随机抽样一致性算法(Random Sample Consensus, RANSAC)
---------------------------------------------------------------------------------------------
网上复制一截,作为上述补充。。 来源:http://blog.csdn.net/zhangzhengyi03539/article/details/49945011
MDS(Muli-demision scaling)
MDS也是一种无监督的特征映射方法。MDS建立一个原始高维输入空间样本到低维特征空间样本的一一映射,建立的原则是在输入空间距离近的样本在低维特征空间的距离也要近。
Isomap
Isomap基于MDS。Isomap通过计算最段路径利用MDS进行降维。在利用Isomap的时候可以有两种方法确定原始输入空间样本之间知否有路径:一是设置阀值,两样本之间距离小于阀值的就认为是有边;另一种是设置邻居节点个数k,认为每个节点都与与它最近的k个样本之间存在边。
LLE
LLE是局部化模型,通过对节点的临域建立OLS回归模型,然后根据OLS的权重构建特征空间样本。
SVD
-----------------------------------------------------------------------------------------
网上又找一段。。来源:http://blog.csdn.net/rosenor1/article/details/52372788
先说一句题外的:
特征是什么样的。。
这篇文章里面说到了这句话:
“分类变量通常用独热编码(One-of-K or One-Hot Encoding),通过二进制数来表示每个解释变量的特征。”
想起来以前有一次面试的时候说到human detection,面试的人问我HoG特征是什么样的,当时觉得有一种无法言说的感觉,面试官后来解释了一下,觉得他说的也跟没说没差。。然后找到了这篇HoG特征简单梳理http://blog.csdn.net/coming_is_winter/article/details/72850511
复制正经的:
文字特征提取--词库模型(Bag-of-words model)
一批文档的集合称为文集(corpus)
文件的单词构成词汇表(vocabulary)
构成特征向量的元素数量称为维度(dimension)
一个词典(dictionary)来表示词汇表与特征向量索引的对应关系
将文档词块化(tokenize)。文档词块化是把句子分割成词块(token)或有意义的字母序列的过程。词块大多是单词,但是他们也可能是一些短语,如标点符号和词缀。
词汇表里面有10个单词,但a不在词汇表里面,是因为a的长度不符合CountVectorizer类的要求。
对比文档的特征向量,会发现前两个文档相比第三个文档更相似。如果用欧氏距离(Euclidean distance)计算它们的特征向量会比其与第三个文档距离更接近。两向量的欧氏距离就是两个向量欧氏范数(Euclidean norm)或L2范数差的绝对值:
向量的欧氏范数是其元素平方和的平方根:
有许多零元素的高维特征向量成为稀疏向量(sparse vectors)。
第一个问题就是高维向量需要占用更大内存。NumPy提供了一些数据类型只显示稀疏向量的非零元素,可以有效处理这个问题。
第二个问题就是著名的维度灾难(curse of dimensionality,Hughes effect),维度越多就要求更大的训练集数据保证模型能够充分学习。如果训练样本不够,那么算法就可以拟合过度导致归纳失败。下面,我们介绍一些降维的方法。
停用词过滤
特征向量降维的一个基本方法是单词全部转换成小写。这是因为单词的大小写一般不会影响意思。词库模型并不在乎单词的位置和语法。
另一种方法是去掉文集常用词。这里词称为停用词(Stop-word),像a,an,the等。
词根还原与词形还原
停用词去掉之后,可能还会剩下许多词,还有一种常用的方法就是词根还原(stemming )与词形还原(lemmatization)。
词根还原与词形还原就是为了将单词从不同的时态、派生形式还原。
词形还原:生成单词的形态学的词根
就是用来处理可以表现单词意思的词元(lemma)或形态学的词根(morphological root)的过程。词元是单词在词典中查询该词的基本形式。
通常需要词法资料的支持,比如WordNet和单词词类(part of speech)。
词根还原:把附加的词缀都去掉,构成一个词块,可能不是一个正常的单词。
通常需要用规则产生词干(stem)并操作词块,不需要词法资源,也不在乎单词的意思。
带TF-IDF权重的扩展词库。。作为统计学上的方法对于短文本的应用不是太好
一个文档中某个词多次出现,相比只出现过一次的单词更能体现反映文档的意思。
这个统计量是可以提前算好的,使用时直接查表即可,不会存在效率问题。
这种单词频率构成的特征向量为文档的意思提供了更多的信息,但是在对比不同的文档时,需要考虑文档的长度。
很多单词可能在两个文档的频率一样,但是两个文档的长度差别很大,一个文档比另一个文档长很多倍。scikit-learn的TfdfTransformer类可以解决这个问题,通过对词频(term frequency)特征向量归一化来实现不同文档向量的可比性。默认情况下,TfdfTransformer类用L2范数对特征向量归一化:
f(t,d)是第d个文档(document)t个单词(term)的频率,∥x∥是频率向量的L2范数。
对数词频调整方法(logarithmically scaled term frequencies),把词频调整到一个更小的范围
TfdfTransformer类计算对数词频调整时,需要将参数sublinear_tf设置为True。
词频放大法(augmented term frequencies),适用于消除较长文档的差异
maxf(w,d):w∈d是文档d中的最大词频。scikit-learn没有现成可用的词频放大公式,不过通过CountVectorizer可以轻松实现。
归一化,对数调整词频和词频放大三支方法都消除文档不同大小对词频的影响。
但是,另一个问题仍然存在,那就是特征向量里高频词的权重更大,即使这些词在文集内其他文档里面也经常出现。这些单词并没有突出代表单个文档的意思。逆向文件频率(inverse document frequency,IDF)就是用来度量文集中单词频率的。
其中,N是文集中文档数量,d∈D:t∈d表示包含单词tt的文档数量。单词的TF-IDF值就是其频率与逆向文件频率的乘积。
通过TF-IDF加权之后,我们会发现在文集中较常见的词被调整了。
通过哈希技巧实现特征向量
前面我们是用包含文集所有词块的词典来完成文档词块与特征向量的映射的。这么做有两个缺点。首先是文集需要被调用两次。第一次是创建词典,第二次是创建文档的特征向量。另外,词典必须储存在内存里,如果文集特别大就会很耗内存。通过哈希表可以有效的解决这些问题。可以将词块用哈希函数来确定它在特征向量的索引位置,可以不创建词典,这称为哈希技巧(hashing trick)。scikit-learn提供了HashingVectorizer来实现这个技巧:
fromsklearn.feature_extraction.textimportHashingVectorizercorpus=['the','ate','bacon','cat']vectorizer=HashingVectorizer(n_features=6)print(vectorizer.transform(corpus).todense())
[[-1. 0. 0. 0. 0. 0.] [ 0. 0. 0. 1. 0. 0.] [ 0. 0. 0. 0. -1. 0.] [ 0. 1. 0. 0. 0. 0.]]
哈希技巧是无固定状态的(stateless),它把任意的数据块映射到固定数目的位置,并且保证相同的输入一定产生相同的输出,不同的输入尽可能产生不同的输出。它可以用并行,线上,流式传输创建特征向量,因为它初始化是不需要文集输入。n_features是一个可选参数,默认值是220220,这里设置成6是为了演示。另外,注意有些单词频率是负数。由于Hash碰撞可能发生,所以HashingVectorizer用有符号哈希函数(signed hash function)。特征值和它的词块的哈希值带同样符号,如果cats出现过两次,被哈希成-3,文档特征向量的第四个元素要减去2。如果dogs出现过两次,被哈希成3,文档特征向量的第四个元素要加上2。
用带符号哈希函数可以把词块发生哈希碰撞的概率相互抵消掉,信息损失比信息损失的同时出现信息冗余要好。哈希技巧的一个不足是模型的结果更难察看,由于哈希函数不能显示哪个词块映射到特征向量的哪个位置了。
图片特征提取
通过像素值提取特征
数字图像通常是一张光栅图或像素图,将颜色映射到网格坐标里。一张图片可以看成是一个每个元素都是颜色值的矩阵。表示图像基本特征就是将矩阵每行连起来变成一个行向量。光学文字识别(Optical character recognition,OCR)是机器学习的经典问题。
和TF-IDF特征向量不同,大部分图像都不是稀疏的。这种表示法的缺点不只是特征向量的维度灾难,还有就是某个位置的学习结果在经过对图像的放缩,旋转或变换之后可能就不对了,非常敏感,缺乏稳定性。另外,这种方法对图像的亮度也十分敏感。所以这种方法在处理照片和其他自然景色图像时不怎么有用。现代计算机视觉应用通常手工实现特征提取,或者用深度学习自动化解决无监督问题。
创建的特征矢量包含了图像的每个像素,既包含了图像特征的有用信息,也包含了一堆噪声。
对感兴趣的点进行特征提取
有信息量的属性,称为兴趣点(points of interest),是由丰富的纹理包围,基本可以重建图像。边缘(edges)和角点(corners)是两种常用的兴趣点类型。边是像素快速变化的分界线(boundary),角是两条边的交集。
当图片的亮度发生统一变化时,这些兴趣点依然存在。
SIFT和SURF
尺度不变特征转换(Scale-Invariant Feature Transform,SIFT)是一种特征提取方法,相比前面使用的方法,SIFT对图像的尺寸,旋转,亮度变化更不敏感。每个SIFT特征都是一个描述图片上某个区域边缘和角点的向量。和兴趣点不同,SIFT还可以获取每个兴趣点和它周围点的综合信息。加速稳健特征(Speeded-Up Robust Features,SURF)是另一个抽取图像兴趣点的方法,其特征向量对图像的尺寸,旋转,亮度变化是不变的。SURF的算法可以比SIFT更快,更有效的识别出兴趣点。
数据标准化
确保解释变量的数据都是同一量级,均值为0的标准化数据。许多评估方法在处理标准化数据集时可以获得更好的效果。标准化数据均值为0,单位方差(Unit Variance)。均值为0的解释变量是关于原点对称的,特征向量的单位方差表示其特征值全身统一单位,统一量级的数据。解释变量的值可以通过正态分布进行标准化,减去均值后除以标准差。
-------------------------------------------------------------------------------------------
查了查,还有一些,梳理在下面:
CHI开方检验
TFIDF可以用于任意文本集合,而CHI则需要文本有分类标签的标记才能计算。
textrank
本身是基于pagerank 算法而来的,词作为顶点,可以用有向图也可以无向图,最开始textrank是就是作为关键词抽取和相关权重计算而出生的。最初是作为关键词抽取方法提出来的,后来也有人尝试作为权重计算方法,但需要注意的是TextRank的计算复杂度很高。
-------------------------------------------------------------------------------------------------------------------------------------------
图像特征提取与特征选择基本方法总结
http://blog.csdn.net/zx799959906/article/details/39369543
-------------------------------------------------------------------------------------------------------------------------------------------
链接:特征工程到底是什么? - 城东的回答
这个太长了。。暂时没空看了
----------------------------------------------------------------------------------------
and finally