统计检验必学:T检验|三种类型+公式推导+Python代码+机器学习实战
T检验是统计学、数据分析、机器学习中最常用、最基础的均值检验方法,专门用来判断两组数据的均值是否存在显著差异。
一、T检验到底是什么?(一句话看懂)
T检验 = 小样本、总体标准差未知时,比较“均值是否有显著差异”的统计检验
它要回答的核心问题:
两组数据的均值不一样,是真的有差别,还是只是随机误差?
适用场景
- 样本量n < 30(小样本)
- 总体标准差未知
- 数据近似服从正态分布
- 只比较均值,不比较方差
二、T检验的三种核心类型(必考+必用)
T检验一共只有3种,对应3种不同业务场景,一定要分清:
1. 单样本 T 检验
用途:一组样本 和 已知总体均值 比较
- 例子:某班平均分是否显著不等于全校平均分
- 公式:
t=X‾−μ0s/n t = \frac{\overline{X} - \mu_0}{s/\sqrt{n}}t=s/nX−μ0
2. 独立样本 T 检验
用途:两组完全独立的样本比较
- 例子:男生成绩 vs 女生成绩;新方法 vs 旧方法
- 公式:
t=X‾1−X‾2Sp1n1+1n2 t = \frac{\overline{X}_1 - \overline{X}_2}{S_p \sqrt{\frac{1}{n_1}+\frac{1}{n_2}}}t=Spn11+n21X1−X2
合并方差:
Sp=(n1−1)s12+(n2−1)s22n1+n2−2 S_p=\sqrt{\frac{(n_1-1)s_1^2+(n_2-1)s_2^2}{n_1+n_2-2}}Sp=n1+n2−2(n1−1)s12+(n2−1)s22
3. 配对样本 T 检验
用途:同一组对象前后两次测量比较
- 例子:减肥前体重 vs 减肥后体重;训练前成绩 vs 训练后成绩
- 思路:先算差值,再对差值做单样本T检验
三、T分布是什么?和正态分布有什么区别?
T分布是小样本下的正态分布,形状由自由度 df决定:
T分布特点
- 对称、钟形,和正态分布很像
- 自由度越小,尾部越厚(更能容忍小样本波动)
- 自由度越大,越接近标准正态分布
- 自由度公式:
- 单样本:df=n−1df = n-1df=n−1
- 独立样本:df=n1+n2−2df = n_1+n_2-2df=n1+n2−2
四、Python 代码1:T分布与正态分布对比可视化
importnumpyasnpimportscipy.statsasstatsimportmatplotlib.pyplotasplt# 生成x轴数据x=np.linspace(-5,5,100)# 计算不同分布的密度t2=stats.t.pdf(x,df=2)t10=stats.t.pdf(x,df=10)norm=stats.norm.pdf(x)# 绘图plt.figure(figsize=(8,5))plt.plot(x,t2,label='t-distribution df=2',c='red')plt.plot(x,t10,label='t-distribution df=10',c='blue')plt.plot(x,norm,label='Normal',c='green',linestyle='--')plt.title('T分布 vs 正态分布')plt.xlabel('x')plt.ylabel('Density')plt.legend()plt.grid(alpha=0.3)plt.show()五、Python 代码2:独立样本T检验(最常用)
模拟两组成绩,判断是否有显著差异
importnumpyasnpimportscipy.statsasstatsimportseabornassnsimportmatplotlib.pyplotasplt# 生成数据np.random.seed(0)group1=np.random.normal(60,10,30)# 方法Agroup2=np.random.normal(65,12,30)# 方法B# 独立样本T检验t_stat,p_value=stats.ttest_ind(group1,group2)print(f"T 统计量:{t_stat:.4f}")print(f"P 值:{p_value:.4f}")# 分布对比图plt.figure(figsize=(8,5))sns.histplot(group1,color='blue',kde=True,label='Group1',stat='density',bins=10)sns.histplot(group2,color='red',kde=True,label='Group2',stat='density',bins=10)plt.title('两组数据分布对比')plt.legend()plt.show()结果怎么看?
- p < 0.05:差异显著,拒绝原假设
- p ≥ 0.05:差异不显著,不能拒绝原假设
六、Python 代码3:机器学习中的应用——特征选择
T检验(及其等价的F检验)是分类任务特征筛选神器:
判断特征在不同类别间是否有显著差异。
fromsklearn.datasetsimportload_irisfromsklearn.feature_selectionimportf_classiffromsklearn.linear_modelimportLogisticRegressionfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score# 数据集data=load_iris()X,y=data.data,data.target# 方差分析F检验(等价于多分类T检验)f_vals,p_vals=f_classif(X,y)print("特征F值:",f_vals.round(2))print("特征P值:",p_vals.round(4))# 筛选显著特征(p<0.05)X_selected=X[:,p_vals<0.05]# 建模X_train,X_test,y_train,y_test=train_test_split(X_selected,y,test_size=0.3,random_state=42)model=LogisticRegression()model.fit(X_train,y_train)acc=accuracy_score(y_test,model.predict(X_test))print(f"筛选后特征数:{X_selected.shape[1]}")print(f"模型准确率:{acc:.4f}")七、T检验使用步骤(万能流程)
- 明确问题:单样本/独立样本/配对样本
- 检验正态性(T检验要求数据近似正态)
- 计算 t 统计量
- 查看 p 值
- 下结论:
- p < 0.05 → 差异显著
- p ≥ 0.05 → 差异不显著
八、超清晰总结(背诵版)
- T检验 = 小样本、方差未知时的均值检验
- 三种类型:单样本、独立样本、配对样本
- T分布:自由度越小越扁尾,越大越接近正态
- 看 p 值判断显著性:p < 0.05 显著
- 机器学习用途:特征选择(筛选显著差异特征)