文章目录

  • 数据分桶(分箱)
    • 卡方分桶
    • 等距分桶
    • 等频分桶
    • 聚类分桶
  • 无量纲化
    • 数据规范化
    • 数据正则化
  • 数据清洗
    • 数据缺失
    • 噪音数据
    • 数据不一致
  • 特征选择与特征提取
    • 特征选择
    • 特征提取

数据分桶(分箱)

概念
数据分桶是一种数据预处理技术,通过对连续变量离散化,提高模型性能。

意义

  1. 离散后的特征对异常值更有鲁棒性,尤其避免极端异常值的干扰;
  2. 特征离散后模型更稳定,不会因为特征值的轻微变化而改变结果;
  3. 稀疏向量内积乘法运算速度快,算法速度更快,也便于存储

分桶方法

  1. 有监督:best-ks分桶和卡方分桶
  2. 无监督:等距分桶、等频分桶、聚类分桶

卡方分桶

基本思想
自底向上基于合并的离散化方法,初始每个值作为一个分箱,计算相邻区间的卡方值,合并卡方值最小的区间,直到终止条件。

原理:卡方检验

卡方检验在分箱中的应用
核心思想:卡方值越小分布越相似。
以“年龄”为待分箱变量,“是否违约”为预测变量为例。

  1. 为了合并年龄,先对年龄进行排序,再计算每种可能分箱组合的卡方值。
    以20+25组合为例,假设年龄是20还是25对是否违约没有显著影响,因此违约的p是15/33,不违约的p是18/33,由E=np可得期望,再利用公式计算20+25组合的卡方值。
    推广:E=RT∗CTnE=\frac{RT*CT}{n}E=nRTCT
  2. 合并卡方值最小的组合,并继续计算,直到终止条件。
  3. 终止条件:
    分箱数目的限制(一般可以设为5);
    卡方停止的阈值:可以选择置信度为0.9、0.95、0.99,自由度df=(R-1)(C-1),比如此处是2。

等距分桶

全局均匀统计分桶(split_value_stat)
将取值映射到相等大小的区间。保证特征落在每个bucket的概率是相同的。如:

import numpy as np
# 生成 20 个 0-99 之间的随机整数
small_counts = np.random.randint(0, 100, 20)
# 进行分箱操作, 通过对数据除以 10 分到 0-9 总共 9 个箱里,
# 返回的结果就是对应数据应该划分到的箱的编号
np.floor_divide(small_counts, 10)
# 返回: array([7,1,6,6,0,6,0,6,7,1,4,6,3,2,2,7,3,7,1])

缺点:可能导致某些区间取值个数非常多,某些非常少。

正例均匀统计分桶(split_value_stat_pos)
与全局不同的是,挑选正例数据进行均匀分桶。

正例log统计分桶(split_value_stat_pos_log)
与正例均匀不同的是,给定的概率分布为log分布。适用于数字跨越多个数量级的情况,取计数的log值,如:

# 构造一个间隔更大的数组例子,可以通过取对数 log10 来进行分箱
large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971, 926, 122, 22222]
np.floor(np.log10(large_counts))
# 返回:array([2.,3.,4.,1.,0.,2.,2.,3.,3.,4.,4.,1.,1.,3.,2.,2.,4.])

等频分桶

也称按分位数分桶,将取值映射到区间,使每个区间内包含的取值个数大致相同。可以使用Pandas库获取分位数,如:

