• 连续变量离散化的原因


    连续变量为啥要进行离散化

    参考:https://www.cnblogs.com/wqbin/p/11087162.html

    一、离散化原因
    数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。数据离散化的原因主要有以下几点:

    算法需要
    比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。

    离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
    比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。

    可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定

    二、离散化的优势
    在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:

    离散特征的增加和减少都很容易,易于模型的快速迭代;
    稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
    离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
    逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
    离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
    特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
    特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
    三、离散化的方法
    1、无监督学习方法

    1.1等宽法
        等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间

    1.2等频法
        等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。

    1.3基于聚类的方法
    基于聚类的方法分为两个步骤,即:
    选定聚类算法将其进行聚类
    将在同一个簇内的属性值做为统一标记。
    注:基于聚类的方法,簇的个数要根据聚类算法的实际情况来决定,比如对于k-means算法,簇的个数可以自己决定,但对于DBSCAN,则是算法找寻簇的个数。

    2、有监督学习方法:

    1R方法
    基于信息熵的方法
    基于卡方的方法
    四、总结
    模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。

  • 相关阅读:
    《Mybatis 手撸专栏》第8章:把反射用到出神入化
    《Mybatis 手撸专栏》第9章:细化XML语句构建器,完善静态SQL解析
    你说写代码,最常用的3个设计模式是啥?
    netty系列之:netty中常用的xml编码解码器
    java高级用法之:JNA中的回调
    netty系列之:protobuf在UDP协议中的使用
    netty系列之:使用Jboss Marshalling来序列化java对象
    可能有人听过ThreadLocal,但一定没人听过ThreadLocal对象池
    java高级用法之:绑定CPU的线程ThreadAffinity
    netty系列之:netty对marshalling的支持
  • 原文地址:https://www.cnblogs.com/gaowenxingxing/p/15222491.html
Copyright © 2020-2023  润新知