news 2026/4/17 15:54:23

机器学习中的 P 值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习中的 P 值

摘要:本文介绍了机器学习中P值的概念及其应用。通过乳腺癌数据集案例,演示了如何使用Python的scipy和scikit-learn库进行P值计算和特征选择。实验首先加载并分割数据,然后基于ANOVA F值筛选Top5特征,训练逻辑回归模型获得97%的准确率。最后单独检验"平均半径"特征的显著性,P值为0.00证实其对肿瘤分类具有统计显著性。该方法展示了P值在机器学习特征选择和假设检验中的实用价值。

目录

机器学习中的 P 值

Python 中 P 值的实现

步骤 1:加载数据集并分割训练集与测试集

步骤 2:基于 P 值选择最优特征

步骤 3:训练模型并评估性能

步骤 4:单独检验某一特征的显著性

完整代码

输出结果


机器学习中的 P 值

在机器学习中,我们使用 P 值检验零假设—— 即两个变量之间不存在显著关系。例如,若有房价数据集,想判断房屋面积与价格是否存在显著关联,便可通过 P 值验证这一假设。

要理解机器学习中的 P 值概念,需先明确零假设和备择假设:零假设指两个变量无显著关系,备择假设则与之相反,认为变量间存在显著关系。

定义好两种假设后,即可用 P 值检验假设的显著性:P 值是在零假设成立的前提下,得到当前观测结果或更极端结果的概率。

  • 若 P 值小于显著性水平(通常设为 0.05),则拒绝零假设、接受备择假设,说明变量间存在显著关系;
  • 若 P 值大于显著性水平,则无法拒绝零假设,即认为变量间无显著关系。

Python 中 P 值的实现

Python 提供了多个用于统计分析和假设检验的库,其中 scipy 库最为常用,其ttest_ind()函数可计算两个独立样本的 P 值。

以下将结合 scikit-learn 的乳腺癌数据集演示 P 值的应用 —— 该数据集旨在通过肿瘤半径、纹理、周长、面积、平滑度、紧密度、凹陷度、对称性等特征,预测乳腺肿瘤为恶性还是良性。

步骤 1:加载数据集并分割训练集与测试集

from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split data = load_breast_cancer() X = data.data # 特征数据 y = data.target # 标签(0=恶性,1=良性) # 按8:2分割训练集和测试集,随机种子设为42以保证结果可复现 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

步骤 2:基于 P 值选择最优特征

使用 scikit-learn 的SelectKBest类,根据特征的 P 值筛选出 Top k 个最优特征(此处 k=5):

from sklearn.feature_selection import SelectKBest, f_classif k = 5 # 采用f_classif函数(ANOVA F值)计算各特征与目标变量的P值 selector = SelectKBest(score_func=f_classif, k=k) # 对训练集拟合并转换,保留Top 5特征 X_train_new = selector.fit_transform(X_train, y_train) # 对测试集执行相同转换(避免数据泄露) X_test_new = selector.transform(X_test)

步骤 3:训练模型并评估性能

基于筛选后的特征训练逻辑回归模型,用准确率评估效果:

from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 初始化并训练逻辑回归模型 model = LogisticRegression() model.fit(X_train_new, y_train) # 预测测试集结果并计算准确率 y_pred = model.predict(X_test_new) accuracy = accuracy_score(y_test, y_pred) print(f"准确率: {accuracy:.2f}")

步骤 4:单独检验某一特征的显著性

以 “平均半径” 特征为例,用 scipy 的ttest_ind()函数检验其对肿瘤分类的显著性:

from scipy.stats import ttest_ind # 提取恶性肿瘤(y=0)和良性肿瘤(y=1)的平均半径特征(第0列) malignant = X[y == 0, 0] benign = X[y == 1, 0] # 计算t统计量和双尾P值 t, p_value = ttest_ind(malignant, benign) print(f"P值: {p_value:.2f}")

完整代码

from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.feature_selection import SelectKBest, f_classif from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from scipy.stats import ttest_ind # 加载数据并分割 data = load_breast_cancer() X = data.data y = data.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 特征选择 k = 5 selector = SelectKBest(score_func=f_classif, k=k) X_train_new = selector.fit_transform(X_train, y_train) X_test_new = selector.transform(X_test) # 模型训练与评估 model = LogisticRegression() model.fit(X_train_new, y_train) y_pred = model.predict(X_test_new) accuracy = accuracy_score(y_test, y_pred) print(f"准确率: {accuracy:.2f}") # 单独检验平均半径特征的显著性 malignant = X[y == 0, 0] benign = X[y == 1, 0] t, p_value = ttest_ind(malignant, benign) print(f"P值: {p_value:.2f}")

输出结果

上述代码运行后将得到以下输出:

plaintext

准确率: 0.97 P值: 0.00

该结果表明:基于 Top 5 特征的模型准确率达 97%;“平均半径” 特征的 P 值为 0.00(小于 0.05),说明其对区分良恶性肿瘤具有显著统计意义。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 14:09:16

春节运维不慌!Deepoc具身模型外拓板破解人力短缺,让机器自主顶岗

春节临近,商场客流爆棚、物流订单激增、园区安防压力陡增,各行各业都陷入“人力短缺”的运营困境——迎宾接待忙不过来、物流分拣效率告急、安防巡检难以全覆盖,传统依赖人工的运营模式在节假日高峰面前频频“掉链”。而Deepoc具身模型外拓板…

作者头像 李华
网站建设 2026/4/17 20:18:50

这份榜单够用!9个AI论文平台测评:自考毕业论文+开题报告全攻略

在当前学术研究日益数字化的背景下,论文写作已成为高校学生和研究人员面临的核心挑战之一。尤其是自考群体,面对开题报告、毕业论文等关键环节,往往需要兼顾工作与学习,时间精力有限,对高效、可靠的写作工具需求尤为迫…

作者头像 李华
网站建设 2026/4/17 0:16:22

计算机毕设java体育馆预订管理平台 基于Java的体育场馆在线预约服务系统 Java实现的校园体育运动场地预订管理系统

计算机毕设java体育馆预订管理平台6wr8d9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着高校体育设施资源日益紧张,传统的人工登记方式已无法满足师生对场地使用…

作者头像 李华