(欢迎各位关注,本专栏会对机器学习的特征工程中一些实用的处理方法进行介绍,该系列篇幅较短,力求阐述其核心并提供相应的实现方法。)

对数变换是一种常用的特征工程方法。一般对于数值大于0的重尾分布数据,我们都可以采取对数变换的方法来转换特征值,从而让特征具有更好的数值属性,进而增强模型的效果。那么如何理解对数变换?什么情况下对数变换会是一种有效的特征工程方法呢?让我们先从几个基本概念开始。


1,对数函数

既然要进行对数变换,那么就需要针对对数函数的性质有深刻的理解。

下图是对数函数在一个较大的定义域范围内所绘制出的函数图像,

对数函数图像

我们可以很明显地看出,当x数值较小时,y值变化较快,而随着x值不断变大,y值变化越发平缓,让我们先记下这个图像性质。


2,重尾分布

我们常说很多事物的自然分布近似于正态分布,但事实上还有一种更为广泛的分布,其表现为少量的个体做出大量的贡献(如下图所示),这就是长尾分布。

长尾分布

# Python 绘制长尾分布# 长尾分布采样a, m = 3., 2.  # shape and modes = (np.random.pareto(a, 1000) + 1) * m#  绘制分布图import matplotlib.pyplot as pltcount, bins, _ = plt.hist(s, 100)plt.show()

对于呈现长尾分布的特征,我们不能简单地去除长尾部分的特征值,这是因为这些长尾的尾部很长,在整个特征分布中占比其实也并不低,事实上具有很大的信息量,对模型来说很有价值。但如果直接就这么放入模型也不是合适的方法。如上图所示,尖尖的左侧加一个长长的尾巴,这意味着有大量的值在<2左右的这个极小的低值段区间内,分布明显有偏向,这会让以高斯分布为假设的模型难以学习到合理的参数,使得该特征为模型带来的效果大打折扣。

至此,问题已经明确,既然这种分布形式并不好,那么我们怎么来缓解它呢?答案就是,使用对数变换。


3,对数变换

我们根据前面发现的log函数所具有的性质,对特征值进行对数变换,使得较小值区间在转换后被扩展到一个变化较大的范围内(x数值较小时,y值变化较快),而长尾的大值区间被压缩到一个变化较小的范围内(随着x值不断变大,y值变化越发平缓),进而整体上减缓长尾分布这种极偏的分布状态,为低值端争取更多的空间,将高值端尽可能的压缩,使得整体分布更加合理。

对数转换后的长尾分布图

# log转换后的分布图import matplotlib.pyplot as pltcount, bins, _ = plt.hist(np.log(s), 100)plt.show()

4,结语

对数变换是一种十分常用的特征工程方法,当我们遇到类似分布的特征数据时,可以通过这种转换来让特征变得更加有效。此外它还具有以下优点:

  1. 缩小数据的绝对数值范围,让特征不再飘。
  2. 依据对数的运算法则,将乘法变换为加法,符合中心极限法则下收敛到正态分布的假设。
  3. 非线性转换为线性,让问题变得更好建模

如果你觉得我的文章有价值,请持续关注我,我会持续更新。

python plt画半对数坐标_特征工程大传:对数变换相关推荐

  1. 独家 | 用Python Featuretools库实现自动化特征工程(附链接)

    作者:Prateek Joshi 翻译:张玲 校对:李润嘉 本文约4000字,建议阅读10分钟. 本文简要介绍特征工程的基本组成部分,并用直观的示例理解它们,最后给出使用Python Featuret ...

  2. python plt 画动态折线图

    python plt 画动态折线图 # coding=utf-8import matplotlib.pyplot as plt import numpy as npdef main():plt_lis ...

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

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

  4. 工程代码_特征工程学习,19 项实践 Tips!代码已开源!

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 随着我们在机器学习.数据建模.数据挖掘分析这条发展路上越走越远,其实越会感觉到特征工程的重要性 ...

  5. 03_机器学习流程_特征工程

    二.特征工程(特征处理) 特征工程是将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测的准确性. 1.环境配置 安装scikit-learn步骤:(前提需要Numpy ...

  6. 机器学习系列(5)_特征工程02特征提取

    文章目录 一.Filter过滤法 1.方差过滤 (1)使用KNN进行考察 (2)使用随机森林(RFC)进行考察 2.相关性过滤 (1)卡方过滤 (2) 用随机森林进行比较特征选择 (3)选取超参数 ( ...

  7. 线性稀疏自编码机_特征工程之特征缩放amp;特征编码

    机器学习入门系列(2)--如何构建一个完整的机器学习项目,第五篇! 本篇文章会继续介绍特征工程的内容,这次会介绍特征缩放和特征编码,前者主要是归一化和正则化,用于消除量纲关系的影响,后者包括了序号编码 ...

  8. word2vec模型评估_特征工程(下)—特征评估

    点击上方"大数据与人工智能","星标或置顶公众号" 第一时间获取好内容 作者丨stephenDC 编辑丨Zandy 这是作者的第15篇文章 本文是特征工程系列的 ...

  9. 多取值离散型特征工程_特征工程(完)

    机器学习入门系列(2)--如何构建一个完整的机器学习项目,第六篇! 这也是特征工程系列最后一篇文章,介绍特征提取.特征选择.特征构建三个工作,通常特征工程被认为分为这三方面的内容,只是我将前面的数据& ...

最新文章

  1. 深度学习遇上稀缺数据就无计可施?这里有几个好办法
  2. oracle的簇与簇表
  3. java 访问手机存储卡,Android App将数据写入内部存储和外部存储的示例
  4. 洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)
  5. ADO学习(九)如何阅读ADO文档
  6. OpenCV rectangle
  7. 基于plotly数据可视化_如何使用Plotly进行数据可视化
  8. 【Git】Python项目依赖库过大无法提交的问题
  9. 企业级管理软件快速开发平台-完整的权限管理设计
  10. SpringCloud高频重点面试题,看这一篇就够了。
  11. 华为鸿蒙系统游戏体验,华为鸿蒙系统首发体验,游戏加载比安卓快60%,全面苹果挑战iOS...
  12. 对象流java_Java中的对象流总结(必看篇)
  13. Python内置函数(37)——sorted
  14. python程序化设计正则表达式语法_基于python的正则表达式学习笔记
  15. 循环冗余校验CRC及对应例题
  16. java基础热门侠客养成_侠客养成手册攻略大全 新手攻略开局任务流程汇总[多图]...
  17. android 检查xposed,[原创]利用Xposed躲过Xposed检测
  18. 【Linux】创建新用户 sudo配置,添加信任
  19. 制作卡通(动漫风)效果
  20. 2017 7 12 测试

热门文章

  1. linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
  2. python怎么画出圆润的曲线_利用python画出AUC曲线的实例
  3. Android开发之ApiCloud模块开发的注意事项
  4. mysql中使用like模糊查询时如何转义%
  5. The executable was signed with invalid entitlements
  6. php防止恶意充值,php防止恶意刷新与刷票的方法
  7. navicat10.1.7英文版_【纯干货】风险评估和管理(PDA TR 49内容节选11 中英文版)...
  8. java測試動態方法_java反射学习
  9. Nhibernate+SQLite 入门实例指南二 类的继承、多态关系
  10. qemu-kvm部署虚拟机