問題三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
英文地址,請注明出處:http://en.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…