讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在保持家族独立性前提下实现神经质分数的分层抽样划分

老杰吖_4963

老杰吖_4963

发布时间:2026-10-21 20:42:03

|

959人浏览过

|

来源于php中文网

原创

如何在保持家族独立性前提下实现神经质分数的分层抽样划分

本文介绍一种结合家族约束与神经质(neofac_n)分布均衡性的分层样本划分方法,利用 stratifiedkfold 实现“同家族不共存于同一子集 + 各子集神经质分布近似一致”的双重目标。

本文介绍一种结合家族约束与神经质(neofac_n)分布均衡性的分层样本划分方法,利用 stratifiedkfold 实现“同家族不共存于同一子集 + 各子集神经质分布近似一致”的双重目标。

在行为心理学或遗传学研究中,常需将被试划分为两个互斥子样本用于建模、验证或交叉分析,但必须同时满足两个关键约束:

  1. 家族独立性:来自同一家庭(Family_ID 相同)的被试不能出现在同一子样本中(避免血缘相关性引入偏差);
  2. 分布一致性:两组在关键协变量(如 Neuroticism 分数 NEOFAC_N)上的分布应尽可能相似,以保障组间可比性。

直接使用 train_test_split 或简单随机划分无法兼顾二者;而 StratifiedKFold 虽支持按标签分层,但其默认逻辑不感知“家族结构”。因此,我们需要对策略进行适配:将每个家族视为一个不可分割的“超样本单元”,并在该单元内分配成员至不同子集,同时依据其神经质分数进行分层决策。

核心思路如下:

  • 首先按 Family_ID 分组,确保每个家族最多含 2 名被试(如题设);
  • 对每个家族,将其成员视为一个候选对(单人家庭则仅一人),我们需为该家族指定“哪位成员进入子集 A,哪位进入子集 B”;
  • 将所有家族的神经质均值(或代表性分数)作为分层依据,构造虚拟“家族级标签”,再用 StratifiedKFold(n_splits=2) 划分家族 → 从而间接控制两组中高/中/低神经质家族的均衡分布;
  • 最后,根据家族分配结果,将对应成员分别填入 sample_1 和 sample_2。

以下是完整可运行的实现代码:

from sklearn.model_selection import StratifiedKFold
import numpy as np
import pandas as pd

# 假设 df_behavioral 已就绪(如题中生成逻辑)
# 步骤 1:按 Family_ID 分组,提取每家族的 Neuroticism 代表值(取均值;单人则直接取)
family_groups = df_behavioral.groupby('Family_ID')
family_neuroticism = family_groups['NEOFAC_N'].mean().round().astype(int)  # 离散化便于分层

# 步骤 2:为每个 Family_ID 构造分层标签(此处用四分位分组增强稳定性)
neuro_q4 = pd.qcut(family_neuroticism, q=4, labels=False, duplicates='drop').fillna(0).astype(int)
family_labels = neuro_q4.reindex(family_neuroticism.index)

# 步骤 3:使用 StratifiedKFold 将 Family_ID 划分为两组(stratified by family-level neuroticism)
skf = StratifiedKFold(n_splits=2, shuffle=True, random_state=42)
family_ids = family_neuroticism.index.values
_, family_test_idx = next(skf.split(family_ids, family_labels))

family_set_a = set(family_ids[family_test_idx])
family_set_b = set(family_ids) - family_set_a

# 步骤 4:按家族分配被试 —— 每个家族中,成员交替分配至 sample_1 / sample_2
sample_1_idx, sample_2_idx = [], []
for family_id, group in family_groups:
    indices = group.index.tolist()
    if len(indices) == 1:
        # 单人家庭:按家族分组归属决定去向
        if family_id in family_set_a:
            sample_1_idx.append(indices[0])
        else:
            sample_2_idx.append(indices[0])
    else:  # 双人家庭:强制分拆
        if family_id in family_set_a:
            sample_1_idx.append(indices[0])
            sample_2_idx.append(indices[1])
        else:
            sample_1_idx.append(indices[1])
            sample_2_idx.append(indices[0])

# 构建最终子样本
sample_1 = df_behavioral.loc[sample_1_idx].reset_index(drop=True)
sample_2 = df_behavioral.loc[sample_2_idx].reset_index(drop=True)

