问题三ai思路

好的,我把“路线A:分类建模择时”的代码按功能分段给出,并为每段配上简明解释。你可以将这些段落依次粘贴到已完成清洗后的 df 变量之后直接运行。

0. 依赖导入(一次即可)

作用:导入所需库;后续各段使用。

import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedKFold, GridSearchCV
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.calibration import CalibratedClassifierCV
from sklearn.metrics import roc_auc_score, brier_score_loss
import matplotlib.pyplot as plt

1. 构造标签与选择特征

作用:

  • 将浓度阈值0.04转为“是否达标”的二分类标签。
  • 选择用于建模的特征列(存在才会使用)。
df_cls = df.copy()
df_cls['达标'] = (df_cls['Y染色体浓度'] >= 0.04).astype(int)
feat_all = ['检测孕周','孕妇BMI','年龄','身高','体重']
features = [c for c in feat_all if c in df_cls.columns]
X = df_cls[features]
y = df_cls['达标']

2. 模型训练:多项式特征 + 标准化 + 逻辑回归 + 概率校准

作用:

  • 用多项式/交互项捕捉非线性。
  • 标准化提升逻辑回归稳定性。
  • 网格搜索选择最优多项式阶数与C。
  • 概率校准(isotonic)提升预测概率的可信度。
pipe = Pipeline([('poly', PolynomialFeatures(degree=2, include_bias=False)),('scaler', StandardScaler()),('clf', LogisticRegression(max_iter=1000, solver='lbfgs', class_weight='balanced'))
])
param = {'poly__degree': [1, 2], 'clf__C': [0.5, 1.0, 5.0]}
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
grid = GridSearchCV(pipe, param, cv=cv, scoring='roc_auc', n_jobs=-1)
grid.fit(X, y)calib = CalibratedClassifierCV(grid.best_estimator_, cv=5, method='isotonic')
calib.fit(X, y)p_hat = calib.predict_proba(X)[:,1]
auc = roc_auc_score(y, p_hat)
brier = brier_score_loss(y, p_hat)
print(f'AUC={auc:.3f}, Brier={brier:.4f}, BestParams={grid.best_params_}')

3. BMI 分组

作用:

  • 以医学常用区间对 BMI 分组,便于组内择时与解释。
bins = [0,28,32,36,40,np.inf]
labels = ['[0,28)','[28,32)','[32,36)','[36,40)','40+']
df_cls['BMI组'] = pd.cut(df_cls['孕妇BMI'], bins=bins, labels=labels, right=False)

4. 概率阈值法择时(核心)

作用:

  • 在每个 BMI 组,用“组内中位特征”构造代表个体。
  • 在孕周网格 t∈[10,25] 上预测达标概率曲线 P(t)。
  • 取最早使 P(t)≥q(如0.9)的孕周为推荐时点。
weeks = np.arange(10, 25.01, 0.1)
q = 0.9rows_q = []
for g in df_cls['BMI组'].dropna().unique():sub = df_cls[df_cls['BMI组']==g]if sub.empty: continuemed = sub[features].median(numeric_only=True)gridX = pd.DataFrame({'检测孕周': weeks})for col in features:if col != '检测孕周':gridX[col] = med.get(col, sub[col].median())p_curve = calib.predict_proba(gridX[features])[:,1]idx = np.where(p_curve >= q)[0]best_week = weeks[idx[0]] if len(idx)>0 else np.nanrows_q.append({'BMI组': str(g), f'推荐孕周_阈值q={q}': best_week})res_q = pd.DataFrame(rows_q).sort_values('BMI组')
print('\n按BMI组的推荐孕周(基于概率阈值法)')
print(res_q)

5. 风险最小化择时(可与阈值法交叉验证)

作用:

  • 定义简单风险 R(t)=w1·(1−P(t)) + w2·早检惩罚(max(12−t,0))。
  • 找每组使风险最小的孕周,作为备选/对照的推荐时点。
w1, w2 = 1.0, 0.1
rows_risk = []
for g in df_cls['BMI组'].dropna().unique():sub = df_cls[df_cls['BMI组']==g]if sub.empty:continuemed = sub[features].median(numeric_only=True)gridX = pd.DataFrame({'检测孕周': weeks})for col in features:if col != '检测孕周':gridX[col] = med.get(col, sub[col].median())p_curve = calib.predict_proba(gridX[features])[:,1]early_pen = np.maximum(12 - weeks, 0)risk = w1*(1 - p_curve) + w2*early_pent_star = weeks[np.argmin(risk)]rows_risk.append({'BMI组': str(g), '最小风险孕周': t_star})res_risk = pd.DataFrame(rows_risk).sort_values('BMI组')
print('\n按BMI组的最小风险孕周(简单风险函数)')
print(res_risk)

6. 概率曲线可视化

