网站建设知识产权问题品牌营销平台
web/
2025/10/1 6:42:25/
文章来源:
网站建设知识产权问题,品牌营销平台,wordpress index of,wordpress修改伪静态以后跳转go机器学习入门系列#xff08;2#xff09;–如何构建一个完整的机器学习项目#xff0c;第五篇#xff01;
该系列的前四篇文章#xff1a;
机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理#…机器学习入门系列2–如何构建一个完整的机器学习项目第五篇
该系列的前四篇文章
机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理上特征工程之数据预处理下
本篇文章会继续介绍特征工程的内容这次会介绍特征缩放和特征编码前者主要是归一化和正则化用于消除量纲关系的影响后者包括了序号编码、独热编码等主要是处理类别型、文本型以及连续型特征。 3.2 特征缩放
特征缩放主要分为两种方法归一化和正则化。
3.2.1 归一化
归一化(Normalization)也称为标准化这里不仅仅是对特征实际上对于原始数据也可以进行归一化处理它是将特征或者数据都缩放到一个指定的大致相同的数值区间内。归一化的两个原因
某些算法要求样本数据或特征的数值具有零均值和单位方差为了消除样本数据或者特征之间的量纲影响即消除数量级的影响。如下图所示是包含两个属性的目标函数的等高线 数量级的差异将导致量级较大的属性占据主导地位。从下图左看到量级较大的属性会让椭圆的等高线压缩为直线使得目标函数仅依赖于该属性。数量级的差异会导致迭代收敛速度减慢。原始的特征进行梯度下降时每一步梯度的方向会偏离最小值等高线中心点的方向迭代次数较多且学习率必须非常小否则非常容易引起宽幅震荡。但经过标准化后每一步梯度的方向都几乎指向最小值等高线中心点的方向迭代次数较少。所有依赖于样本距离的算法对于数据的数量级都非常敏感。比如 KNN 算法需要计算距离当前样本最近的 k 个样本当属性的量级不同选择的最近的 k 个样本也会不同。 常用的两种归一化方法
线性函数归一化(Min-Max Scaling)。它对原始数据进行线性变换使得结果映射到[0,1]的范围实现对原始数据的等比缩放公式如下
XnormX−XminXmax−XminX_{norm}\frac{X-X_{min}}{X_{max}-X_{min}} XnormXmax−XminX−Xmin
其中 X 是原始数据Xmax,XminX_{max}, X_{min}Xmax,Xmin分别表示数据最大值和最小值。
零均值归一化(Z-Score Normalization)。它会将原始数据映射到均值为 0标准差为 1 的分布上。假设原始特征的均值是μ\muμ、方差是σ\sigmaσ则公式如下
zx−μσz \frac{x-\mu}{\sigma} zσx−μ
如果数据集分为训练集、验证集、测试集那么三个数据集都采用相同的归一化参数数值都是通过训练集计算得到即上述两种方法中分别需要的数据最大值、最小值方差和均值都是通过训练集计算得到这个做法类似于深度学习中批归一化BN的实现做法。归一化不是万能的实际应用中通过梯度下降法求解的模型是需要归一化的这包括线性回归、逻辑回归、支持向量机、神经网络等模型。但决策树模型不需要以 C4.5 算法为例决策树在分裂结点时候主要依据数据集 D 关于特征 x 的信息增益比而信息增益比和特征是否经过归一化是无关的归一化不会改变样本在特征 x 上的信息增益。
3.2.2 正则化
正则化是将样本或者特征的某个范数如 L1、L2 范数缩放到单位 1。
假设数据集为 对样本首先计算 Lp 范数得到 正则化后的结果是每个属性值除以其 Lp 范数 正则化的过程是针对单个样本的对每个样本将它缩放到单位范数。 归一化是针对单个属性的需要用到所有样本在该属性上的值。 通常如果使用二次型如点积或者其他核方法计算两个样本之间的相似性时该方法会很有用。
3.3 特征编码
3.3.1 序号编码(Ordinal Encoding)
定义序号编码一般用于处理类别间具有大小关系的数据。
比如成绩可以分为高、中、低三个档次并且存在“高中低”的大小关系那么序号编码可以对这三个档次进行如下编码高表示为 3中表示为 2低表示为 1这样转换后依然保留了大小关系。
3.3.2 独热编码(One-hot Encoding)
定义独热编码通常用于处理类别间不具有大小关系的特征。
独热编码是采用 N 位状态位来对 N 个可能的取值进行编码。比如血型一共有 4 个取值A、B、AB 以及 O 型那么独热编码会将血型转换为一个 4 维稀疏向量分别表示上述四种血型为
A型(1,0,0,0)B型(0,1,0,0)AB型(0,0,1,0)O型(0,0,0,1)
独热编码的优点有以下几个
能够处理非数值属性。比如血型、性别等一定程度上扩充了特征。编码后的向量是稀疏向量只有一位是 1其他都是 0可以利用向量的稀疏来节省存储空间。能够处理缺失值。当所有位都是 0表示发生了缺失。此时可以采用处理缺失值提到的高维映射方法用第 N1 位来表示缺失值。
当然独热编码也存在一些缺点
1.高维度特征会带来以下几个方面问题
KNN 算法中高维空间下两点之间的距离很难得到有效的衡量逻辑回归模型中参数的数量会随着维度的增高而增加导致模型复杂出现过拟合问题通常只有部分维度是对分类、预测有帮助需要借助特征选择来降低维度。
2.决策树模型不推荐对离散特征进行独热编码有以下两个主要原因 产生样本切分不平衡问题此时切分增益会非常小。 比如对血型做独热编码操作那么对每个特征是否 A 型、是否 B 型、是否 AB 型、是否 O 型会有少量样本是 1 大量样本是 0。 这种划分的增益非常小因为拆分之后 较小的那个拆分样本集它占总样本的比例太小。无论增益多大乘以该比例之后几乎可以忽略。 较大的那个拆分样本集它几乎就是原始的样本集增益几乎为零。 影响决策树的学习。 决策树依赖的是数据的统计信息。而独热码编码会把数据切分到零散的小空间上。在这些零散的小空间上统计信息是不准确的学习效果变差。 本质是因为独热编码之后的特征的表达能力较差。该特征的预测能力被人为的拆分成多份每一份与其他特征竞争最优划分点都失败。最终该特征得到的重要性会比实际值低。
3.3.3 二进制编码(Binary Encoding)
二进制编码主要分为两步
先采用序号编码给每个类别赋予一个类别 ID接着将类别 ID 对应的二进制编码作为结果。
继续以血型为例子如下表所示
血型类别 ID二进制表示独热编码A10 0 11 0 0 0B20 1 00 1 0 0AB30 1 10 0 1 0O41 0 00 0 0 1
从上表可以知道二进制编码本质上是利用二进制对类别 ID 进行哈希映射最终得到 0/1 特征向量并且特征维度小于独热编码更加节省存储空间。
3.3.4 二元化
定义特征二元化就是将数值型的属性转换为布尔型的属性。通常用于假设属性取值分布是伯努利分布的情形。
特征二元化的算法比较简单。对属性 j 指定一个阈值 m。
如果样本在属性 j 上的值大于等于 m, 则二元化后为 1如果样本在属性 j 上的值小于 m则二元化为 0
根据上述定义m 是一个关键的超参数它的取值需要结合模型和具体的任务来选择。
3.3.5 离散化
定义顾名思义离散化就是将连续的数值属性转换为离散的数值属性。
那么什么时候需要采用特征离散化呢
这背后就是需要采用“海量离散特征简单模型”还是“少量连续特征复杂模型”的做法了。
对于线性模型通常使用“海量离散特征简单模型”。 优点模型简单缺点特征工程比较困难但一旦有成功的经验就可以推广并且可以很多人并行研究。 对于非线性模型比如深度学习通常使用“少量连续特征复杂模型”。 优点不需要复杂的特征工程缺点模型复杂
分桶
1.离散化的常用方法是分桶
将所有样本在连续的数值属性 j 的取值从小到大排列 a0,a1,...,aN{a_0, a_1, ..., a_N}a0,a1,...,aN 。然后从小到大依次选择分桶边界b1,b2,...,bMb_1, b_2, ..., b_Mb1,b2,...,bM 。其中 M 为分桶的数量它是一个超参数需要人工指定。每个桶的大小bk1−bkb_{k1}-b_kbk1−bk 也是一个超参数需要人工指定。 给定属性 j 的取值aia_iai对其进行分桶 如果ailt;b1a_i lt; b_1aib1则分桶编号是 0。分桶后的属性的取值为 0如果bk≤ai≤bk1b_k \le a_i \le b_{k1}bk≤ai≤bk1则分桶编号是 k。分桶后的属性取值是 k如果 ai≥bMa_i \ge b_Mai≥bM, 则分桶编号是 M。分桶后的属性取值是 M。
2.分桶的数量和边界通常需要人工指定。一般有两种方法
根据业务领域的经验来指定。如对年收入进行分桶时根据 2017 年全国居民人均可支配收入约为 2.6 万元可以选择桶的数量为5。其中 收入小于 1.3 万元人均的 0.5 倍则为分桶 0 。年收入在 1.3 万元 5.2 万元人均的 0.52 倍则为分桶 1 。年收入在 5.3 万元26 万元人均的 2 倍10 倍则为分桶 2 。年收入在 26 万元260 万元人均的 10 倍100 倍则为分桶 3 。年收入超过 260 万元则为分桶 4 。 根据模型指定。根据具体任务来训练分桶之后的数据集通过超参数搜索来确定最优的分桶数量和分桶边界。
3.选择分桶大小时有一些经验指导 分桶大小必须足够小使得桶内的属性取值变化对样本标记的影响基本在一个不大的范围。 即不能出现这样的情况单个分桶的内部样本标记输出变化很大。 分桶大小必须足够大使每个桶内都有足够的样本。 如果桶内样本太少则随机性太大不具有统计意义上的说服力。 每个桶内的样本尽量分布均匀。
特性
1.在工业界很少直接将连续值作为逻辑回归模型的特征输入而是将连续特征离散化为一系列 0/1 的离散特征。
其优势有 离散化之后得到的稀疏向量内积乘法运算速度更快计算结果方便存储。 离散化之后的特征对于异常数据具有很强的鲁棒性。 如销售额作为特征当销售额在 [30,100) 之间时为1否则为 0。如果未离散化则一个异常值 10000 会给模型造成很大的干扰。由于其数值较大它对权重的学习影响较大。 逻辑回归属于广义线性模型表达能力受限只能描述线性关系。特征离散化之后相当于引入了非线性提升模型的表达能力增强拟合能力。 假设某个连续特征 j 它离散化为 M 个 0/1 特征 j1,j2,...,jMj_1, j_2, ..., j_Mj1,j2,...,jM 。则$w_j * x_j - w_{j1} * x_{j1}^ w_{j2} * x_{j2}^ …w_{jM} * x_{jM}^ $ 。其中 xj1‘xj2‘...,xjM‘x_{j1}^x_{j2}^..., x_{jM}^xj1‘xj2‘...,xjM‘ 是离散化之后的新的特征它们的取值空间都是 {0, 1}。 上式右侧是一个分段线性映射其表达能力更强。 离散化之后可以进行特征交叉。假设有连续特征j 离散化为 N 个 0/1 特征连续特征 k离散化为 M 个 0/1 特征则分别进行离散化之后引入了 NM 个特征。 假设离散化时并不是独立进行离散化而是特征 j,k 联合进行离散化则可以得到 N*M 个组合特征。这会进一步引入非线性提高模型表达能力。 离散化之后模型会更稳定。 如对销售额进行离散化[30,100) 作为一个区间。当销售额在40左右浮动时并不会影响它离散化后的特征的值。 但是处于区间连接处的值要小心处理另外如何划分区间也是需要仔细处理。
2.特征离散化简化了逻辑回归模型同时降低模型过拟合的风险。
能够对抗过拟合的原因经过特征离散化之后模型不再拟合特征的具体值而是拟合特征的某个概念。因此能够对抗数据的扰动更具有鲁棒性。
另外它使得模型要拟合的值大幅度降低也降低了模型的复杂度。 小结
特征缩放是非常常用的方法特别是归一化处理特征数据对于利用梯度下降来训练学习模型参数的算法有助于提高训练收敛的速度而特征编码特别是独热编码也常用于对结构化数据的数据预处理。 参考
《百面机器学习》第一章 特征工程https://blog.csdn.net/dream_angel_z/article/details/49388733#commentBoxhttps://www.cnblogs.com/sherial/archive/2018/03/07/8522405.htmlhttps://gofisher.github.io/2018/06/22/数据预处理/https://gofisher.github.io/2018/06/20/数据探索/https://juejin.im/post/5b6a44f55188251aa8294b8chttps://www.zhihu.com/question/47716840http://www.huaxiaozhuan.com/统计学习/chapters/8_feature_selection.html 欢迎关注我的微信公众号–机器学习与计算机视觉或者扫描下方的二维码大家一起交流学习和进步 往期精彩推荐
机器学习系列
机器学习入门系列1–机器学习概览机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理上特征工程之数据预处理下
数学学习笔记
程序员的数学笔记1–进制转换程序员的数学笔记2–余数程序员的数学笔记3–迭代法
Github项目 资源教程推荐
[Github 项目推荐] 一个更好阅读和查找论文的网站[资源分享] TensorFlow 官方中文版教程来了必读的AI和深度学习博客[教程]一份简单易懂的 TensorFlow 教程[资源]推荐一些Python书籍和教程入门和进阶的都有
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84899.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!