帕尔默企鹅数据集测试
今天导师在群里分享了一个链接 23 个优秀的机器学习训练公共数据集 ,看了一下,决定对帕尔默企鹅数据集(Palmer Archipelago (Antarctica) penguin data)做一些分析。
数据集介绍
数据集是在 Kaggle 下载的,包含两个文件:
- penguins_lter.csv:原始数据文件;
- penguins_size.csv:特征约简后的数据文件;
本次分析使用的是简化后的数据集 penguins_size.csv。数据集共 344 个样本,特征信息如下表:
| 特征 | 数据类型 | 说明 |
|---|---|---|
| species | 离散值 | 标签信息,值为 Adelie|Chinstrap|Gentoo 之一 |
| island | 离散值 | 岛屿,值为 Torgersen|Biscoe|Dream 之一 |
| culmen_length_mm | 连续值 | 喙的长度(mm) |
| culmen_depth_mm | 连续值 | 喙的高度(mm) |
| flipper_length_mm | 连续值 | 脚蹼长度(mm) |
| body_mass_g | 连续值 | 体重(克) |
| sex | 离散值 | 性别,值为 MALE| FEMALE 之一 |
数据集包含缺失数据,用 NA 表示特征值缺失,其中第 337 样本的 sex 特征值为“.”,在此也认为是缺失值。
使用 pandas 查看数据集的统计信息:
| |
显然,统计信息中并不包含离散特征。
缺失数据
对数据集的缺失数据进行一次统计。
| |
使用 missingno 包来查看缺失数据分布:

综上,得到以下结论:
- 存在两个样本的 culmen_length_mm、culmen_depth_mm、flipper_length_mm、body_mass_g 和 sex 特征值缺失,编号分别为 3 和 339(以 0 为开始计数);
- 缺失值主要集中在 sex 特征中,共有 11 个样本存在缺失;
预测企鹅性别
预测企鹅性别中,sex 为目标特征,所以先计算连续型特征与目标特征的 Point-biserial 相关系数 $r_{pb} (r_{pb} \in [0, 1])$。
| |
| |
$r_{pb}$ 值为负,表示当目标特征 sex 为 0,特征(culmen_length_mm、culmen_depth_mm、flipper_length_mm、body_mass_g)趋向高于 sex 为 1 时对应的值。同时,4 个 p 值均小于 0.05,所以在统计意义上是显著的。
然后计算离散型特征与目标特征的相关性,使用卡方检测进行判断,计算过程可看 《卡方检验 - 检验特征对是否相关》 。
| |
从两对特征的 p 值可知,特征 species、island 与目标特征 sex 的相关性并不显著,所以排除相关。
构建预测模型
从前文的相关性计算可知,目标特征 sex 与特征 species、island 不相关,但是与特征 culmen_length_mm、culmen_depth_mm、flipper_length_mm、body_mass_g 的相关性显著,所以在构建预测模型中不考虑特征 species 和 island。
下面使用支持向量机(Support Vector Machine,SVM)对未知目标特征进行预测,采用 10-Fold 进行交叉验证:
| |
| |
| |
上述完成了以下几件事:
- 将特征 culmen_length_mm、culmen_depth_mm、flipper_length_mm、body_mass_g 作为输入,特征 sex 作为预测值;
- 对输入做标准化处理;
- 采用 10-Fold 交叉验证,输出平均准确率为 0.904,标准差为 0.047;
- 训练模型;
- 预测目标特征;
预测结果如下表:
| 编号 | sex 预测值 |
|---|---|
| 8 | MALE |
| 9 | MALE |
| 10 | MALE |
| 11 | MALE |
| 47 | MALE |
| 246 | MALE |
| 286 | MALE |
| 324 | MALE |
| 336 | MALE |
从预测结果来看,怎么都是 MALE,本能地选择不相信模型结果 -|_|-。
完整代码
| |
总结
- 离散型特征与连续型特征的相关性可以通过 Point-biserial 相关系数进行衡量;
- 根据卡方检验判断离散型特征间是否相关;
- 预测模型为 SVM,采用 10-Fold 交叉验证的方式,预测出目标特征 sex;