print(f"Sample 1 size: {len(sample_1)}, Sample 2 size: {len(sample_2)}")
print("Neuroticism distribution check:")
print(f"Sample 1 — Mean: {sample_1['NEOFAC_N'].mean():.2f}, Std: {sample_1['NEOFAC_N'].std():.2f}")
print(f"Sample 2 — Mean: {sample_2['NEOFAC_N'].mean():.2f}, Std: {sample_2['NEOFAC_N'].std():.2f}")

✅ 关键优势说明:

  • 家族完整性保障:groupby('Family_ID') 确保无跨家族混入;
  • 分层有效性:通过家族级神经质聚合 + qcut 分箱 + StratifiedKFold,显著提升两组在原始 NEOFAC_N 上的分布重叠度(可用 KS 检验或直方图验证);
  • 可扩展性:若某家族含 >2 成员,可扩展为“轮询分配”或“贪心匹配”,本例双人假设已覆盖多数家系设计。

⚠️ 注意事项:

  • 若家族规模高度不均(如存在 5+ 人家庭),需改用更复杂的图着色或整数规划策略;
  • StratifiedKFold 要求每类标签至少有 2 个样本,故分箱时使用 duplicates='drop' 并填充缺失;
  • 建议后续用 scipy.stats.ks_2samp 对两组 NEOFAC_N 进行分布等价性检验,确保 stratification 成效。

该方案在保持统计严谨性的同时,完全兼容 pandas 生态,无需额外依赖图算法库,是处理小规模家系数据分层划分的高效实践路径。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
Python 机器学习入门与 Scikit-Learn 实战
Python 机器学习入门与 Scikit-Learn 实战

面向机器学习初学者,以 Scikit-Learn 为核心工具,讲解机器学习基本概念(监督学习/无监督学习/模型评估)、数据预处理(标准化/归一化/缺失值填充/特征编码)、常用分类算法(逻辑回归/决策树/随机森林/SVM/KNN)、回归算法(线性回归/岭回归/Lasso)、无监督聚类(K-Means/DBSCAN)、交叉验证与超参数调优(GridSearch/RandomSearch)、混淆矩阵与 ROC/AUC 模型评估指标,帮助开发者

355

2026.04.24

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

2026.10.22

VibeKnow PPT讲解视频教程汇总
VibeKnow PPT讲解视频教程汇总

本专题介绍VibeKnow PPT讲解模式的素材准备、旁白生成、页面节奏、画面呈现与导出设置,适合课程和培训场景。

0

2026.10.22

VibeKnow PDF转视频教程合集
VibeKnow PDF转视频教程合集

本专题围绕VibeKnow的PDF转视频功能,讲解文件准备、内容解析、脚本生成、重点可视化及配音字幕检查方法。

0

2026.10.22

二狗PPT模板与视觉设计
二狗PPT模板与视觉设计

本专题介绍二狗PPT的职场模板、主题风格与页面版式,覆盖模板切换、色彩选择、内容匹配和正式汇报场景下的视觉优化方法。

0

2026.10.22

php漏洞修复方法
php漏洞修复方法

PHP漏洞聚合专题,持续整理PHP最新高危漏洞、CVE安全预警、受影响版本、自查命令及修复方案,覆盖PHP-FPM、Docker、Ubuntu与Linux服务器环境,帮助开发者快速完成漏洞排查、版本升级和安全加固。

0

2026.10.22

二狗PPT入门与基础操作
二狗PPT入门与基础操作

本专题整理二狗PPT从官网进入、输入主题、生成大纲到制作成稿的基础操作,帮助新手掌握AI一键生成职场PPT的完整流程。

0

2026.10.22

讯飞绘文AI配图与绘图模型合集
讯飞绘文AI配图与绘图模型合集

本专题讲解讯飞绘文AI配图与绘图2.0 Pro,覆盖提示词、画面比例、参考图、风格选择及图片优化,帮助用户制作匹配内容的视觉素材。

0

2026.10.22

讯飞绘文AI选题与热点策划合集
讯飞绘文AI选题与热点策划合集

本专题介绍讯飞绘文选题中心与AI选题方法,涵盖热点发现、赛道筛选、选题评估和内容规划,解决创作者找灵感难题。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn