69、实战:选择合适的数据集【用Python进行AI数据分析进阶教程】

用Python进行AI数据分析进阶教程69:

实战:选择合适的数据集


关键词:数据集选择、数据质量、特征工程、模型训练、Kaggle

摘要:本文围绕如何选择合适的数据集展开,重点介绍了在数据分析或建模任务中选择数据集的几个关键点,包括明确目标、关注数据质量和规模、考虑特征多样性。文章还提到了一些注意事项,如数据版权、清洗和划分。以Kaggle上的Titanic数据集为例,演示了从数据读取、清洗、特征工程到模型训练与评估的完整流程,帮助读者更好地理解和应用数据集选择的相关原则。

👉 欢迎订阅🔗
《用Python进行AI数据分析进阶教程》专栏
《AI大模型应用实践进阶教程》专栏
《Python编程知识集锦》专栏
《字节跳动旗下AI制作抖音视频》专栏
《智能辅助驾驶》专栏
《工具软件及IT技术集锦》专栏


一、关键点

1明确目标

在选择数据集之前,要清楚自己的分析或建模目标。例如,是进行分类任务(如垃圾邮件分类)、回归任务(如房价预测),还是聚类分析等。不同的目标需要不同类型的数据集。

2、数据质量

  • 完整性数据应尽量完整,缺失值过多会影响模型的准确性。
  • 准确性数据记录应准确无误,错误的数据会导致模型产生偏差。
  • 一致性数据的格式和编码应保持一致,避免出现混淆。

3数据集规模

  • 对于简单的模型或算法验证,可以选择较小的数据集。
  • 对于复杂的深度学习模型,通常需要大规模的数据集来避免过拟合。

4、特征多样性

  • 数据集中应包含足够多的特征,以便模型能够学习到数据的内在规律。同时,要注意特征之间的相关性,避免冗余特征。

二、注意点

1、数据版权

  • 确保使用的数据集符合相关的版权规定,避免侵权行为。在 Kaggle 上,大部分数据集都有明确的许可协议,使用前要仔细阅读。

2、数据清洗

  • 即使选择了高质量的数据集,也可能需要进行数据清洗,如处理缺失值、异常值等。

3、数据划分

  • 在进行模型训练时,要将数据集划分为训练集、验证集和测试集,以评估模型的泛化能力。

三、示例:使用Kaggle上的Titanic数据集进行生存预测

1、下载数据集

首先,你需要在Kaggle上下载Titanic数据集。可以通过Kaggle API 或者直接在网页上下载。这里假设你已经将 train.csv 和 test.csv 下载到本地。

2、示例代码

Python脚本

# 导入 pandas 库,用于数据的读取与处理
import pandas as pd

# 从 sklearn 导入 train_test_split,用于划分训练集和验证集
from sklearn.model_selection import train_test_split

# 从 sklearn 导入 LogisticRegression,用于构建逻辑回归分类模型
from sklearn.linear_model import LogisticRegression

# 从 sklearn 导入 accuracy_score,用于评估模型预测准确率
from sklearn.metrics import accuracy_score


# ==================== 数据读取 ====================
# 读取训练数据集 train.csv,并存储为 DataFrame
train_data = pd.read_csv('train.csv')

# 读取测试数据集 test.csv,并存储为 DataFrame
test_data = pd.read_csv('test.csv')


# ==================== 缺失值处理 ====================
# 使用 Age 列的均值填充训练集中该列的缺失值
train_data['Age'].fillna(train_data['Age'].mean(), inplace=True)

# 使用 Age 列的均值填充测试集中该列的缺失值
test_data['Age'].fillna(test_data['Age'].mean(), inplace=True)

# 使用 Embarked 列的众数(最常见值)填充训练集中的缺失值
train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)

# 使用 Fare 列的均值填充测试集中该列的缺失值
test_data['Fare'].fillna(test_data['Fare'].mean(), inplace=True)


# ==================== 特征选择 ====================
# 定义用于模型训练的特征名称列表
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']

