大数据,机器学习,人工智能人工智能/模式识别/机器学习精华专题机器学习与数据挖掘

双样本T检验——机器学习特征工程相关性分析实战

2019-04-07  本文已影响3人  王同学死磕技术

最近在做数据分析方面的工作,经常需要检验两组样本之间是否存在差异,所以会遇到统计学中假设检验相关的知识。在机器学习特征工程这一步,笔者最常用到的是假设检验中的卡方检验去做特征选择,因为卡方检验可以做两个及两个以上样本率( 构成比)以及两个分类变量的关联性分析。但是笔者今天想介绍一下通过T检验做机器学习中的特征工程,希望能够让大家初步了解到各种假设检验是如何在机器学习项目的特征工程发挥作用。

假设检验简介

统计学中,常见的假设检验有:T检验(Student's t Test),F检验(方差齐性检验),卡方验证等。无论任何假设检验,它们都遵循如下图所示的流程:

假设检验与特征相关性分析

熟悉机器学习的同学都知道,特征X和目标Y的数值类型经常会出现两类:1. 连续型数值,2. 离散性数值(类别特征可以编码成离散型特征)。
特征X和目标Y在不同数值类型的组合下,应该采用不同的假设检验手段去做特征相关性分析。下图罗列了特征X和目标Y在各种数值类型组合时最适合的假设检验方法。


假设检验和特征相关分析对照表

T检验简介

T检验分单样本T检验和双样本T检验,单样本T检验检验的是样本的均值是否能代表总体的均值。双样本T检验检验的是两个独立样本所代表的总体数据均值差异是否显著。换句话说就是检验两个总体是否是存在差异。双样本T检验适用条件如下:

接下来按照假设检验流程:
1.原假设:两个独立样本所代表的总体数据均值相同(H_0),备择假设:两个独立样本所代表的总体数据均值不相同(H_1);
2.P值定为0.05;
3.计算两组样本的均值,标准差然后带入下图所示的公式后求得t值,然后查T检验表得到P值。其中\overline x_1\overline x_2 分别指这两组样本的均值,s_1s_2分别代表两组样本的标准差, n_1n_2分别代表两组样本的样本量;
4.如果P< 0.05,则两组数据均值不同,数据间存在差异,如果P> 0.05,则两组数据均值相同。

双样本T检验

双样本T检验特征相关性分析实战

数据载入

导入必要的python包和数据集,这里笔者用的是boston房价预测的数据集。

from scipy import stats
import pandas as pd
from sklearn.datasets import load_boston
data_value = load_boston().data
data_target = load_boston().target
feature = load_boston().feature_names
data = pd.DataFrame({ i:j  for  i, j  in  zip(feature, [data_value[:,index] for  index in range(len(feature))])})
data["Price"] = data_target

数据大致如下图所示,其中Price列是预测值Y,其他列都是特征X列,根据上文假设检验和特征相关分析对照表,我们发现如果X和Y中一个为二分类数值类型时,一个为连续数值类型时即可以使用双样本T检验。

data

下图显示CHAS这列是二分类数值类型,506个样本中CHAS = 0的有471个样本,CHAS = 1的有35个样本,而boston 房价预测数据中Price是连续数值类型,所以我们可以采用双样本T检验去检验CHAS(0或者1)的不同是否会对房价有影响,换句话说就是去检验CHAS这列特征和房价是否有关联。


CHAS的统计结果

准备样本

将CHAS = 0 的房价Price 样本 和 将CHAS = 1 的房价Price 样本 分别抽取出来。

CHAS_0 = list(data[data["CHAS"]==0].Price)
CHAS_1 = list(data[data["CHAS"]==1].Price)
方差齐次性检验

按照T检验的步骤,首先做方差齐次性检验,下方代码就是在做方差齐次性检验,一行代码,so easy。

stats.levene(CHAS_0,CHAS_1)

得到的结果如下所示:
LeveneResult(statistic=4.590342218715871,pvalue=0.03263097600633006)
这里我们只需要关注p value(上文提到的P值),P=0.03小于0.05,证明方差齐次性检验的原假设不成立,说明两组样本方差不满足齐次性。

双样本T检验

接着做双样本T检验,依然是一行代码。注意由于两组样本之间的方差不满足齐次性,需要加一个参数equal_var=False。此API默认为equal_var=Ture。

stats.ttest_ind(CHAS_0,CHAS_1,equal_var=False)

结果如下:
Ttest_indResult(statistic=-3.113291312794837,pvalue=0.003567170098137517)
P=0.003小于0.05,证明双样本T检验的原假设不成立,即两个总体之间的均值存在差异。

结论

下面结果显示:CHAS = 0的这一波房子的房价均值为22,而CHAS = 1的这一波房价的均值为26,说明CHAS = 1的房子比CHAS = 0的房子要贵。所以CHAS这列特征和房价还是很相关。而且T检验也证明其相关性还是很显著,所以这列特征,不能随意扔掉。


结果

但是不知道读者发现没有,采用T检验去做相关性分析,条件十分苛刻——需要一组样本是二分类数值,另一组特征为连续数值。其他类型的数值类型情况就无法采用此法。所以,卡方检验和方差分析应该是最值得推荐的做特征相关性方式。

上一篇下一篇

猜你喜欢

热点阅读