作用:

  • 展示各 BMI 组的 P(t) 曲线与阈值线,便于说明推荐时点的依据。
plt.figure(figsize=(10,6))
for g in df_cls['BMI组'].dropna().unique():sub = df_cls[df_cls['BMI组']==g]if sub.empty:continuemed = sub[features].median(numeric_only=True)gridX = pd.DataFrame({'检测孕周': weeks})for col in features:if col != '检测孕周':gridX[col] = med.get(col, sub[col].median())p_curve = calib.predict_proba(gridX[features])[:,1]plt.plot(weeks, p_curve, label=str(g))
plt.axhline(q, color='gray', linestyle='--', label=f'阈值q={q}')
plt.xlabel('检测孕周'); plt.ylabel('达标概率P'); plt.title('各BMI组的达标概率曲线P(t)')
plt.legend(); plt.tight_layout(); plt.show()

7. 简易稳健性(误差敏感性)分析

作用:

  • 对阈值0.04做随机抖动,重复计算推荐孕周。
  • 给出区间估计,体现方案对误差的稳健性。
np.random.seed(42)
B = 200
sigma_thr = 0.004  # 阈值抖动(可用重复检测估计更精确的σ)
rows_ci = []for g in df_cls['BMI组'].dropna().unique():sub = df_cls[df_cls['BMI组']==g]if sub.empty:continuemed = sub[features].median(numeric_only=True)t_list = []for _ in range(B):gridX = pd.DataFrame({'检测孕周': weeks})for col in features:if col != '检测孕周':gridX[col] = med.get(col, sub[col].median())p_curve = calib.predict_proba(gridX[features])[:,1]thr = np.random.normal(0.04, sigma_thr)adj = np.clip(p_curve - 0.5*((max(thr-0.04,0))/0.04), 0, 1)  # 保守调整idx = np.where(adj >= q)[0]t_list.append(weeks[idx[0]] if len(idx)>0 else np.nan)arr = np.array([t for t in t_list if np.isfinite(t)])if len(arr)>0:rows_ci.append({'BMI组': str(g),'推荐孕周_中位数': np.median(arr),'2.5%': np.percentile(arr, 2.5),'97.5%': np.percentile(arr, 97.5),'有效样本': len(arr)})res_ci = pd.DataFrame(rows_ci).sort_values('BMI组')
print('\n稳健性分析:推荐孕周的模拟区间')
print(res_ci)

小结

  • 第1–2段得到“可信的达标概率模型”。
  • 第3–4段按 BMI 分组并给出“最早 P≥q 的推荐孕周”。
  • 第5段提供“最小风险孕周”作为对照,增强决策稳健性。
  • 第6–7段用图与区间说明“为什么选这个时点”和“对误差是否稳健”。

需要的话,我可以把以上分段自动合并进你当前的 game.py 并一次性运行,输出结果表与图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921312.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java第十四幕集合啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦

集合1 Collection接口1.1 集合概述集合是一个装对象的容器。集合中只能存放引用数据类型的对象。集合中有一些大小是固定的,有一些是不固定的。有一些是有序的,有些是无序的。有些可以有重复元素,有一些不可以有重复元素1.2 集合常用方法publ…

硬件基础:串口通信

数据传输方式(按位传输方式)并行通信通过多条数据线同时传输多个数据位,速度较快但成本高,抗干扰能力弱,适用于短距离通信,如早期的打印机接口。串行通信通过单条或少数数据线逐位传输数据,线路…

从Java全栈到云原生:一场技术深度对话

从Java全栈到云原生:一场技术深度对话 面试官与应聘者互动记录 面试官:你好,欢迎来到我们的面试。先简单介绍一下你自己吧。 应聘者:您好,我叫李明,28岁,硕士学历,有5年Java全栈开发…

158-EEMD-HHT算法

158-EEMD-HHT#EMD #希尔伯特变换-(Hilbert- Huang Transform,HHT)#集合经验模态分解 EEMD #时频分析 #边际谱代码描述1、利用 集合经验模态分解(EEMD)方法对信号进行分解,得到模态分量 IMF;2、计…

C#开发中的 token

C# 开发中的 Token 详解 C# 开发中的 Token 详解与示例 1. CancellationToken - 异步取消令牌 示例 1:基础取消机制 示例 2:Web API 中的请求取消 2. JWT Token - 身份验证令牌 示例 1:JWT Token 生成与验证 示例 2:ASP.NET Core JWT 认证配置 3. Access Token - API 访问令…

旅游安全急救实训室助力应急处置技能实战化

随着旅游行业的快速发展,游客安全需求日益突出,应急处置能力已成为旅游服务人才的核心素养之一。在中职教育旅游服务与管理专业中,旅游安全急救实训室作为关键教学场所,正发挥着不可替代的作用。一、旅游安全急救实训室的建设背景…

