机器学习实战第2天:幸存者预测任务

简介: 机器学习实战第2天:幸存者预测任务



一.任务描述

在泰坦尼克号灾难中,了解乘客生存状况是一个重要而挑战性的任务。这个任务的目标是通过分析乘客的各种特征,构建预测模型,以预测一个乘客在沉船事件中是否幸存。数据集提供了关于每位乘客的多个方面的信息,如性别、年龄、客舱等级等。

通过利用这些特征,机器学习算法可以学习模式,从而推断出哪些因素对于乘客生存的影响最为显著。例如,可能发现女性、儿童或者在更高等级客舱的乘客更有可能幸存。通过对模型进行训练和优化,可以得到一个能够根据新的乘客信息进行幸存预测的工具。

这个任务的重要性不仅在于还原历史事件,更在于提供了一个实际应用背景下的机器学习问题。通过探索这个问题,可以深入了解特征之间的关系、模型选择以及优化方法,从而拓展对机器学习在实际场景中应用的认识。

二.数据集描述

获取数据集: 幸存者预测训练集

以下是对数据集中的特征的描述

  1. PassengerId(乘客ID): 每个乘客的唯一标识符。
  2. Survived(生存情况): 乘客是否存活,通常是二进制值,1表示存活,0表示未存活。
  3. Pclass(客舱等级): 乘客所在的客舱等级,通常分为1、2、3等级,反映了社会经济地位。
  4. Name(姓名): 乘客的姓名。
  5. Sex(性别): 乘客的性别,可能是"male"(男性)或"female"(女性)。
  6. Age(年龄): 乘客的年龄。
  7. SibSp(同伴/兄弟姐妹的数量): 乘客在船上有多少兄弟姐妹或配偶。
  8. Parch(父母/子女的数量): 乘客在船上有多少父母或子女。
  9. Ticket(船票号码): 乘客的船票号码。
  10. Fare(票价): 乘客支付的票价。
  11. Cabin(客舱号码): 乘客所在的客舱号码。
  12. Embarked(登船港口): 乘客登船的港口,可能是"C"(Cherbourg)、"Q"(Queenstown)或"S"(Southampton)。

这些特征提供了关于每位乘客的各种信息,可以用于分析和预测乘客在泰坦尼克号上的生存情况。通过构建机器学习模型来预测某位乘客是否在沉船事件中幸存下来。

三.主要代码

为了精简说明,(2)-(4)仅为主要部分,请自行导入库

(1)主要代码库的说明与导入方法

  1. pandas (import pandas as pd):
    Pandas是一个用于数据处理和分析的强大库,提供了数据结构(如DataFrame和Series)和数据操作工具,使得在Python中进行数据清理、转换和分析变得更加方便。
  2. matplotlib.pyplot (import matplotlib.pyplot as plt):
    Matplotlib是一个用于绘制图表和可视化数据的2D绘图库。pyplot是Matplotlib的子模块,提供了类似于MATLAB的绘图接口,用于创建图表、直方图、散点图等。
  3. sklearn.model_selection (from sklearn.model_selection import train_test_split):
    train_test_split是scikit-learn中用于划分数据集为训练集和测试集的函数。它能够随机将数据划分为两个子集,是机器学习中常用的数据准备步骤之一。
  4. RandomForestClassifier (from sklearn.ensemble import RandomForestClassifier):  RandomForestClassifier是 scikit-learn 中的随机森林分类器,是一种基于集成学习的算法。它通过构建多个决策树并综合它们的预测结果来提高模型的性能和鲁棒性。随机森林广泛用于分类和回归问题。它在处理大量数据、高维特征和复杂模式时表现良好,通常被用于构建强健的预测模型。
  5. sklearn.metrics (from sklearn import metrics):
    metrics模块包含了许多用于评估模型性能的指标,例如准确性、精确度、召回率、F1分数等。这些指标可用于评估分类、回归和聚类等任务的模型性能。

(2)数据预处理

1.查看数据基本信息

注意这里的文件地址要改成你自己的,不然运行不了

# 导入文件
survive = pd.read_csv("datasets/titanic/train.csv")
 
# 查看数据列名称
print(survive.columns)
 
# 查看数据集格式
print(survive.shape)

