看到有些介绍,“特征分为categorical特征 和 continuous特征“不解,查资料得

单个原始特征(或称为变量)通常属于以下几类之一:

  • 连续(continuous)特征;
  • 无序类别(categorical)特征;
  • 有序类别(ordinal)特征。

##连续特征 除了归一化(去中心,方差归一),不用做太多特殊处理,可以直接把连续特征扔到模型里使用。

##无序特征 可以使用One-hot(也叫One-of-k)的方法把每个无序特征转化为一个数值向量。比如一个无序特征color有三种取值:redgreenblue。那么可以用一个长度为3的向量来表示它,向量中的各个值分别对应于redgreenblue。如:

color取值 向量表示
red (1, 0, 0)
green (0, 1, 0)
blue (0, 0, 1)

##有序特征 有些特征虽然也像无序特征那样只取限定的几个值,但是这些值之间有顺序的含义。例如一个人的状态 status 有三种取值: badnormalgood ,显然 bad  <  normal  <  good

当然有些问题里有序可能会很重要,这时候就不应该把其中的顺序关系丢掉。一般的表达方式如下:

status取值 向量表示
bad (1, 0, 0)
normal (1, 1, 0)
good (1, 1, 1)

上面这种表达方式很巧妙地利用递进表达了值之间的顺序关系。

——————————————————————

以线性分类器Linear Regression (LinearReg)为例,它是通过特征的线性加权来预测因变量yy:

y=wTx

但大部分实际情况下,yy与xx都不会是这么简单的线性关系,甚至连单调关系都不会有。那么直接把xx扔进LinearReg模型是怎么也得不到好结果的。很多人会想着既然线性分类器搞不定,那就直接找个非线性的好了,比如高斯核的SVM。我们确实可以通过这种简单换算法的方式解决这个简单的问题。但对于很多实际问题(如广告点击率预测),往往特征非常多,这时候时间约束通常不允许我们使用很复杂的非线性分类器。这也是为什么算法发展这么多年,广告点击率预测最常用的方法还是Logistic Regression (LogisticReg)。

【上述问题的解决办法】——就是对原始特征xx做转化,把原来的非线性关系转化为线性关系

方法一:离散化 

最常用的转化方式是对xx做离散化(discretization),也就是把原来的值分段,转化成一个取值为0或1的向量。原始值落在某个段里,向量中此段对应的元素就为1,否则为0。

离散化的目标是yy与转化后向量里的每个元素都保持比较好的线性关系。

比如取离散点{0.5,1.5,2.5},通过判断

xx属于(−∞,0.5),[0.5,1.5),[1.5,2.5),[2.5,+∞)中哪段来把它离散化为4维的向量。下面是一些例子的离散结果:

原始值xx 离散化后的值
0.1 (1, 0, 0, 0)
1.3 (0, 1, 0, 0)
3.2 (0, 0, 0, 1)
5.8 (0, 0, 0, 1)

离散化方法的关键是怎么确定分段中的离散点。下面是常用的选取离散点的方法:

【1】等距离离散:顾名思义,就是离散点选取等距点。我们上面对xx取离散点{0.5,1.5,2.5}就是一种等距离散

【2】等样本点离散:选取的离散点保证落在每段里的样本点数量大致相同

【3】画图观察趋势:以xx为横坐标,yy为纵坐标,画图,看曲线的趋势和拐点。通过观察下面的图我们发现可以利用3条直线(红色直线)来逐段近似原来的曲线。把离散点设为两条直线相交的各个点,我们就可以把xx离散化为长度为3的向量

方法二:函数变换

函数变换直接把原来的特征通过非线性函数做变换,然后把原来的特征,以及变换后的特征一起加入模型进行训练。常用的变换函数见下表,不过其实你可以尝试任何函数。

常用非线性函数f(x)f(x) xx的取值范围
xαxα; α∈(−∞,+∞)α∈(−∞,+∞) (−∞,+∞)(−∞,+∞)
log(x)log⁡(x) (0,+∞)(0,+∞)
log(x1−x)log⁡(x1−x) (0,1)(0,1)

这个方法操作起来很简单,但记得对新加入的特征做归一化。

方法三:决策树离散法

大白话说决策树模型就是一大堆的if else。它天生就可以对连续特征分段,所以把它用于离散化连续特征合情合理。我称这种方法为决策树离散化方法。例如Gmail在对信件做重要性排序时就使用了决策树离散化方法2

决策树离散化方法通常也是每次离散化一个连续特征,做法如下:

单独用此特征和目标值yy训练一个决策树模型,然后把训练获得的模型内的特征分割点作为离散化的离散点。

这种方法当然也可以同时离散化多个连续特征,但是操作起来就更复杂了,实际用的不多。

方法四:核方法

核方法经常作为线性模型的一种推广出现。以线性回归模型为例,它对应的核方法如下:

fθ(x)=∑i=1nθiK(x,xi)  ,fθ(x)=∑i=1nθiK(x,xi)  ,

其中{xi}ni=1{xi}i=1n为训练样本点,K(xi,xj)K(xi,xj)为核函数,比如常用的高斯核函数为:

K(xi,xj)=exp(−∥xi−xj∥222h2)  。K(xi,xj)=exp⁡(−‖xi−xj‖222h2)  。