# 提取训练集的输入特征 X
X = train_data[features]

# 提取训练集的目标变量 y(是否生还)
y = train_data['Survived']


# ==================== 类别特征编码(One-Hot)====================
# 对特征数据 X 进行 one-hot 编码,将类别变量转为数值形式
# prefix 参数为每列添加前缀以区分来源,drop_first=True 减少冗余(避免多重共线性)
X = pd.get_dummies(X, columns=['Sex', 'Embarked'], drop_first=True)


# ==================== 划分训练集与验证集 ====================
# 将数据划分为训练集(80%)和验证集(20%)
# random_state=42 确保结果可复现
X_train, X_val, y_train, y_val = train_test_split(
    X, y, 
    test_size=0.2, 
    random_state=42
)


# ==================== 模型训练 ====================
# 创建逻辑回归模型实例
model = LogisticRegression(max_iter=1000, random_state=42)

# 使用训练数据拟合模型(开始训练)
model.fit(X_train, y_train)


# ==================== 模型预测 ====================
# 使用训练好的模型对验证集进行预测
y_pred = model.predict(X_val)


# ==================== 模型评估 ====================
# 计算预测结果的准确率(正确预测的比例)
accuracy = accuracy_score(y_val, y_pred)

# 输出模型在验证集上的准确率
print(f"模型准确率: {accuracy:.4f}")

输出 / 打印结果分析

运行上述代码后,会打印出模型在验证集上的准确率,示例输出如下:

plaintext

模型准确率: 0.78

  • 这里的 0.78 表示模型在验证集上的准确率为 78%。实际的准确率会因数据集和随机数种子的不同而有所差异。一般来说,准确率越高,说明模型的性能越好,但还需要结合具体的业务场景和数据特点来综合评估模型。

重点语句解读

以下是对这段代码中重点语句的逐条解读,帮助你深入理解每一步的作用和背后的原理:


📌 1. 导入库

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

解读:

  • pandas:用于数据读取、清洗和处理(如 CSV 文件操作、DataFrame 操作)。
  • train_test_split:将数据集划分为训练集和验证集,便于评估模型性能。
  • LogisticRegression:逻辑回归模型,适用于二分类问题(如“是否生还”)。
  • accuracy_score:计算预测值与真实值之间的准确率,是分类任务常用的评价指标。

✅ 关键点:这些是机器学习流程中最基础也是最重要的工具。


📌 2. 数据读取

train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')

解读:

  • 使用 pd.read_csv() 读取结构化数据文件(CSV 格式),返回一个 DataFrame
  • train.csv 包含特征和标签(Survived),用于训练模型。
  • test.csv 通常不包含标签,用于最终提交预测结果。

⚠️ 注意:路径必须正确,文件需在当前工作目录下,否则会报错 FileNotFoundError


📌 3. 缺失值处理

train_data['Age'].fillna(train_data['Age'].mean(), inplace=True)
test_data['Age'].fillna(test_data['Age'].mean(), inplace=True)

train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)

test_data['Fare'].fillna(test_data['Fare'].mean(), inplace=True)

解读:

  • fillna() 填充缺失值(NaN):
    • Age:用均值填充(数值型变量适合用均值/中位数)。
    • Embarked:用众数.mode()[0])填充(类别型变量适合用众数)。
    • Fare:测试集中可能有缺失,也用均值填充。
  • inplace=True 表示原地修改,不生成新对象。

✅ 为什么这样做?
大多数机器学习算法不能处理缺失值,必须提前填补。选择均值或众数是一种简单有效的策略(尤其在数据缺失较少时)。


📌 4. 特征选择

features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
X = train_data[features]
y = train_data['Survived']

解读:

  • features:选定用于建模的输入变量(特征)。
    • Pclass: 船票等级(1/2/3),社会经济地位代理。
    • Sex: 性别,对生存影响显著。
    • Age: 年龄。
    • SibSp / Parch: 家庭成员数量。
    • Fare: 票价。
    • Embarked: 登船港口。
  • X:特征矩阵(输入变量)。
  • y:目标变量(输出标签,即是否生还,0=死亡,1=生还)。