2.通过数据集的描述,我们可以剔除一些无关的特征,例如乘客的姓名,登船的港口,船票号码,客舱号码这些看起来与是否能存活下来无关的特征

# 删除无关特征
survive = survive.drop(columns=["Name", "Ticket", "Embarked", "Cabin", "PassengersId"])

3.查看数据是否有空值

# 打印所有特征的空值数量
print(survive.isnull().sum())
 
# 删除含有空值的行
survive = survive.dropna()

可以看到Age列有177个空值,我们将这些有缺失的行删除

4.将字符特征转化为数字特征

字符数据是无法被我们的机器学习模型学习的,我们必须将它们转化为数字特征,本数据中性别只有两类,所以我们将它们变为0和1

survive["Sex"] = survive["Sex"].replace({"male": 1, "female": 0})

5.划分训练集与测试集

将数据分为训练集与测试集,测试集规模为20%,训练数据删除"Survived"列,将结果设置为"Survived"列

划分训练集与测试集
train, test = train_test_split(survive, test_size=0.2)
 
train_x = train.drop(columns="Survived")
train_y = train.Survived
test_x = test.drop(columns="Survived")
test_y = test.Survived

(3)模型训练

使用随机森林模型进行训练,每次抽样100给样本,每棵树最大深度设置为10

# 构建随机森林模型
model = RandomForestClassifier(n_estimators=100, max_depth=10)
model.fit(train_x, train_y)

(4)模型预测与性能评估

使用metric的准确率作为模型指标

prediction = model.predict(test_x)
print('The accuracy of the RandomForest is:', metrics.accuracy_score(prediction, test_y))

准确率大概为82%,还不错!

(5)除特征工程外的完整代码

这里是舍弃了一些寻找特征等工作的完整模型训练代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
 
 
survive = pd.read_csv("datasets/titanic/train.csv")
 
survive = survive.drop(columns=["Name", "Ticket", "Embarked", "Cabin", "PassengerId"])
 
survive = survive.dropna()
 
survive["Sex"] = survive["Sex"].replace({"male": 1, "female": 0})
 
 
train, test = train_test_split(survive, test_size=0.2)
 
train_x = train.drop(columns="Survived")
train_y = train.Survived
test_x = test.drop(columns="Survived")
test_y = test.Survived
 
 
model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
model.fit(train_x, train_y)
prediction = model.predict(test_x)
print('The accuracy of the RandomForest is:', metrics.accuracy_score(prediction, test_y))

四.本章总结

  • 根据任务特点挖掘重要特征
  • 如何去除无用的特征
  • 数据中有空缺值如何处理
  • 如何将字符特征转化为数字
  • 随机森林模型的应用

当然,也可以自己处理特征,自己选择模型,调整参数,看看会不会获得更好的结果

感谢阅读,觉得有用的话就订阅下本专栏吧

相关文章
|
19天前
|
机器学习/深度学习 自然语言处理
在模型训练中,如何平衡通用性和特定任务的需求
在模型训练中平衡通用性和特定任务需求是关键挑战。策略包括预训练与微调、多任务学习、结合任务无关与相关特征、选择适当架构、领域适应、数据增强、超参数调整、注意力机制、层级化训练、模型集成、利用中间表示、持续评估、避免过拟合、考虑伦理偏见、优化资源效率及收集用户反馈。这些方法有助于训练出既通用又专业的模型。
|
28天前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
1月前
|
机器学习/深度学习 TensorFlow API
机器学习实战:TensorFlow在图像识别中的应用探索
【10月更文挑战第28天】随着深度学习技术的发展,图像识别取得了显著进步。TensorFlow作为Google开源的机器学习框架,凭借其强大的功能和灵活的API,在图像识别任务中广泛应用。本文通过实战案例,探讨TensorFlow在图像识别中的优势与挑战,展示如何使用TensorFlow构建和训练卷积神经网络(CNN),并评估模型的性能。尽管面临学习曲线和资源消耗等挑战,TensorFlow仍展现出广阔的应用前景。
59 5
|
23天前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
62 0
|
25天前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
36 0
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
91 2
|
2月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
113 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
56 5
|
2月前
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
162 3
|
2月前
|
机器学习/深度学习 算法 数据可视化
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧2
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
43 1