用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数据分析进阶教程》专栏 |
2 | AI大模型应用实践进阶教程 | 《AI大模型应用实践进阶教程》专栏 |
3 | Python编程知识集锦 | 《Python编程知识集锦》专栏 |
4 | 字节跳动旗下AI制作抖音视频 | 《字节跳动旗下AI制作抖音视频》专栏 |
5 | 智能辅助驾驶 | 《智能辅助驾驶》专栏 |
6 | 工具软件及IT技术集锦 | 《工具软件及IT技术集锦》专栏 |
👉 关注我 @理工男大辉郎 获取实时更新
欢迎关注、收藏或转发。
敬请关注 我的
微信搜索公众号:cnFuJH
CSDN博客:理工男大辉郎
抖音号:31580422589