分布式微服务--ZooKeeper的客户端常用命令 Java API 操作

一、ZooKeeper 客户端常用命令 1. 启动与退出 bin/zkCli.sh -server 127.0.0.1:2181 # 连接客户端 quit # 退出客户端2. 节点操作 # 查看子节点 ls / ls -s / ls /app# 查看节点详细信息 ls2 /app stat /app# 创建节点 create /node1 "…

PID控制技术深度剖析:从基础原理到高级应用(六)

PID 控制技术深度剖析:从基础原理到高级应用 最近在项目中有要开始进行PID的控制了,隔了很久没有做PID控制的东西了,所以想正好借这个机会,温习一下和PID有关的内容。 系列文章目录 PID控制技术深度剖析:从基础原理到…

PCL关键点提取

1. 核心概念:什么是关键点?为什么需要关键点? 关键词:信息冗余、计算效率、突出特征 “想象一下,我们有一片密集的点云,包含几十万个点。如果我们直接在每个点上都计算像FPFH这样的局部特征,计算量会非常大,极其耗时,而且很多点所处的区域(比如平坦的墙面)特征非常…

vcruntime140_1.dll缺失怎么办?暗黑破坏神游戏vcruntime140_1.dll缺失的4个解决方法

你是否遇到过这样的情况: 玩《暗黑破坏神》《英雄联盟》《GTA5》的时候,游戏忽然闪退,弹窗提示: “无法启动,因为计算机中丢失 vcruntime140_1.dll” 这不是某一个游戏的问题,而是 Windows 系统运行库缺失…

迁移学习-ResNet

好的,我将为你撰写一篇关于ResNet迁移学习的技术博客。以下是博客的主要内容:ResNet迁移学习:原理、实践与效果深度解析1. 深度学习中迁移学习的重要性与ResNet的独特价值迁移学习(Transfer Learning)是机器学习中一种…

极大似然估计与概率图模型:统计建模的黄金组合

在数据驱动的时代,如何从海量信息中提取有价值的规律?统计建模提供了两大核心工具:极大似然估计(MLE)帮助我们根据数据推断模型参数,而概率图模型(PGM)则通过图形化语言描述变量间的…

解析豆科系统发育冲突原因

生命之树是进化生物学的核心,但由于 不完全谱系排序(ILS)、杂交 和 多倍化 等复杂过程,解析深层且难解的系统发育关系仍然是一个挑战。**豆科(Leguminosae)**这一物种丰富且生态多样化家族的理解&#xff0…

从Java全栈到前端框架:一次真实的面试对话与技术解析

从Java全栈到前端框架:一次真实的面试对话与技术解析 在一次真实的面试中,一位拥有多年经验的Java全栈开发工程师,被问及了多个涉及前后端技术栈的问题。他的回答既专业又自然,展现了扎实的技术功底和丰富的实战经验。 面试官&…

阿瓦隆 A1566HA 2U 480T矿机参数解析:性能与能效深入分析

在矿机行业,AvaLON是一个备受关注的品牌,尤其在比特币(BTC)和比特币现金(BCH)挖矿领域,凭借其强劲的算力和高效能效,在市场中占据了一席之地。本文将针对阿瓦隆 A1566HA 2U 480T矿机…

小迪安全v2023学习笔记(七十八讲)—— 数据库安全RedisCouchDBH2database未授权CVE

文章目录前记服务攻防——第七十八天数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞前置知识复现环境服务判断对象类别利用方法数据库应用 - Redis-未授权访问&CVE漏洞前置知识案例演示沙箱绕过RCE - CVE-2022-0543未授权访问 - CNVD-2019-2…

HTML + CSS 创建图片倒影的 5 种方法

HTML CSS 创建图片倒影的 5 种方法 目标:掌握多种生成“图片倒影 / Reflection”效果的实现思路,理解兼容性、性能差异与最佳实践,方便在真实业务(商品展示、相册、登陆页面视觉强化)中安全使用。 总览对比 方法核心…

一个文件被打开io流和不打卡 inode

1. 磁盘 最小基本单位 扇区 机器磁盘的io效率 (读和取)2. 文件系统 对磁盘分区 ,最小的文件单位块组,快组内部已经划分好区域,巴拉巴拉,总之,每次使用数据,以操作系统的处理都是块级…

ThermoSeek:热稳定蛋白数据库

这篇论文提出了ThermoSeek,一个综合性的网络资源,用于分析来自嗜热和嗜冷物种的蛋白质序列和结构。具体来说,数据收集:从美国国家生物技术信息中心(NCBI)的基因组数据库中收集了物种的分类ID,并…

leetcode算法刷题的第二十七天

1.leetcode 56.合并区间 题目链接 class Solution { public:static bool cmp(const vector<int>& a,const vector<int>& b){return a[0]<b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<v…