卡方选择器

      下面看看选择特征的实现,入口函数是fit

      这里通过Statistics.chiSqTest计算卡方检测的值。下面需要了解卡方检测的理论基础。

      卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,主要是比较两个及两个以上样本率( 构成比)以及两个分类变量的关联性分析。
    其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。

      卡方检验是以${X}^{2}$分布为基础的一种常用假设检验方法,它的无效假设H0是:观察频数与期望频数没有差别。

      该检验的基本思想是:首先假设H0成立,基于此前提计算出${X}^{2}$值,它表示观察值与理论值之间的偏离程度。根据${X}^{2}$分布及自由度可以确定在假设成立的情况下获得当前统计量及更极端情况的概率P
    如果P值很小,说明观察值与理论值偏离程度太大,应当拒绝无效假设,表示比较资料之间有显著差异;否则就不能拒绝无效假设,尚不能认为样本所代表的实际情况和理论假设有差别。

    • A代表某个类别的观察频数,E代表基于H0计算出的期望频数,A与之差称为残差。

    • 残差可以表示某一个类别观察值和理论值的偏离程度,但如果将残差简单相加以表示各类别观察频数与期望频数的差别,则有一定的不足之处。
      因为残差有正有负,相加后会彼此抵消,总和仍然为0,为此可以将残差平方后求和。

      进行上述操作之后,就得到了常用的${X}^{2}$统计量。其计算公式是:


      当n比较大时,卡方统计量近似服从k-1(计算E_i时用到的参数个数)个自由度的卡方分布。由卡方的计算公式可知,当观察频数与期望频数完全一致时,卡方值为0;观察频数与期望频数越接近,两者之间的差异越小,卡方值越小;
    反之,观察频数与期望频数差别越大,两者之间的差异越大,卡方值越大。

      在MLlib中,使用chiSquaredFeatures方法实现卡方检测。它为每个特征进行皮尔森独立检测。下面看它的代码实现。

      上述代码主要对数据进行处理,获取带有标签的特征的出现次数,并用这个次数计算卡方值。真正获取卡方值的函数是。

      上述代码的实现和参考文献【2】中Test of independence的描述一致。

    【1】卡方检验