大厂面试机器学习算法(0):特征工程 | 数据预处理
文章目录
- 数据分桶(分箱)
- 卡方分桶
- 等距分桶
- 等频分桶
- 聚类分桶
- 无量纲化
- 数据规范化
- 数据正则化
- 数据清洗
- 数据缺失
- 噪音数据
- 数据不一致
- 特征选择与特征提取
- 特征选择
- 特征提取
数据分桶(分箱)
概念
数据分桶是一种数据预处理技术,通过对连续变量离散化,提高模型性能。
意义
- 离散后的特征对异常值更有鲁棒性,尤其避免极端异常值的干扰;
- 特征离散后模型更稳定,不会因为特征值的轻微变化而改变结果;
- 稀疏向量内积乘法运算速度快,算法速度更快,也便于存储。
分桶方法
- 有监督:best-ks分桶和卡方分桶
- 无监督:等距分桶、等频分桶、聚类分桶
卡方分桶
基本思想
自底向上基于合并的离散化方法,初始每个值作为一个分箱,计算相邻区间的卡方值,合并卡方值最小的区间,直到终止条件。
原理:卡方检验
卡方检验在分箱中的应用
核心思想:卡方值越小分布越相似。
以“年龄”为待分箱变量,“是否违约”为预测变量为例。
- 为了合并年龄,先对年龄进行排序,再计算每种可能分箱组合的卡方值。
以20+25组合为例,假设年龄是20还是25对是否违约没有显著影响,因此违约的p是15/33,不违约的p是18/33,由E=np可得期望,再利用公式计算20+25组合的卡方值。
推广:E=RT∗CTnE=\frac{RT*CT}{n}E=nRT∗CT
- 合并卡方值最小的组合,并继续计算,直到终止条件。
- 终止条件:
分箱数目的限制(一般可以设为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。
注:
- 不一定每个特征都会有合适的分裂节点值;
- 一个特征在同一棵树内可能多次被使用,分裂多次;
- 最后取同一特征在所有树上的分裂值做分桶。
无量纲化
数据规范化
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}p范数:∣∣X∣∣p=(∣x1∣p+∣x2∣p+...+∣xn∣p)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)=∣∣x1∣∣⋅∣∣x2∣∣x1⋅x2
数据清洗
数据缺失
噪音数据
- 识别噪音将其去除,如孤立点识别;
- 利用其它非噪音数据将其平滑,如数据分箱。
数据不一致
特征选择与特征提取
特征选择
特征选择主要有两个目的:
- 减少特征数量、降维,使模型泛化能力更强,减少过拟合;
- 增强对特征和特征值之间的理解。
特征选择可以分为filter、wrapper、embedded三大类方法:
- Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
- Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
- Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
相关系数法
计算自变量与因变量的相关系数,当相关系数小于阈值时舍弃该变量。
卡方检验法
该方法使用与自变量与因变量均为分类变量的情况,用于检验自变量和因变量有无显著相关性。卡方检验具体方法见上文的“分箱方法-卡方检验”。
Relief算法
Relief算法是一种特征权重算法(Feature weighting algorithms),根据各个特征和类别的相关性赋予特征不同的权重,权重小于某个阈值的特征将被移除。
Relief算法中特征和类别的相关性是基于特征对近距离样本的区分能力。
主要步骤如下:
- 初始化所有特征权重wi=0w_i=0wi=0,数值属性归一化;
- 从训练集D中随机选择一个样本R,然后从和R同类的样本中寻找最近邻样本H,称为Near Hit,从和R不同类的样本中寻找最近邻样本M,称为NearMiss;
- 更新每个特征的权重:如果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=wi−d(R.A,H.A)+d(R.A,M.A)
- 以上过程重复m次,最后得到各特征的权重,输出大于阈值的特征。
例:
Relief算法的运行时间随着样本的抽样次数m和原始特征个数N的增加线性增加,因而运行效率非常高。
特征提取
PCA算法
通过对原有变量进行线性变换,提取反映事物本质的新变量,同时去除冗余、降低噪音,达到降维目的。
- 给定数据集,包含n个对象,m个属性;
- 中心化数据集:每个属性值减去属性均值,使中心化后的数据均值为0,用xn×mx_{n×m}xn×m表示;
- 计算协方差矩阵C,元素cijc_{ij}cij是属性AiA_iAi和AjA_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(xki−Ai)(xkj−Aj);
- 计算协方差矩阵的特征根和特征方程,特征根降序排列为λ1≥λ2≥...≥λm≥0\lambda_1≥\lambda_2≥...≥\lambda_m≥0λ1≥λ2≥...≥λm≥0,则λ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;
- 保留前q个最大特征根及对应的特征向量,构造主成分矩阵P,其第i列向量pip_ipi是第i个主成分(即特征向量);
- 计算降维后的矩阵Yn×q=Xn×mPm×q,q<nY_{n×q}=X_{n×m}P_{m×q}, q<nYn×q=Xn×mPm×q,q<n。
新的特征是原有特征的线性组合。
大厂面试机器学习算法(0):特征工程 | 数据预处理相关推荐
- ML之FE之FS:特征工程/数据预处理—特征选择之利用过滤式filter、包装式wrapper、嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)最全案例应用
ML之FE之FS:特征工程/数据预处理-特征选择之利用过滤式filter.包装式wrapper.嵌入式Embedded方法(RF/SF)进行特征选择(mushroom蘑菇数据集二分类预测)案例应用 利 ...
- ML之FE:特征工程/数据预处理中的数据异常值的概述、检测方法、处理方法技巧总结之详细攻略
ML之FE:特征工程/数据预处理中的数据异常值的概述.检测方法.处理方法技巧总结之详细攻略 目录 异常值 异常值的概述(简介/原因/影响) 异常值的检测方法
- 机器学习实战之特征工程
机器学习实战与特征工程 1.机器学习概述 1.1 什么是机器学习 1.2 为什么要机器学习 1.3 机器学习应用场景 1.4 学习框架和资料的介绍 2.特征工程 2.1 特征工程介绍 2.1.1 数据 ...
- 机器学习中的特征工程
机器学习中的特征工程 什么是特征工程 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,使得机器 ...
- K-近邻算法之特征工程-特征预处理
K-近邻算法之特征工程-特征预处理 1 什么是特征预处理 1.1 特征预处理定义 scikit-learn的解释 provides several common utility functions a ...
- R语言基于机器学习算法进行特征筛选(Feature Selection)
R语言基于机器学习算法进行特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...
- 机器学习中的特征工程——分类变量的处理
出品 | CDA数据分析研究院,转载需授权 文章目录 分类变量 概念 判断 类型 少类别分类变量处理方法 独热编码(One-hot encoding) 虚拟编码(Dummy coding) 效应编码( ...
- 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)
数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. 比如线性回归模型.逻辑回归模型或包含矩阵的模型,它们会 ...
- 机器学习笔记六——特征工程之数据预处理
特征工程之数据预处理 1. 处理缺失值 2. 处理异常值 2.1 异常值检测 2.2异常值处理 3.离散特征的连续化处理 4.连续特征的离散化处理 5. 处理类别不平衡问题 6. 图片数据扩充 数据预 ...
最新文章
- 《linux程序设计》--读书笔记--第十四章信号量、共享内存和消息队列
- 30个非常时尚的网页联系表单设计优秀示例
- 样式超出设定宽度显示显示省略号
- android 两个imageview重叠,在android中覆盖两个图像以设置imageview
- python入门要什么基础-python需要什么基础
- Linux的I/O多路复用机制之--selectpoll
- 深入cocos2d-x中的touch事件
- php 移植 arm 精简,php5.4.5移植到arm-linux摘要,lighttpd配置
- java学习(129):hashmap的方法
- MATLAB摄像头可以运行但是打不开视频
- JavaSE——IO(下)(Properties类、序列化与反序列化)
- axure原型怎么让文字自动换行_理解「回车」和「换行」,纠正数据输入过程中的坏习惯...
- html鼠标滚动图片折叠,鼠标滑过图片3D折叠效果
- 基本概念----Beginning Visual C#
- 【译】x86程序员手册13-第5章 内存管理
- Comparable 与 Comparator 比较
- RTMP网页视频抓取
- HFSS周期结构超表面结构单元仿真
- 六、python实现日语单词索引:查询单词对应的课
- windows10家庭中文版设置共享文件密码访问