large_counts = [296, 8286, 64011, 80, 3, 725, 867, 2215, 7689, 11495, 91897, 44, 28, 7971, 926, 122, 22222]
# 将数据映射到所需数量的分位数
pd.qcut(large_counts, 4, labels=False)
# 计算指定分位数点的数据
large_counts_series = pd.Series(large_counts)
large_counts_series.quantile([0.25, 0.5, 0.75]
''' 返回:
0.25    122.0
0.50    926.0
0.75    8286.0
dtype:float64
'''

聚类分桶

根据xgb的get_split_value_histogram函数获得histogram,取特征的分裂节点值作为split_value。
注:

  1. 不一定每个特征都会有合适的分裂节点值;
  2. 一个特征在同一棵树内可能多次被使用,分裂多次;
  3. 最后取同一特征在所有树上的分裂值做分桶。

无量纲化

数据规范化

min-max normalization

z-score

数据正则化

简单来说,标准化是依照特征矩阵的列处理数据,将样本的特征值转换到同一量纲下。
正则化是依照特征矩阵的行处理数据,其目的在于方便样本向量的点乘运算或其他核函数计算,也就是说都转化为“单位向量”。
正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如点积或者其它核方法计算两个样本之间的相似性(如余弦相似度),这个方法会很有用。
p范数:∣∣X∣∣p=(∣x1∣p+∣x2∣p+...+∣xn∣p)1/pp范数:||X||^p=(|x1|^p+|x2|^p+...+|xn|^p)^{1/p}pXp=(x1p+x2p+...+xnp)1/p
余弦相似度:sim(x1,x2)=x1⋅x2∣∣x1∣∣⋅∣∣x2∣∣余弦相似度:sim(x_1,x_2)=\frac{x_1·x_2}{||x_1||·||x_2||}sim(x1,x2)=x1x2x1x2

数据清洗

数据缺失

噪音数据

  • 识别噪音将其去除,如孤立点识别;
  • 利用其它非噪音数据将其平滑,如数据分箱。

数据不一致

特征选择与特征提取

特征选择

特征选择主要有两个目的

  • 减少特征数量、降维,使模型泛化能力更强,减少过拟合;
  • 增强对特征和特征值之间的理解。

特征选择可以分为filter、wrapper、embedded三大类方法

  • Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
  • Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
  • Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

相关系数法
计算自变量与因变量的相关系数,当相关系数小于阈值时舍弃该变量。

卡方检验法
该方法使用与自变量与因变量均为分类变量的情况,用于检验自变量和因变量有无显著相关性。卡方检验具体方法见上文的“分箱方法-卡方检验”。

Relief算法
Relief算法是一种特征权重算法(Feature weighting algorithms),根据各个特征和类别的相关性赋予特征不同的权重,权重小于某个阈值的特征将被移除。
Relief算法中特征和类别的相关性是基于特征对近距离样本的区分能力
主要步骤如下:

  1. 初始化所有特征权重wi=0w_i=0wi=0,数值属性归一化;
  2. 从训练集D中随机选择一个样本R,然后从和R同类的样本中寻找最近邻样本H,称为Near Hit,从和R不同类的样本中寻找最近邻样本M,称为NearMiss;
  3. 更新每个特征的权重:如果R和Near Hit在某个特征A上的距离小于R和Near Miss上的距离,则说明该特征对区分同类和不同类的最近邻是有益的,则增加该特征的权重;反之,则降低该特征的权重;
    wi=wi−d(R.A,H.A)+d(R.A,M.A)w_i = w_i-d(R.A,H.A)+d(R.A,M.A)wi=wid(R.A,H.A)+d(R.A,M.A)
  4. 以上过程重复m次,最后得到各特征的权重,输出大于阈值的特征。

例:

Relief算法的运行时间随着样本的抽样次数m和原始特征个数N的增加线性增加,因而运行效率非常高。

特征提取

PCA算法
通过对原有变量进行线性变换,提取反映事物本质的新变量,同时去除冗余、降低噪音,达到降维目的。

  1. 给定数据集,包含n个对象,m个属性;
  2. 中心化数据集:每个属性值减去属性均值,使中心化后的数据均值为0,用xn×mx_{n×m}xn×m表示;
  3. 计算协方差矩阵C,元素cijc_{ij}cij是属性AiA_iAiAjA_jAj之间的协方差:cij=∑k=1n(xki−Ai)‾(xkj−Aj‾)c_{ij}=\sum_{k=1}^n(x_{ki}-\overline{A_i)}(x_{kj}-\overline{A_j})cij=k=1n(xkiAi)(xkjAj)
  4. 计算协方差矩阵的特征根和特征方程,特征根降序排列为λ1≥λ2≥...≥λm≥0\lambda_1≥\lambda_2≥...≥\lambda_m≥0λ1λ2...λm0,则λ1\lambda_1λ1对应的特征向量为第一主成分,λ2\lambda_2λ2对应的特征向量为第二主成分,第i个主成分的贡献率为:λi∑k=1mλk\frac{\lambda_i}{\sum_{k=1}^m\lambda_k}k=1mλkλi
  5. 保留前q个最大特征根及对应的特征向量,构造主成分矩阵P,其第i列向量pip_ipi是第i个主成分(即特征向量);
  6. 计算降维后的矩阵Yn×q=Xn×mPm×q,q<nY_{n×q}=X_{n×m}P_{m×q}, q<nYn×q=Xn×mPm×q,q<n
    新的特征是原有特征的线性组合。

大厂面试机器学习算法(0):特征工程 | 数据预处理相关推荐

  1. ML之FE之FS:特征工程/数据预处理—特征选择之利用过滤式filter、包装式wrapper、嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)最全案例应用

    ML之FE之FS:特征工程/数据预处理-特征选择之利用过滤式filter.包装式wrapper.嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)案例应用 利 ...

  2. ML之FE:特征工程/数据预处理中的数据异常值的概述、检测方法、处理方法技巧总结之详细攻略

    ML之FE:特征工程/数据预处理中的数据异常值的概述.检测方法.处理方法技巧总结之详细攻略 目录 异常值 异常值的概述(简介/原因/影响) 异常值的检测方法

  3. 机器学习实战之特征工程

    机器学习实战与特征工程 1.机器学习概述 1.1 什么是机器学习 1.2 为什么要机器学习 1.3 机器学习应用场景 1.4 学习框架和资料的介绍 2.特征工程 2.1 特征工程介绍 2.1.1 数据 ...

  4. 机器学习中的特征工程

    机器学习中的特征工程 什么是特征工程 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器 ...

  5. K-近邻算法之特征工程-特征预处理

    K-近邻算法之特征工程-特征预处理 1 什么是特征预处理 1.1 特征预处理定义 scikit-learn的解释 provides several common utility functions a ...

  6. R语言基于机器学习算法进行特征筛选(Feature Selection)

    R语言基于机器学习算法进行特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...

  7. 机器学习中的特征工程——分类变量的处理

    出品 | CDA数据分析研究院,转载需授权 文章目录 分类变量 概念 判断 类型 少类别分类变量处理方法 独热编码(One-hot encoding) 虚拟编码(Dummy coding) 效应编码( ...

  8. 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)

    数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. 比如线性回归模型.逻辑回归模型或包含矩阵的模型,它们会 ...

  9. 机器学习笔记六——特征工程之数据预处理

    特征工程之数据预处理 1. 处理缺失值 2. 处理异常值 2.1 异常值检测 2.2异常值处理 3.离散特征的连续化处理 4.连续特征的离散化处理 5. 处理类别不平衡问题 6. 图片数据扩充 数据预 ...

