0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器学习的特征预处理问题讨论

汽车玩家 来源:今日头条 作者:不一样的程序猿 2020-03-15 17:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文我们来讨论特征预处理的相关问题。主要包括特征的归一化和标准化,异常特征样本清洗与样本数据不平衡问题的处理。

1. 特征的标准化和归一化

由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作。

z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1了。在sklearn中,我们可以用StandardScaler来做z-score标准化。当然,如果我们是用pandas做数据预处理,可以自己在数据框里面减去均值,再除以方差,自己做z-score标准化。

max-min标准化:也称为离差标准化,预处理后使特征值映射到[0,1]之间。具体的方法是求出样本特征x的最大值max和最小值min,然后用(x-min)/(max-min)来代替原特征。如果我们希望将数据映射到任意一个区间[a,b],而不是[0,1],那么也很简单。用(x-min)(b-a)/(max-min)+a来代替原特征即可。在sklearn中,我们可以用MinMaxScaler来做max-min标准化。这种方法的问题就是如果测试集或者预测数据里的特征有小于min,或者大于max的数据,会导致max和min发生变化,需要重新计算。所以实际算法中, 除非你对特征的取值区间有需求,否则max-min标准化没有 z-score标准化好用。

L1/L2范数标准化:如果我们只是为了统一量纲,那么通过L2范数整体标准化也是可以的,具体方法是求出每个样本特征向量

x→的L2范数||x→||2,然后用x→/||x→||2代替原样本特征即可。当然L1范数标准化也是可以的,即用x/||x||1

代替原样本特征。通常情况下,范数标准化首选L2范数标准化。在sklearn中,我们可以用Normalizer来做L1/L2范数标准化。

此外,经常我们还会用到中心化,主要是在PCA降维的时候,此时我们求出特征x的平均值mean后,用x-mean代替原特征,也就是特征的均值变成了0, 但是方差并不改变。这个很好理解,因为PCA就是依赖方差来降维的。

虽然大部分机器学习模型都需要做标准化和归一化,也有不少模型可以不做做标准化和归一化,主要是基于概率分布的模型,比如决策树大家族的CART,随机森林等。当然此时使用标准化也是可以的,大多数情况下对模型的泛化能力也有改进。

2. 异常特征样本清洗

我们在实际项目中拿到的数据往往有不少异常数据,有时候不筛选出这些异常数据很可能让我们后面的数据分析模型有很大的偏差。那么如果我们没有专业知识,如何筛选出这些异常特征样本呢?常用的方法有两种。

第一种是聚类,比如我们可以用KMeans聚类将训练样本分成若干个簇,如果某一个簇里的样本数很少,而且簇质心和其他所有的簇都很远,那么这个簇里面的样本极有可能是异常特征样本了。我们可以将其从训练集过滤掉。

第二种是异常点检测方法,主要是使用iForest或者one class SVM,使用异常点检测的机器学习算法来过滤所有的异常点。

当然,某些筛选出来的异常样本是否真的是不需要的异常特征样本,最好找懂业务的再确认一下,防止我们将正常的样本过滤掉了。

3. 处理不平衡数据

这个问题其实不算特征预处理的部分,不过其实它的实质还是训练集中各个类别的样本的特征分布不一致的问题,所以这里我们一起讲。

我们做分类算法训练时,如果训练集里的各个类别的样本数量不是大约相同的比例,就需要处理样本不平衡问题。也许你会说,不处理会怎么样呢?如果不处理,那么拟合出来的模型对于训练集中少样本的类别泛化能力会很差。举个例子,我们是一个二分类问题,如果训练集里A类别样本占90%,B类别样本占10%。 而测试集里A类别样本占50%, B类别样本占50%, 如果不考虑类别不平衡问题,训练出来的模型对于类别B的预测准确率会很低,甚至低于50%。

如何解决这个问题呢?一般是两种方法:权重法或者采样法。

权重法是比较简单的方法,我们可以对训练集里的每个类别加一个权重class weight。如果该类别的样本数多,那么它的权重就低,反之则权重就高。如果更细致点,我们还可以对每个样本加权重sample weight,思路和类别权重也是一样,即样本数多的类别样本权重低,反之样本权重高。sklearn中,绝大多数分类算法都有class weight和 sample weight可以使用。

