文章目录
- 第2周:从数据到模型
- [案例:Titanic 生存预测](#案例:Titanic 生存预测)
- 二、认识数据
- 三、明确机器学习问题
-
- [1. 什么是样本?](#1. 什么是样本?)
- [2. 什么是特征?](#2. 什么是特征?)
- [3. 什么是标签?](#3. 什么是标签?)
- 四、数据读取与观察
- 五、数据探索分析(EDA)
- 分析1:整体生存比例
- 分析2:性别是否影响生存?
- 分析3:船票等级影响
- 分析4:年龄分析
- 分析5:家庭因素
- 六、数据清洗
- 七、特征工程
- 八、选择训练特征
- 九、划分训练集和测试集
- 十、本周实践任务
https://www.kaggle.com/code/alexisbcook/titanic-tutorial
拿到数据 → 理解数据 → 清洗数据 → 分析规律 → 选择特征 → 准备模型
第2周的重点不是训练复杂模型,而是让学生理解:
一个机器学习项目开始之前,80%的工作是在处理和理解数据。
第2周:从数据到模型
案例:Titanic 生存预测
一、案例背景
1912年泰坦尼克号沉船事故。
目标:
根据乘客信息,预测:
一个乘客是否能够生存。
这是一个典型的:
监督学习 → 二分类问题
二、认识数据
数据表:
Titanic.csv
每一行:
代表一个乘客
每一列:
代表一个特征
例如:
| 字段 | 含义 | 类型 |
|---|---|---|
| PassengerId | 乘客编号 | 编号 |
| Survived | 是否生存 | 标签 |
| Pclass | 船票等级 | 类别 |
| Name | 姓名 | 文本 |
| Sex | 性别 | 类别 |
| Age | 年龄 | 数值 |
| SibSp | 兄弟姐妹数量 | 数值 |
| Parch | 父母子女数量 | 数值 |
| Ticket | 船票编号 | 文本 |
| Fare | 票价 | 数值 |
| Cabin | 船舱号 | 文本 |
| Embarked | 登船港口 | 类别 |
三、明确机器学习问题
1. 什么是样本?
一名乘客:
例如:
乘客1:
年龄:22
性别:女
船票等级:1等
票价:71.2
结果:
生存
这就是一个样本。
2. 什么是特征?
模型输入的信息。
例如:
输入:
年龄
性别
票价
船票等级
这些叫:
Feature(特征)
3. 什么是标签?
模型要预测的答案。
这里:
Survived
取值:
0 = 死亡
1 = 生存
最终:
机器学习任务:
特征X:
年龄
性别
等级
票价
家庭人数
↓
模型
↓
标签Y:
是否生存
四、数据读取与观察
学习工具:
Python:
- pandas
- numpy
代码:
python
import pandas as pd
data = pd.read_csv("titanic.csv")
data.head()
查看前5行:
目的:
了解数据长什么样。
查看数据规模:
python
data.shape
例如:
结果:
891行
12列
含义:
891个乘客样本。
查看字段:
python
data.info()
发现:
问题:
- Age有缺失
- Cabin大量缺失
- Embarked少量缺失
引出:
数据清洗的重要性
五、数据探索分析(EDA)
目标:
回答几个问题:
什么因素影响生存?
分析1:整体生存比例
查看:
python
data["Survived"].value_counts()
例如:
结果:
死亡:549
生存:342
计算比例:
发现:
大约38%的乘客生存。
学习:
类别分布。
分析2:性别是否影响生存?
问题:
男性和女性生存率是否不同?
代码:
python
data.groupby("Sex")["Survived"].mean()
结果类似:
| 性别 | 生存率 |
|---|---|
| female | 74% |
| male | 19% |
发现:
性别可能是重要特征。
引出:
特征选择思想
分析3:船票等级影响
分析:
python
data.groupby("Pclass")["Survived"].mean()
结果:
| 等级 | 生存率 |
|---|---|
| 1等 | 较高 |
| 2等 | 中等 |
| 3等 | 较低 |
发现:
社会经济水平可能影响生存。
分析4:年龄分析
查看:
python
data["Age"].describe()
发现:
年龄存在:
- 最大值
- 最小值
- 平均值
绘制:
年龄分布。
学习:
数据分布。
分析5:家庭因素
创建家庭人数:
公式:
FamilySize
=
SibSp
+
Parch
+
1
例如:
一个人:
0+0+1=1
一家五口:
2+2+1=5
分析:
家庭人数是否影响生存。
六、数据清洗
真实数据不能直接训练。
需要处理:
1.缺失值处理
查看:
python
data.isnull().sum()
发现:
Age:
缺失
处理:
填充平均年龄:
python
data["Age"].fillna(
data["Age"].mean()
)
2.类别数据转换
机器不能理解:
male
female
转换:
male=0
female=1
方法:
Label Encoding
3.删除无用字段
例如:
PassengerId
原因:
只是编号,没有预测意义。
删除:
python
drop()
七、特征工程
这是机器学习重要思想。
原始数据:
SibSp
Parch
创造新特征:
FamilySize
例如:
新增:
| 特征 | 意义 |
|---|---|
| FamilySize | 家庭规模 |
| IsAlone | 是否独自旅行 |
| Title | 姓名中的称谓 |
八、选择训练特征
最终选择:
输入X:
Pclass
Sex
Age
Fare
FamilySize
Embarked
标签Y:
Survived
形成:
X:
乘客信息
↓
模型
↓
Y:
是否生存
九、划分训练集和测试集
为什么?
不能用训练数据评价自己。
划分:
例如:
80%
训练模型
20%
测试模型
代码:
python
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=
train_test_split(
X,
y,
test_size=0.2
)
理解:
训练集:
学习规律
测试集:
检查是否真的学会。
十、本周实践任务
实验:
完成Titanic数据分析报告。
学生提交:
1.数据理解
回答:
- 有多少乘客?
- 有哪些字段?
- 哪些字段缺失?
2.数据分析
完成:
- 男女生存率比较
- 船票等级比较
- 年龄分布分析
- 家庭人数分析
3.数据处理
完成:
- 缺失值处理
- 类别转换
- 特征选择
4.准备模型数据
输出:
X_train
X_test
y_train
y_test
为第3周:
线性模型训练
做准备。
第2周最终应该理解:
现实问题
↓
数据
↓
样本
↓
特征
↓
标签
↓
清洗数据
↓
发现规律
↓
准备模型