zoukankan      html  css  js  c++  java
  • 联邦学习基础概念(二)

    数据预处理

    1.数据采样:采样就是按照某种规则从数据集中挑选样本数据,大致分为3类:随机采样、系统采样和分层采样。

    随机采样:就是从数据集中随机的抽取特定数量的数据,分为有放回和无放回两种。

    系统采样:一般是无放回抽样,又称等距采样,先将总体数据集按顺序分成n小份,再从每小份抽取第k个数据。

    分层采样:就是先将数据分成若干个类别,再从每一层内随机抽取一定数量的样本,然后将这些样本组合起来。

    2.归一化:归一化是指一种简化计算的方式,将数据经过处理之后限定到一定范围之内,如数据较大,可通过归一化计算后,将数据限定在[0,1]内。数据归一化可加速算法的快速收敛,而且在后续数据处理上更加方便

    3.One-Hot编码:主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

    对于离散特征,例如,性别:{男,女},可以采用one-hot编码的方式将特征表示为一个m维向量,其中m为特征的取值个数。在one-hot向量中只有一个维度的值为1,其余为0。以“性别”这个特征为例,我们可以用向量 “1,0”表示“男”,向量 “0,1”表示“女”。使用one-hot编码可将离散特征的取值扩展到了欧式空间,便于进行相似度计算

    为什么使用one-hot编码来处理离散型特征?
    在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
    而我们使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。
    将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。
    比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2。那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0), x_2 = (0, 1, 0), x_3 = (0, 0, 1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理。

    不需要使用one-hot编码来处理的情况
    将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。
    比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码。
    离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。就可以跟对连续型特征的归一化方法一样,对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1。

    4.数据分箱:作为数据预处理的一部分,也被称为离散分箱或数据分段。其实分箱的概念其实很好理解,它的本质上就是把数据进行分组,实现数据的离散化,增强数据稳定性,减少过拟合风险。逻辑回归中进行分箱是非常必要的,其他树模型可以不进行分箱。

    分箱后的数据特点:

    • 数据可取值的范围变小了

    • 数据的可取值会更加确定与稳定

    • 数据中信息会变得模糊,不再那么精确

    好处:

    • 提高模型的稳定性与鲁棒性

    • 防止过拟合问题

    • 加快模型训练速度

    • 很好的处理空值与缺失值

    • 增强逻辑回归的拟合力

    例:

    我们以年龄为例,看下面的表格,左边是原始年龄数据,右边是分箱后的数据

    年龄(原始数据)

    年龄(分箱后)

    29

    18至40岁

    7

    18岁以下

    49

    40至60岁

    12

    18岁以下

    50

    40至60岁

    34

    18至40岁

    36

    18至40岁

    75

    60岁以上

    61

    60岁以上

    20

    18至40岁

    3

    18岁以下

    11

    18岁以下

    年龄字段中的数据被分到了以下4个组别中:

    • 18岁以下

    • 18至40岁

    • 40至60岁

    • 60岁以上

    这样,原本取值是任何0-120整数的年龄数据就被分到了上面这4个固定的值中

    连续型特征的分箱分为无监督分箱与有监督分箱两类,分别各有2种应用的比较广的方法:

      • 无监督分箱:不需要提供Y,仅凭借特征就能实现分箱

      • 等宽分箱

      • 等频分箱

      • 有监督分箱:需要结合Y的值,通过算法实现分箱

      • 决策树分箱

      • 卡方分箱

     

    特征选择

    特征选择的意义

    在对数据进行异常值、缺失值、数据转换等处理后,我们需要从当前数据集中选出有意义的特征,然后输入到算法模型中进行训练。

    对数据集进行特征选择主要基于以下几方面的考虑:

    1.冗余的特征会影响阻碍模型找寻数据潜在的规律,若冗余的特征过多,还会造成维度容灾,占用大量的时间空间,使算法运行效率大打折扣。

    2.去除不相关的特征会降低学习任务的难度,保留关键的特征更能直观的看出数据潜在的规律。

    那么,该如何进行特征选择呢?通常,要从两方面考虑来选择特征:

    1.特征是否具有发散性:
    如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。

    2.特征与目标的相关性:
    如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。

    根据特征选择的标准,又能分为filter、wrapper、embedded三种方法。

    Filter方法

    过滤法的主要思想是查看特征的发散性和特征与目标的相关性,通过设定阈值的方法,过滤发散性低、相关性不强的特征。

    过滤法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关,即先选好特征,再用过滤后的特征来训练模型。

    具体来说,有:

    1.方差法

    使用方差法,要先计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。若特征的方差小于阈值,则代表该特征的发散性太弱。

    2.Pearson系数

    Pearson相关系数是用协方差除以两个变量的标准差得到的。皮尔逊系数只能衡量线性相关性,先要计算各个特征对目标值的相关系数以及相关系数的P值,P值区间在[-1,1],p值越大,则与目标值越正/负相关,当p值为0时,则代表与目标值不相关。

    3.卡方检验

    卡方检验只能用于二分类,经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,从而构建统计量。

    4.互信息法

    互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。

    互信息系数能够很好地度量各种相关性。

    wrapper法

    过滤法在选择特征时不考虑特征对学习器的效果,包裹式选择就很灵性了。包裹式通常根据预测效果评分来为学习器“量身定制”特征子集,相较于过滤法,能使学习器的性能更佳,缺点即是计算开销往往也更大。

    比如LVW(Las Vegas Wrapper)特征选择方法,其思想是使用随机策略来进行子集搜索,并以最终分类器的误差为特征子集的评价标准。

    Embedded法

    嵌入式特征选择方法也很灵性…嵌入式的特征选择方法将特征选择和学习器的训练过程融为一体,即学习器自动的进行了特征选择。

    比如决策树的信息增益、信息增益比、基尼指数,求解最优解时的L1、L2正则化等思想,都能选取对学习器有价值的特征,过滤价值不大的特征。

  • 相关阅读:
    python lambda函数的用法
    python 中is 和 ==的区别
    Mongo 聚合函数 $group方法的使用
    mongo聚合
    当mongo数据库报错关于 Failed global initialization:
    python 中字符串的拼接
    python eval()用法报错 SyntaxError: unexpected EOF while parsing
    高性能MySQL(六):选择合适的存储引擎
    高性能MySQL(五):存储引擎
    高性能MySQL(四):多版本并发控制
  • 原文地址:https://www.cnblogs.com/AmbitiousMice/p/14787079.html
Copyright © 2011-2022 走看看