如果权重法做了以后发现预测效果还不好,可以考虑采样法。

采样法常用的也有两种思路,一种是对类别样本数多的样本做子采样, 比如训练集里A类别样本占90%,B类别样本占10%。那么我们可以对A类的样本子采样,直到子采样得到的A类样本数和B类别现有样本一致为止,这样我们就只用子采样得到的A类样本数和B类现有样本一起做训练集拟合模型。第二种思路是对类别样本数少的样本做过采样, 还是上面的例子,我们对B类别的样本做过采样,直到过采样得到的B类别样本数加上B类别原来样本一起和A类样本数一致,最后再去拟合模型。

上述两种常用的采样法很简单,但是都有个问题,就是采样后改变了训练集的分布,可能导致泛化能力差。所以有的算法就通过其他方法来避免这个问题,比如SMOTE算法通过人工合成的方法来生成少类别的样本。方法也很简单,对于某一个缺少样本的类别,它会随机找出几个该类别的样本,再找出最靠近这些样本的若干个该类别样本,组成一个候选合成集合,然后在这个集合中不停的选择距离较近的两个样本(x1,y),(x2,y),在这两个样本之间,比如中点,构造一个新的该类别样本。举个例子,比如该类别的候选合成集合有两个样本(x1,y),(x2,y),那么SMOTE采样后,可以得到一个新的训练样本((x1+x2)/2,y),(x1+x22,y),通过这种方法,我们可以得到不改变训练集分布的新样本,让训练集中各个类别的样本数趋于平衡。我们可以用imbalance-learn这个Python库中的SMOTEENN类来做SMOTE采样。

4. 结语