最新文章

  1. 《linux程序设计》--读书笔记--第十四章信号量、共享内存和消息队列
  2. 30个非常时尚的网页联系表单设计优秀示例
  3. 样式超出设定宽度显示显示省略号
  4. android 两个imageview重叠,在android中覆盖两个图像以设置imageview
  5. python入门要什么基础-python需要什么基础
  6. Linux的I/O多路复用机制之--selectpoll
  7. 深入cocos2d-x中的touch事件
  8. php 移植 arm 精简,php5.4.5移植到arm-linux摘要,lighttpd配置
  9. java学习(129):hashmap的方法
  10. MATLAB摄像头可以运行但是打不开视频
  11. JavaSE——IO(下)(Properties类、序列化与反序列化)
  12. axure原型怎么让文字自动换行_理解「回车」和「换行」,纠正数据输入过程中的坏习惯...
  13. html鼠标滚动图片折叠,鼠标滑过图片3D折叠效果
  14. 基本概念----Beginning Visual C#
  15. 【译】x86程序员手册13-第5章 内存管理
  16. Comparable 与 Comparator 比较
  17. RTMP网页视频抓取
  18. HFSS周期结构超表面结构单元仿真
  19. 六、python实现日语单词索引:查询单词对应的课
  20. windows10家庭中文版设置共享文件密码访问

热门文章

  1. shell小工具-检查日志目录下log文件中err信息
  2. 使用ffmpeg拼接视频踩坑记录
  3. App卡顿的原因及解决方案
  4. 软件评测师——准备阶段
  5. OpenTCS拓展之Python语言交互与拓展
  6. Rust之常用集合(三):哈希映射(Hash Map)
  7. 软件工程工作量评估中的ILF,EIF,EI,EO,EQ术语解释
  8. Python实现聚类K-means算法
  9. 学习python的第三节课:基础数据
  10. 图解k8s中pod的创建流程