✅ 今日目标

  • 掌握建模前常见准备步骤
  • 学会使用 train_test_split() 将数据划分为训练集和测试集
  • 理解特征(X)与标签(y)的区分
  • 学习常见建模流程的输入要求(格式、维度)

📘 一、建模前准备流程概览

  1. 数据清洗(缺失值、异常值处理)✅
  2. 特征工程(编码、标准化、派生)✅
  3. 数据集划分(训练 / 测试)✅
  4. 模型选择与训练(下一阶段)
  5. 模型评估与调参

📚 二、提取特征列与标签列

import pandas as pd

df = pd.read_csv("data/processed/students_featured.csv")

# 特征列(可以自定义选择)
X = df[["成绩_标准化", "性别_女", "性别_男", "是否及格_数值"]]

# 标签列(以是否及格为预测目标)
y = df["是否及格_数值"]

📘 三、划分训练集与测试集

from sklearn.model_selection import train_test_split

# 按 80% 训练 / 20% 测试,随机种子保持一致性
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

print("训练集样本数:", len(X_train))
print("测试集样本数:", len(X_test))

📘 四、保存拆分结果(供建模使用)

X_train.to_csv("data/model/X_train.csv", index=False)
X_test.to_csv("data/model/X_test.csv", index=False)
y_train.to_csv("data/model/y_train.csv", index=False)
y_test.to_csv("data/model/y_test.csv", index=False)

📊 可选探索:类别平衡性检查

print("训练集是否及格分布:")
print(y_train.value_counts(normalize=True))

print("测试集是否及格分布:")
print(y_test.value_counts(normalize=True))

🧪 今日练习建议

  1. 从增强后的数据中提取合适的特征列(X)和目标列(y)

  2. 使用 train_test_split 按比例划分训练 / 测试集

  3. 将结果分别保存到 CSV 文件

  4. 检查样本比例是否合理、是否存在类别不平衡问题(特别是分类任务)

    import pandas as pd
    from sklearn.model_selection import train_test_split
    import os
    
    # 1. 加载数据
    input_path = "data/processed/students_featured.csv"
    if not os.path.exists(input_path):
        raise FileNotFoundError("❌ 请先运行 feature_engineering.py 生成 students_featured.csv")
    
    df = pd.read_csv(input_path)
    print("✅ 已加载数据:", input_path)
    print(df)
    
    # 2. 提取特征列和标签列
    feature_cols = ["成绩_标准化", "性别_女", "性别_男", "是否及格_数值"]
    label_col = "是否及格_数值"
    
    X = df[feature_cols]
    y = df[label_col]
    
    print("\n🔍 特征维度:", X.shape)
    print("🔍 标签维度:", y.shape)
    
    # 3. 划分训练集和测试集(80% / 20%)
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=42
    )
    
    print(f"\n📦 拆分完成:训练集 {len(X_train)} 条,测试集 {len(X_test)} 条")
    
    # 4. 可选:检查类别平衡性
    print("\n📊 训练集类别分布:")
    print(y_train.value_counts(normalize=True))
    
    print("\n📊 测试集类别分布:")
    print(y_test.value_counts(normalize=True))
    
    # 5. 保存拆分结果
    os.makedirs("data/model", exist_ok=True)
    X_train.to_csv("data/model/X_train.csv", index=False)
    X_test.to_csv("data/model/X_test.csv", index=False)
    y_train.to_csv("data/model/y_train.csv", index=False)
    y_test.to_csv("data/model/y_test.csv", index=False)
    
    print("\n✅ 拆分后的数据已保存至 data/model/ 文件夹")
    

    运行输出:

✅ 已加载数据: data/processed/students_featured.csv
   姓名    成绩   是否及格  性别编码   性别_女   性别_男    成绩_标准化    成绩_归一化  是否及格_数值 成绩等级        考试时间  考试月  考试周      考试星期
0  张三  88.0   True     1  False   True  1.166997  1.000000        12024-06-01    6   22  Saturday
1  李四  78.0   True     0   True  False  0.214346  0.655172        12024-06-01    6   22  Saturday
2  王五  59.0  False     1  False   True -1.595690  0.000000        0  不及格  2024-06-01    6   22  Saturday
3  田七  78.0   True     0   True  False  0.214346  0.655172        12024-06-01    6   22  Saturday

🔍 特征维度: (4, 4)
🔍 标签维度: (4,)

📦 拆分完成:训练集 3 条,测试集 1 条

📊 训练集类别分布:
是否及格_数值
1    0.666667
0    0.333333
📊 测试集类别分布:
是否及格_数值
1    1.0
✅ 拆分后的数据已保存至 data/model/ 文件夹

在这里插入图片描述
x测试集:
在这里插入图片描述
x训练集:
在这里插入图片描述
y测试集:
在这里插入图片描述
y训练集:
在这里插入图片描述


🧾 今日总结

步骤 工具 说明
特征提取 Pandas DataFrame 自定义特征列
数据拆分 train_test_split 来自 sklearn
保存格式 CSV 便于后续建模使用
类别分析 value_counts() 检查是否严重偏斜
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