如果我们把上面模型里的{K(x,xi)}ni=1{K(x,xi)}i=1n看成特征,而θθ看成模型参数的话,上面的模型仍旧是个线性模型。所以可以认为核方法只是特征函数变换的一种方式。

当然,如果把核函数K(xi,xj)K(xi,xj)看成一种相似度的话,那上面的模型就是kNN模型了,或者叫做加权平均模型也可以。

特征工程——categorical特征 和 continuous特征相关推荐

  1. ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)

    ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤+分类模型设计) 目录 一.总体思路框架 二.特征工程详细步骤(特征分析与特征处 ...

  2. 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(下)

    作者:尘沙杰少.樱落.新峰.DOTA.谢嘉嘉 特征工程--文本特征下半篇! 前 言 这是一个系列篇,后续我们会按照我们第一章中的框架进行更新,因为大家平时都较忙,不会定期更新,如有兴趣欢迎长期关注我们 ...

  3. 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(上)

    作者:尘沙杰少.樱落.新峰.DOTA.谢嘉嘉 特征工程--文本特征上半篇! 前 言 这是一个系列篇,后续我们会按照我们第一章中的框架进行更新,因为大家平时都较忙,不会定期更新,如有兴趣欢迎长期关注我们 ...

  4. 《特征工程入门与实践》--- 特征学习

    <特征工程入门与实践>--- 特征学习 数据形状的无参数假设:特征学习方法 1. 受限玻尔兹曼机(RBM) 受限玻尔兹曼机(RBM)学习笔记 RBM的训练过程: 从MNIST中提取PCA成 ...

  5. EOF-DataScience:数据预处理/特征工程之线性变换—四种特征缩放Scaling算法简介、标准化standardization、归一化Normalization的概述与区别

    DataScience:数据预处理/特征工程之线性变换-四种特征缩放Scaling算法简介.标准化standardization.归一化Normalization的概述与区别 目录 数据处理中常见的四 ...

  6. python特征工程有序变量处理_特征工程之离散变量处理

    使用sklearn训练模型,只能输入数值型变量.因此需要对数据集中的非数值型离散变量进行处理,非数值型离散变量分为两类:有序型与无序型 一.有序型离散变量处理 什么叫有序型离散变量呢,比如说衣服尺码, ...

  7. 特征工程(2):特征构建

    特征的构建与选取在提高预测精度方面越来越受到重视,甚至影响到预测项目的成败. 通常初始特征是基于领域经验构建的,比如在预测短期负荷的时候,一般会考虑节假日.气温.历史负荷水平等因素来构建特征.然而这样 ...

  8. 【持续更新】机器学习特征工程实用技巧大全

    https://zhuanlan.zhihu.com/p/26444240 (2018/2/6 更新:修改了部分名词的翻译) 与其说是教程类的科普,不如说是一篇经验向的个人笔记,所以细节上比较懒.其实 ...

  9. 京东风控团队带你全方位解读特征工程

    文章目录 导读 特征工程是连接数据和算法的桥梁 好的特征工程需要好的数据质量 1. 缺失值处理 2. 防止数据穿越 3. 特征稳定最重要 特征构建方法 1. 时间序列特征 2. 位置特征 3. 文本特 ...

最新文章

  1. Spring Cloud Hoxton正式发布,Spring Boot 2.2.x不再孤单
  2. logback修改日志内容_巧用maven profile动态修改logback日志目录
  3. 音视频技术开发周刊 82期
  4. mybatis中,collection配置后查询只显示一条记录
  5. url 参数传递的两种方式_VB编程中的传值与传址两种参数传递方式,你清楚吗?...
  6. 《spring-boot学习》-12-@controller和@RestController的区别?
  7. 推荐学习网页标准的20个好去处
  8. 超详解代理服务器的使用方法
  9. (Windows) CodeBlocks 下载
  10. 【C语言】关机程序的实现以及函数
  11. 自定义jsx解析工厂函数
  12. HP Proliant DL360 Gen9服务器开箱
  13. c语言 switch错误用法,C语言switch语句的详细用法
  14. appstore上架所需截屏的制作方法
  15. UEFI EDK2 遇到的问题集合
  16. 【MySQL】字符集utf8mb4无法存储表情踩坑记录
  17. ps教程-双重曝光效果实现
  18. JAVA小白必须掌握的英语单词(1)
  19. zynq矿机控制板_zynq[1] 矿板helloworld
  20. Linux Neo4j 安装APOC插件

热门文章

  1. 比紫书优化,14行代码AC——例题 5-7 丑数(Ugly Numbers,UVa 136)——解题报告
  2. python是什么和c++是什么区别_c++和python的区别有哪些
  3. 某指令引用的内存不能为
  4. JFreeChart设置背景图片 .
  5. 太原学计算机的职高,山西太原职高学校排名
  6. 语言设计谁年龄大_这桌子谁设计的?脑洞够大,除能360°翻转,打台球,乒乓球都行...
  7. 增量索引和全量索引_搜索引擎(七)高可用的solr搜索引擎服务架构
  8. linux禁用用户账号,技术|在 Linux 系统中禁用与解禁用户的账号
  9. aspen怎么做灵敏度分析_数据分析终极难题:数据分析怎么做才能驱动业务?
  10. mysql最大连接数查询_MYSQL 查看最大连接数和修改最大连接数