统计检验核心:F检验与F分布|原理推导+Python可视化+机器学习实战
F检验是统计学中用于比较方差、做方差分析(ANOVA)、检验回归方程显著性的核心方法,也是本科数理统计、研究生数据分析与机器学习特征选择的必学内容。
一、F检验到底是什么?一句话看懂
F检验 = 两个方差的比值检验
- 核心思想:用两组数据的样本方差之比判断两个总体方差是否有显著差异
- 服从分布:F分布(由两个卡方分布构造而来)
- 用途:
- 双总体方差齐性检验(方差是否相等)
- 单因素/多因素方差分析ANOVA
- 线性回归整体显著性检验
- 机器学习特征选择(最常用实战场景)
二、最直观的例子:两种肥料的产量稳定性
你是农业研究员,想判断:
- 肥料A、肥料B种出来的作物产量波动(方差)是否一样
步骤:
- F≈1 ➜ 方差无显著差异
- F远大于1 ➜ 方差显著不同
三、F分布的定义与核心特点
1. F分布从哪来?
F分布是两个标准化卡方分布的比值:
设:
- U∼χ2(d1)U \\sim \\chi^2(d_1)U∼χ2(d1)
- V∼χ2(d2)V \\sim \\chi^2(d_2)V∼χ2(d2)
- U、V相互独立
则:
F=U/d1V/d2∼F(d1,d2)
F = \\frac{U/d_1}{V/d_2} \\sim F(d_1, d_2)
F=V/d2U/d1∼F(d1,d2)
- d1d_1d1:分子自由度
- d2d_2d2:分母自由度
2. F分布的4个关键特征
四、F检验的核心公式(方差齐性检验)
1. 统计量
F=S12S22
F = \\frac{S_1^2}{S_2^2}
F=S22S12
约定:把大方差放分子,使F≥1
2. 自由度
- d1=n1−1d_1 = n_1 – 1d1=n1−1
- d2=n2−1d_2 = n_2 – 1d2=n2−1
3. 判断规则
给定显著性水平 α=0.05\\alpha=0.05α=0.05:
- 计算p值 < 0.05 ➜ 拒绝原假设 ➜ 方差有显著差异
- p值 ≥ 0.05 ➜ 不能拒绝 ➜ 方差无显著差异
五、F分布概率密度函数(PDF)
(供考研/深入学习使用,本科会用即可)
fF(x;d1,d2)=Γ(d1+d22)Γ(d12)Γ(d22)(d1d2)d12xd12−1(1+d1d2x)−d1+d22
f_F(x;d_1,d_2)=\\frac {\\Gamma\\left(\\frac{d_1+d_2}{2}\\right)} {\\Gamma\\left(\\frac{d_1}{2}\\right)\\Gamma\\left(\\frac{d_2}{2}\\right)} \\left(\\frac{d_1}{d_2}\\right)^{\\frac{d_1}{2}} x^{\\frac{d_1}{2}-1} \\left(1+\\frac{d_1}{d_2}x\\right)^{-\\frac{d_1+d_2}{2}}
fF(x;d1,d2)=Γ(2d1)Γ(2d2)Γ(2d1+d2)(d2d1)2d1x2d1−1(1+d2d1x)−2d1+d2
- Γ\\GammaΓ:伽马函数(阶乘推广,保证积分为1)
- x>0
六、Python实现1:F分布可视化 + 双样本方差检验
直接运行,直观看到F分布和你计算的F值位置
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
# 固定随机种子
np.random.seed(42)
# 生成两组数据:方差不同
n1, n2 = 30, 30
data1 = np.random.normal(0, 1, n1) # 方差=1
data2 = np.random.normal(0, 2, n2) # 方差=4
# 计算无偏样本方差
var1 = np.var(data1, ddof=1)
var2 = np.var(data2, ddof=1)
# 计算F统计量(大方差/小方差)
if var2 >= var1:
F_stat = var2 / var1
d1 = n2 – 1
d2 = n1 – 1
else:
F_stat = var1 / var2
d1 = n1 – 1
d2 = n2 – 1
print(f"方差1: {var1:.4f}")
print(f"方差2: {var2:.4f}")
print(f"F统计量: {F_stat:.4f}")
print(f"自由度: ({d1}, {d2})")
# 绘制F分布
x = np.linspace(0, 5, 500)
pdf = stats.f.pdf(x, dfn=d1, dfd=d2)
plt.figure(figsize=(10,6))
plt.plot(x, pdf, color='#3498db', linewidth=2, label=f'F({d1},{d2})')
plt.axvline(F_stat, color='#e74c3c', linestyle='–', linewidth=2, label=f'F={F_stat:.3f}')
plt.title('F Distribution & F Statistic', fontsize=14)
plt.xlabel('F value')
plt.ylabel('Probability Density')
plt.legend()
plt.grid(alpha=0.3)
plt.show()
七、Python实现2:机器学习最强应用 — ANOVA F检验特征选择
这是工作/竞赛最常用的技能:
用F检验筛选对预测目标显著的特征,扔掉无用特征
适用场景
回归任务 → f_regression
分类任务 → f_classif(卡方检验也常用)
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.feature_selection import f_regression, SelectKBest
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 生成回归数据
X, y = make_regression(n_samples=1000, n_features=10, noise=10, random_state=42)
df = pd.DataFrame(X, columns=[f'feat_{i}' for i in range(10)])
df['target'] = y
# 划分训练集/测试集
X_train, X_test, y_train, y_test = train_test_split(
df.drop('target',axis=1), df['target'], test_size=0.2, random_state=42
)
# 计算每个特征的F值和p值
f_vals, p_vals = f_regression(X_train, y_train)
# 构建结果表
res = pd.DataFrame({
'feature': X_train.columns,
'F_value': f_vals,
'p_value': p_vals
}).sort_values('F_value', ascending=False)
print("=== F检验特征重要性排序 ===")
print(res)
# 筛选显著特征(p<0.05)
best_feats = res[res['p_value']<0.05]['feature'].tolist()
print("\\n显著特征:", best_feats)
# 用筛选后的特征建模
model = LinearRegression()
model.fit(X_train[best_feats], y_train)
r2 = model.score(X_test[best_feats], y_test)
print(f"\\n筛选后模型 R²: {r2:.4f}")
# 画图展示特征重要性
plt.figure(figsize=(12,5))
plt.bar(res['feature'], res['F_value'], color='#1abc9c')
plt.title('Feature F-Value (ANOVA)', fontsize=14)
plt.xticks(rotation=45)
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
八、F检验的三大核心用途(考试+面试必考)
方差齐性检验
检验两总体方差是否相等,是t检验的前提
方差分析(ANOVA)
检验多组均值是否有显著差异
组间方差 / 组内方差 → F值
线性回归显著性
检验整个回归方程是否有用
回归均方 / 残差均方 → F值
九、超简总结(背诵版)
- F检验 = 方差之比的检验
- F分布 = 两个卡方分布均值的比值
- F≈1 ➜ 方差相似
- F越大 ➜ 方差差异越显著
- 实战最强用途:机器学习特征选择


![【题解】[COCI 2025/2026 #6] 滑雪 / Skijanje(李超树 0 基础友好喵)-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260826083930-6a8ea642697bc-220x25.png)