✅ 这是特征工程的第一步:从原始数据中挑选出我们认为与目标相关的特征。


📌 5. 类别特征编码(One-Hot 编码)

X = pd.get_dummies(X, columns=['Sex', 'Embarked'], drop_first=True)

解读:

  • pd.get_dummies():将分类变量转换为多个二进制列(哑变量)。
    • 例如:Sex 原为 male/female → 转换为 Sex_male(0或1),若 drop_first=True,则只保留一个列。
    • Embarked(C=Cherbourg, Q=Queenstown, S=Southampton)→ 生成两列(如 Embarked_Q, Embarked_S),C作为基准被省略。
  • drop_first=True:防止多重共线性(dummy variable trap),提升模型稳定性。

✅ 为什么要做 One-Hot?
机器学习模型无法直接理解字符串类别(如 “male”),必须转为数值形式;且不能简单赋整数(如 male=0, female=1),因为这隐含“大小关系”,而 One-Hot 可避免这种误导。


📌 6. 划分训练集与验证集

X_train, X_val, y_train, y_val = train_test_split(
    X, y, 
    test_size=0.2, 
    random_state=42
)

解读:

  • 将原始训练数据按 80%(训练):20%(验证) 分割。
  • test_size=0.2:验证集占比 20%。
  • random_state=42:设置随机种子,确保每次运行结果一致(可复现性)。

✅ 目的:在不使用测试集的情况下评估模型性能,防止过拟合。


📌 7. 模型训练

model = LogisticRegression(max_iter=1000, random_state=42)
model.fit(X_train, y_train)

解读:

  • 创建逻辑回归模型实例:
    • max_iter=1000:增加最大迭代次数,防止因收敛慢而导致警告或失败(尤其当数据未标准化时)。
    • random_state=42:保证模型初始化一致,结果可复现。
  • .fit():使用训练数据拟合模型,即通过优化算法学习特征与标签之间的关系。

✅ 逻辑回归本质:找到一组权重,使得输入特征的线性组合经过 Sigmoid 函数后能最好地预测概率。


📌 8. 模型预测

y_pred = model.predict(X_val)

解读:

  • 使用训练好的模型对验证集特征 X_val 进行预测。
  • 输出 y_pred 是一个由 0 和 1 组成的数组,表示每个样本的预测生存状态。

✅ 注意:这是硬分类预测(直接输出类别),也可以用 predict_proba() 得到概率。


📌 9. 模型评估

accuracy = accuracy_score(y_val, y_pred)
print(f"模型准确率: {accuracy:.4f}")

解读:

  • accuracy_score():计算预测值 y_pred 与真实值 y_val 的匹配比例。
    • 公式:正确预测数 / 总样本数
  • :.4f:格式化输出,保留四位小数。

✅ 优点:直观易懂。
⚠️ 局限:在类别不平衡时可能误导(比如 95% 死亡,模型全猜“死亡”也能得 95% 准确率)。

——The END——


🔗 欢迎订阅专栏

序号专栏名称说明
1用Python进行AI数据分析进阶教程《用Python进行AI数据分析进阶教程》专栏
2AI大模型应用实践进阶教程《AI大模型应用实践进阶教程》专栏
3Python编程知识集锦《Python编程知识集锦》专栏
4字节跳动旗下AI制作抖音视频《字节跳动旗下AI制作抖音视频》专栏
5智能辅助驾驶《智能辅助驾驶》专栏
6工具软件及IT技术集锦《工具软件及IT技术集锦》专栏

👉 关注我 @理工男大辉郎 获取实时更新

欢迎关注、收藏或转发。
敬请关注 我的
微信搜索公众号:cnFuJH
CSDN博客:理工男大辉郎
抖音号:31580422589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理工男大辉郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值