算法知识点——(1)特征工程
目录
一、特征归一化
1. 为什么要做归一化
2. 归一化的类型
二、类别型特征
在对数据处理时,应怎样处理类别型特征?
三、文本表示模型
有哪些文本表示模型? 它们各有什么优缺点?
四、word2vev
1. Word2Vec是如何工作的?
2. Word2Vec和LDA有什么区别与联系?
五、常见的特征选择分类
1. Filter方法
2. Wrapper方法
3. Embedded方法
一、特征归一化
1. 为什么要做归一化
为了消除数据特征间的量纲影响,是的不同指标之间具有可比性
(1)归一化加快了梯度下降求最优解的速度
在学习速率相同的情况下,取值空间较大的特征x1更新速度会大于x2,需要较多迭代才能找到最优解。通过梯度下降法求解的模型通常需要归一化,包括线性回归、逻辑回归、支持向量机、神经网络等,但对于决策树不适用,归一化并不会改变样本在特征x上的信息增益。
(2)归一化有可能提高精度
一些分类器需要计算样本件距离(如欧氏距离),若一个特征值域范围较大,则距离计算会主要取决于该特征,从而与实际情况相悖。
2. 归一化的类型
(1)线性归一化/min-max标准化
该方法适用于数值较集中的情况。缺点:若min\max不稳定,则结果不稳定,实际使用中使用经验常值来代替max、min
(2)标准差标准化/Z-Score
经过标准化后数据符合标准正态分布,即均值为0,标准差为1。适用于属性最大值最小值位置的情况,或有超出取值范围的离群数据的情况。该方法要求是原始数据分布可近似为高斯分布,否则归一化效果较差。
(3)非线性归一化
常用在数据分化较大的场景,通过数学函数,对原始值进行映射,包括 log、指数、正切的等,需根据数据分布情况,决定非线性函数的曲线。
二、类别型特征
在对数据处理时,应怎样处理类别型特征?
(1) 序号编码
序号编码通常用于处理类别间具有大小关系的数据。按照大小关系对类别型特征赋予一个数值ID, 例如高表示为3、 中表示为2、 低表示为1, 转换后依然保留了大小关系。
(2)独热编码
独热编码通常用于处理类别间不具有大小关系的特征,将数据处理为多维系数矩阵。 对于类别取值较多的情况下使用独热编码需要注意以下问题。
- 使用稀疏向量来节省空间。 在独热编码下, 特征向量只有某一维取值为1, 其他位置取值均为0。 因此可以利用向量的稀疏表示有效地节省空间, 并且目前大部分的算法均接受稀疏向量形式的输入。
- 配合特征选择来降低维度。 高维度特征会带来几方面的问题。 一是在K近邻算法中, 高维空间下两点之间的距离很难得到有效的衡量; 二是在逻辑回归模型中, 参数的数量会随着维度的增高而增加, 容易引起过拟合问题; 三是通常只有部分维度是对分类、 预测有帮助, 因此可以考虑配合特征选择来降低维度。
(3) 二进制编码
二进制编码主要分为两步, 先用序号编码给每个类别赋予一个类别ID, 然后将类别ID对应的二进制编码作为结果。以A、 B、 AB、 O血型为例, A型血的ID为1, 二进制表示为001; B型血的ID为2, 二进制表示为010; 以此类推可以得到AB型血和O型血的二进制表示。 二进制编码本质上是利用二进制对ID进行哈希映射, 最终得到0/1特征向量, 且维数少于独热编码, 节省了存储空间。
三、文本表示模型
有哪些文本表示模型? 它们各有什么优缺点?
(1)词袋模型和N-gram模型
最基础的文本表示模型是词袋模型。将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量, 向量中的每一维代表一个单词, 而该维对应的权重则反映了这个词在原文章中的重要程度。 常用TF-IDF来计算权重, 公式为
其中TF(t,d)为单词t在文档d中出现的频率, IDF(t)是逆文档频率, 用来衡量单词t对表达语义所起的重要性,
词袋模型并不能反映单词的顺序,通常, 可以将连续出现的n个词(n≤N) 组成的词组(N-gram) 也作为一个单独的特征放到向量表示中去, 构成N-gram模型。 另外, 同一个词可能有多种词性变化, 却具有相似的含义。 在实际应用中, 一般会对单词进行词干抽取(Word Stemming) 处理, 即将不同词性的单词统一成为同一词干的形式。
(2)主题模型
主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性) , 并且能够计算出每篇文章的主题分布
(3)词嵌入与深度学习模型
词嵌入是一类将词向量化的模型的统称, 核心思想是将每个词都映射成低维空间(通常K=50~300维) 上的一个稠密向量(Dense Vector) 。 K维空间的每一维也可以看作一个隐含的主题, 只不过不像主题模型中的主题那样直观。
由于词嵌入将每个词映射成一个K维的向量, 如果一篇文档有N个词, 就可以用一个N×K维的矩阵来表示这篇文档,深度学习模型提供了一种自动地进行特征工程的方式, 模型中的每个隐层都可以认为对应着不同抽象层次的特征。 卷积神经网络和循环神经网络由于它们能够更好地对文本进行建模, 抽取出一些高层的语义特征。 与全连接的网络结构相比, 卷积神经网络和循环神经网络一方面很好地抓住了文本的特性, 另一方面又减少了网络中待学习的参数,提高了训练速度, 并且降低了过拟合的风险。
四、word2vev
1. Word2Vec是如何工作的?
CBOW的目标是根据上下文出现的词语来预测当前词的生成概率; 而Skip-gram是根据当前词来预测上下文中各词的生成概率
其中w(t)是当前所关注的词, w(t-2)、 w(t-1)、 w(t+1)、 w(t+2)是上下文中出现的词。 这里前后滑动窗口大小均设为2。
CBOW和Skip-gram都可以表示成由输入层(Input) 、 映射层(Projection) 和输出层(Output) 组成的神经网络。
输入层中的每个词由独热编码方式表示, 即所有词均表示成一个N维向量, 其中N为词汇表中单词的总数。
映射层(又称隐含层) 中, K个隐含单元(Hidden Units) 的取值可以由N维输入向量以及连接输入和隐含单元之间的N×K维权重矩阵计算得到。 在CBOW中, 还需要将各个输入词所计算出的隐含单元求和。
输出层向量的值可以通过隐含层向量(K维) , 以及连接隐含层和输出层之间的K×N维权重矩阵计算得到。 输出层也是一个N维向量, 每维与词汇表中的一个单词相对应。 最后, 对输出层向量应用Softmax激活函数, 可以计算出每个单词的生成概率。
接下来的任务就是训练神经网络的权重, 使得语料库中所有单词的整体生成概率最大化。 从输入层到隐含层需要一个维度为N×K的权重矩阵, 从隐含层到输出层又需要一个维度为K×N的权重矩阵, 学习权重可以用反向传播算法实现, 每次迭代时将权重沿梯度更优的方向进行一小步更新。 但是由于Softmax激活函数中存在归一化项的缘故, 推导出来的迭代公式需要对词汇表中的所有单词进行遍历, 使得每次迭代过程非常缓慢, 由此产生了Hierarchical Softmax和NegativeSampling两种改进方法, 有兴趣的读者可以参考Word2Vec的原论文[3]。 训练得到维度为N×K和K×N的两个权重矩阵之后, 可以选择其中一个作为N个词的K维向量表示。
2. Word2Vec和LDA有什么区别与联系?
首先, LDA是利用文档中单词的共现关系来对单词按主题聚类, 也可以理解为对“文档-单词”矩阵进行分解, 得到“文档-
主题”和“主题-单词”两个概率分布。
Word2Vec其实是对“上下文-单词”矩阵进行学习, 其中上下文由周围的几个单词组成, 由此得到的词向量表示更多地融入了上下文共现的特征。 也就是说, 如果两个单词所对应的Word2Vec向量相似度较高, 那么它们很可能经常在同样的上下文中出现。
主题模型通过一定的结构调整可以基于“上下文-单词”矩阵进行主题推理。 同样地,词嵌入方法也可以根据“文档-单词”矩阵学习出词的隐含向量表示。 主题模型和词嵌入两类方法最大的不同其实在于模型本身, 主题模型是一种基于概率图模型的生成式模型, 其似然函数可以写成若干条件概率连乘的形式, 其中包括需要推测的隐含变量(即主题) ; 而词嵌入模型一般表达为神经网络的形式, 似然函数定义在网络的输出之上, 需要通过学习网络的权重以得到单词的稠密向量表示。
五、常见的特征选择分类
特征工程主要分为三个方面:特征构造、特征选择、特征生成,这里主要介绍特征选择的具体方法
- 过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或选择特征个数,需要目标值(基于方差的不需要)
- 包装法,根据目标函数(通常是预测效果评分),每次选择/排除若干特征
- 嵌入法,先试用机器学习算法与模型进行训练,得到各特征的权值系数,根据系数从大到小选择特征,类似于Filter方法,但是是通过训练确定特征的优劣。
1. Filter方法
(1) 方差选择法
使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
from sklearn.feature_selection import VarianceThreshold
#方差选择法,返回值为特征选择后的数据
#参数threshold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)
(2)相关系数法
使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。用
feature_selection库的SelectKBest类结合相关系数来选择特征的代码如下:
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,
#输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T,
k=2).fit_transform(iris.data, iris.target)
(3)卡方检验
经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
#选择K个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
(4) 互信息法
经典的互信息也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:
为了处理定量数据,最大信息系数法被提出,使用feature_selection库的SelectKBest类结合最大信息系数法来选择特征的代码如下:
from sklearn.feature_selection import SelectKBestfrom minepy import MINE#由于MINE的设计不是函数式的,定义mic方法将其为函数式的,#返回一个二元组,二元组的第2项设置成固定的P值0.5def mic(x, y):m = MINE()m.compute_score(x, y)return (m.mic(), 0.5)#选择K个最好的特征,返回特征选择后的数据
SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
2. Wrapper方法
(1)递归特征删除算法
把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。 典型的包裹型算法为 “递归特征删除算法”
- 用全量特征跑一个模型
- 根据线性模型的系数(体现相关性),删掉5-10%的弱特征,观察准确率/auc的变化
- 逐步进行,直至准确率/auc出现大的下滑停止
3. Embedded方法
(1)基于惩罚项的特征选择法
使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用feature_selection库的SelectFromModel类结合带L1惩罚项的逻辑回归模型,来选择特征的代码如下:
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression#带L1惩罚项的逻辑回归作为基模型的特征选择
SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
实际上,L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。故,可结合L2惩罚项来优化。具体操作为:若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,具体参考 参考文献3
Lasso (L1正则化) 是指向量中各个元素绝对值之和,L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。L1正则化像非正则化线性模型一样也是不稳定的,L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。
Ridge (L2范数)是指向量各元素的平方和然后求平方根,L2正则化会让系数的取值变得平均。对于关联特征,这意味着他们能够获得更相近的对应系数。可以看出,系数之和为常数时,各系数相等时惩罚是最小的,所以才有了L2会让各个系数趋于相同的特点。 L2正则化对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。
(2) 基于树模型的特征选择法
具体参考结合Scikit-learn介绍几种常用的特征选择方法
参考文献:
1. 《百面机器学习》
2. 机器学习中,有哪些特征选择的工程方法
3. 常用的特征选择方法
4. 结合Scikit-learn介绍几种常用的特征选择方法
算法知识点——(1)特征工程相关推荐
- 重磅 | 《机器学习综述》算法分类及特征工程手推笔记!
编辑:Sophia | 王博(Kings)笔记 计算机视觉联盟 报道 | 公众号 CVLianMeng 这是AI博士系列笔记的第一篇(欢迎关注王博的公众号[计算机视觉联盟],我们一起学习进步!) 笔记 ...
- 重磅 | 《机器学习综述》算法分类及特征工程手写笔记
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia | 王博(Kings)笔记 计算机视觉联盟 报道 | 公众号 CVLia ...
- 《机器学习算法竞赛实战》-chapter4特征工程
<机器学习算法竞赛实战>学习笔记,记录一下自己的学习过程,详细的内容请大家购买作者的书籍查阅. 特征工程 特征工程是算法竞赛中工作量最大,决定参赛者能否拿到较好名次的关键部分.吴恩达老师说 ...
- 推荐系统:数据与特征工程
推荐系统是机器学习的一个子领域,并且是一个偏工程化.在工业界有极大商业价值的子方向. 目前绝大多数提供 toC 类产品或者服务的互联网企业,会通过推荐系统为用户提供精准的个性化服务. 推荐系统通过推荐 ...
- 特征工程整理流程和涉及技术点
转自:http://www.cnblogs.com/weibao/p/6252280.html 上周参加了学校的数据挖掘竞赛,总的来说,在还需要人工干预的机器学习相关的任务中,主要解决两个问题:(1) ...
- image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍
介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...
- sklearn实战-----3.数据预处理和特征工程
1 概述 1.1 数据预处理与特征工程 想象一下未来美好的一天,你学完了菜菜的课程,成为一个精通各种算法和调参调库的数据挖掘工程师了.某一天 你从你的同事,一位药物研究人员那里,得到了一份病人临床表现 ...
- 量化投资中的特征工程
导语:近年来,国内量化投资迎来了发展的黄金期,但涉及机器学习的量化投资还比较少.机器学习领域的大神Andrew Ng(吴恩达)老师曾经说过机器学习很大程度上就是特征工程,因此本文主要介绍下特征工程在量 ...
- 机器学习概述和特征工程
机器学习笔记一 机器学习 概述 数据集的结构 特征工程 特征抽取 特征的预处理 数据降维 机器学习基础 机器学习开发流程 机器学习 概述 影响人工智能发展的因素 硬件的计算能力 数据的限制 算法的发展 ...
- sklearn 数据处理与特征工程
1.数据处理的流程 2 数据预处理 Preprocessing & Impute 2.1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到 ...
最新文章
- keepalived+nginx负载均衡+ApacheWeb实现高可用
- 转:人气资源大集合~~~2014年12月
- c# webapi POST 参数解决方法
- ASP.NET + SqlSever 大数据解决方案 PK HADOOP
- hdu4585 STL水题
- SQL旁注精华珍藏版代码
- 使用SharePoint 2010新增的文档集内容类型来管理文档
- eclipse 导入maven项目_解决Eclipse导入JAVA WEB项目错误的问题
- Angular之ngx-permissions的控制视图访问
- GY编辑平台产品总结
- java中,将string 转化成long
- EXP 导出出错解决方案
- pytorch RNN原理实现词性判别以及预测下一个词
- WPS通过宏工具批量修改图片尺寸
- 深入剖析 redis 事件驱动
- 使用docker和jenkins简单部署springboot项目
- 【贪心】(雾)小Y的炮
- Windows系统必备的软件
- bibitem排版引用顺序不正确,最后一页两栏平衡
- 沃尔玛积极助农,2月全国范围直采滞销蔬菜近500吨
热门文章
- “文艺复兴” ConvNet卷土重来,压过Transformer!FAIR重新设计纯卷积新架构
- springcloud---how2java--记录零碎的信息
- Python 练习: 打印0到99小于50或大于70的数字
- 001LeetCode--TwoSum
- python学习点滴记录-Day14-前端基础之javascript
- SQL0286N 找不到页大小至少为 8192、许可使用授权标识 db2inst 的缺省表空间。...
- mysql 5.1 到 mysql 5.2的出现的索引BTREE问题 use near 'USING BTREE
- NYOJ 214(二分插入)
- 重大危机引发的公司经营战略问题回顾
- OpenCV学习笔记】二十七、轮廓特征属性及应用(四)——正外接矩形