特征工程系列终于写完了,这个系列的知识比较零散,更偏向工程方法,所以不像算法那么紧凑,写的也不是很好,希望大家批评指正。如果有其他好的特征工程方法需要补充的,欢迎留言评论。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    67

    文章

    8570

    浏览量

    137420
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    机器学习特征工程:缩放、编码、聚合、嵌入与自动化

    本文转自:DeepHubIMBA好模型的秘诀不在于更花哨的算法,而在于更好的特征。第1部分:数值特征1.1缩放多数机器学习算法对尺度敏感。一个取值范围在0到1,000,000的列,会在
    的头像 发表于 04-08 14:41 811次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>特征</b>工程:缩放、编码、聚合、嵌入与自动化

    青翼基于KU115FPGA 高性能数据预处理载板-PCIe信号处理板-FPGA载板

    PCIE702A-2 是一款基于 PCIE 总线架构的 KU115 FPGA 高性能 数据预处理平台,该平台具有 1 个 FMC+(HPC)接口,1 路 PCIe x8 主机接口,该平台采用
    的头像 发表于 03-17 19:00 1188次阅读
    青翼基于KU115FPGA 高性能数据<b class='flag-5'>预处理</b>载板-PCIe信号<b class='flag-5'>处理</b>板-FPGA载板

    算法工程师需要具备哪些技能?

    :自动化任务(如数据预处理、模型训练调度)。Git版本控制:团队协作开发(如分支管理、代码合并)。 机器学习监督学习:线性回归、逻辑回归、决策树、SVM等。无监督
    发表于 02-27 10:53

    机器学习特征工程:分类变量的数值化处理方法

    编码是机器学习流程里最容易被低估的环节之一,模型没办法直接处理文本形式的分类数据,尺寸(Small/Medium/Large)、颜色(Red/Blue/Green)、城市、支付方式等都是典型的分类
    的头像 发表于 02-10 15:58 525次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b><b class='flag-5'>特征</b>工程:分类变量的数值化<b class='flag-5'>处理</b>方法

    电能质量在线监测装置如何捕捉充电桩充电过程中的电流畸变特征

    电能质量在线监测装置通过 **“硬件精准采集 - 信号预处理 - 定制化算法解析 - 工况自适应识别 - 全周期数据追溯”** 的完整闭环,捕捉充电桩充电过程中非线性电力电子负载特有的电流畸变特征
    的头像 发表于 12-10 10:26 731次阅读
    电能质量在线监测装置如何捕捉充电桩充电过程中的电流畸变<b class='flag-5'>特征</b>?

    数据预处理软核加速模块设计

    数据拼接操作,其预处理模块结构框图如下图 模块最后得到的信号为ddr_q、ddr_clk和ddr_wrreq。ddr_q是并行128bits图像数据,ddr_clk是RAM的出口时钟,同时引出作为下一模块的数据时钟,ddr_wrreq置高时代表有效数据。
    发表于 10-29 08:09

    飞凌嵌入式ElfBoard-Vim编辑器之GCC的基本使用

    /example/hello$ gcc hello.c1.GCC编译过程GCC编译器的编译过程要经过预处理,编译,汇编,链接等4步才能够生成可执行文件。预处理:主要实现将头文件展开,宏定义替换以及解析
    发表于 10-16 09:05

    机器视觉检测PIN针

    : 结合形态学处理特征提取(如长宽比、面积)及深度学习(针对复杂缺陷),自动检出弯曲、断裂、变形、污染等。输出与控制:实时显示检测结果(OK/NG)及具体参数数值。生成检测报告,支持数据追溯。NG品自动剔除信号输出,无缝对接产
    发表于 09-26 15:09

    量子机器学习入门:三种数据编码方法对比与应用

    在传统机器学习中数据编码确实相对直观:独热编码处理类别变量,标准化调整数值范围,然后直接输入模型训练。整个过程更像是数据清洗,而非核心算法组件。量子机器
    的头像 发表于 09-15 10:27 1065次阅读
    量子<b class='flag-5'>机器</b><b class='flag-5'>学习</b>入门:三种数据编码方法对比与应用

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,并通过矩形框(边界框)对其进行标识。 在讨论人工智能(AI)或深度学习时,经常会出现“神经网络”、“黑箱”、“标注”等术语。这些概念对非专业
    的头像 发表于 09-10 17:38 1128次阅读
    如何在<b class='flag-5'>机器</b>视觉中部署深度<b class='flag-5'>学习</b>神经网络

    友思特方案 | FPGA 加持,友思特图像采集卡高速预处理助力视觉系统运行提速增效

    图像预处理是图像处理关键中间环节,通过优化传感器到主机的数据传输处理为后续减负。其算法依托硬件执行,搭载 FPGA 的友思特图像采集卡以高速运算和并行特性缩短处理时间、降低延迟并提升吞
    的头像 发表于 08-20 09:18 1739次阅读
    友思特方案 | FPGA 加持,友思特图像采集卡高速<b class='flag-5'>预处理</b>助力视觉系统运行提速增效

    FPGA 加持,友思特图像采集卡高速预处理助力视觉系统运行提速增效

    图像预处理是图像处理关键环节,可优化数据传输、减轻主机负担,其算法可在FPGA等硬件上执行。友思特FPGA图像采集卡凭借FPGA特性,能缩短处理时间、降低延迟,适用于高速接口及实时、大数据量场景,可完成多种
    的头像 发表于 08-13 17:41 1464次阅读
    FPGA 加持,友思特图像采集卡高速<b class='flag-5'>预处理</b>助力视觉系统运行提速增效

    锂电池制造 | 电芯预处理工艺的步骤详解

    电芯预处理是锂电池包制造的首要工序,无论是新能源汽车的续航稳定性,还是储能系统的循环寿命,其根基都可追溯至预处理工序对电芯一致性的把控,其核心在于通过系统检测与筛选消除量产电芯的性能差异,为后续组装
    的头像 发表于 08-11 14:53 2217次阅读
    锂电池制造 | 电芯<b class='flag-5'>预处理</b>工艺的步骤详解

    FPGA在机器学习中的具体应用

    随着机器学习和人工智能技术的迅猛发展,传统的中央处理单元(CPU)和图形处理单元(GPU)已经无法满足高效处理大规模数据和复杂模型的需求。F
    的头像 发表于 07-16 15:34 3179次阅读

    任正非说 AI已经确定是第四次工业革命 那么如何从容地加入进来呢?

    ,TensorFlow、PyTorch用于构建和训练神经网络。以Python为例,通过编写简单的程序来处理数据,如读取数据集、进行数据清洗和预处理,这是进入AI领域的基本技能。 学习机器学习
    发表于 07-08 17:44