特征选择--信息增益(information gain)--spark实现和优化

【背景】

        首先我们先看一下,本期度词条对信息增益的广义定义:

  

      其实,我们主要用到信息增益,还是在特征选择上。个人理解信息增益就是目标列(y)整体信息熵和特征列每一个类别分组下对应目标列信息熵期望的差值,所有在命名时会用到增益。整体来看是y值的整体分布和y值在不同特征类型别下分布累加的差距。依此来衡量变量对目标(y)列的区分度,或者叫纯度。但是信息增益评价指标会倾向于类别个数比较多的列。所以特征选择过程中会配合增益率一块使用,或者对特征列进行分分箱离散化时特征列类别个数相近,从而去除特征类别个数对评价指标的影响。

【原理】

【公式】

         Ent(D) = - \sum_{k=1}^{y}{p_{k}log_{2}p_{k}}

         Gain(D,a) = Ent(D) - \sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})

        其中 Ent(D)是目标y列的信息熵,第二项是条件信息熵期望,即D列每个类别(D^v)对应y的信息熵的期望

【spark实现】

   如下为计算每隔待选列的信息熵

object EntropyCalculator  {
  /**
    * @desc 计算信息熵  
    * @param calCols 需要计算的列
    * @param dfRowNum 当前数据集总行数
    * @return
    */
  def calculator(
       df: DataFrame,
       calCols: Array[String],
       ycol: String, 
       dfRowNum: Double
   ): Map[String, Double] = {
    if (df.storageLevel == StorageLevel.NONE) {
      df.persist(StorageLevel.DISK_ONLY)
    } 
    val result = if (dfRowNum == 0) {
      calCols.m
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值