利用机器学习 - Python 进行飞船泰坦尼克号项目2025年3月17日 | 阅读11分钟 飞船泰坦尼克号问题是基础泰坦尼克号生存问题的进阶版本,是机器学习爱好者必须面对并预测一个人生存机会的一次挑战。 飞船泰坦尼克号项目问题陈述在此项目中,一艘飞船载有几个人去太空旅行。由于技术问题,许多人被传送到另一个星球。利用各种机器学习算法,我们需要预测将被传送到另一个星球还是留在同一艘飞船上的人。 解决飞船泰坦尼克号问题的方法步骤 1:库和数据集 第一步是导入所需的库,包括用于构建和分析机器学习模型的numpy、pandas、matplotlib、sklearn 等。然后,我们将加载飞船泰坦尼克号问题的数据集并将其存储在 pandas 数据框中。 步骤 2:数据清洗 加载数据集后,我们将清洗数据。数据清洗包括检查数据中的空值,用某些值(可能是其他值的平均值或 0)替换空值,并在继续之前检查异常值。我们可以借助图表分析数据。可以使用 describe() 方法检查空值。 步骤 3:特征工程 现在,我们将选择特征来构建模型并预测结果。我们将通过比较不同的特征来收集重要信息。 步骤 4:探索性数据分析 我们将进行探索性数据分析,研究不同特征之间的关系。我们将使用饼图和条形图等不同图表可视化这些关系,以研究相关性。 步骤 5:拆分数据集 我们将使用train_test_split 模型将数据集拆分为训练和测试数据集,并使用 Standard Scaler 对数据进行归一化。 步骤 6:模型训练 现在,我们将使用逻辑回归、SVC 和 XGBClassifier 等不同的机器学习算法训练我们的数据集,并检查它们的准确性。 步骤 7:选择最佳模型 我们将选择准确率最高的模型。 步骤 8:混淆矩阵和验证数据 使用性能最佳的机器学习模型,我们将打印混淆矩阵和验证数据。 步骤 9:预测 使用创建的机器学习模型,我们可以预测该人将被传送到新星球还是留在原地。 现在,让我们开始实施飞船泰坦尼克号问题。
我们已经导入了所需的库,如 numpy、pandas、matplotlib、sklearn 包,如 train_test_split、不同的算法等。 现在我们将加载数据集。 输出 ![]() 我们已经读取了数据集并将其存储在数据框中。我们使用 head() 函数打印了前 5 条记录。 数据集的数据预处理输出 (8693, 18) 我们将更深入地研究数据。 输出
使用shape() 函数,我们可以检查数据集的行数和列数。info() 函数将告诉我们数据集中是否有任何空值,以及每列的数据类型。 查看上面的输出,我们可以看到数据集中有很多空值。 现在我们将使用 describe() 方法获得数据集的描述性统计视图。它提供了计数、唯一值、最常见值和频率等信息。 输出 ![]() 替换空值的最简单方法之一是,对于连续数据,用均值填充空值;对于分类数据,用众数填充空值。但是,在这种情况下,我们将尝试检查独立特征之间的关系,然后利用它们巧妙地填充空值。 输出 ![]() clm = data.loc[:,'RoomService':'VRDeck'].columns data.groupby('VIP')[clm].mean() 输出 ![]() 我们可以看到,VIP 花费比非 VIP 人员更多。 data.groupby('CryoSleep')[clm].mean() 输出 CryoSleep 中的乘客在航程中被限制在自己的房间里,并处于昏迷状态。因此,他们无法在船上设施上花费金钱。因此,当 CryoSleep 等于 True 时,我们可以输入 0。 我们将使用 VIP 及其费用之间的关系来替换空值。 我们已经用不同的值填充了 VIP 列中的空值。 在观察了异常值之后,我们将用均值填充年龄空值。为此,我们将绘制箱线图。 输出 ![]() 通过这个箱线图,我们可以计算出均值,然后替换空值。 由于我们已经填充了年龄值的空值。现在我们将再次检查是否有空值。 输出 ![]() 从这个图中,我们注意到了更多的空值。让我们替换它们。 输出 0 最后,我们从数据集中删除了所有空值。 特征工程由于我们已经预处理了数据,现在是时候选择特征并将数据添加到其中了。我们将添加一些特征以从数据中获得更多见解并进行更准确的预测。 输出 ![]() 我们可以看到有些特征包含组合数据。我们将分离数据并从中创建一些新特征。 我们将 PassengerID 特征拆分为 RoomNo 和 PassengerNo。 我们将 Cabin 特征拆分为三个新列 F1、F2 和 F3。并删除了 Cabin 列。 我们将 RoomService、FoodCourt 等不同列合并到 LeseaureBill 中。 探索性数据分析我们已经转换了不同的特征。现在,是时候可视化和分析数据了。 输出 ![]() 从这个饼图中,我们可以看到两个类别具有相等的分布。因此,训练模型将很容易。 输出 ![]() 输出 ![]() 5 行 × 22 列 输出 ![]() 训练模型输出 ((7823, 21), (870, 21)) 我们将数据集拆分为训练和测试数据集,其中 90% 是训练数据,10% 是测试数据。 我们已经使用 Standard Scaler 对数据集进行了缩放。 现在,我们将检查不同机器学习模型的训练和验证准确性。 输出 LogisticRegression() : Training Accuracy : 0.878723950049363 Validation Accuracy : 0.8617140797897147 XGBClassifier(base_score=None, booster=None, callbacks=None, colsample_bylevel=None, colsample_bynode=None, colsample_bytree=None, early_stopping_rounds=None, enable_categorical=False, eval_metric=None, feature_types=None, gamma=None, gpu_id=None, grow_policy=None, importance_type=None, interaction_constraints=None, learning_rate=None, max_bin=None, max_cat_threshold=None, max_cat_to_onehot=None, max_delta_step=None, max_depth=None, max_leaves=None, min_child_weight=None, missing=nan, monotone_constraints=None, n_estimators=100, n_jobs=None, num_parallel_tree=None, predictor=None, random_state=None, ...) : Training Accuracy : 0.9891161010670031 Validation Accuracy : 0.8838555136303896 SVC(probability=True) : Training Accuracy : 0.9049843360030313 Validation Accuracy : 0.8660093483698648 我们可以看到,逻辑回归具有87% 的训练准确率和 86% 的验证准确率。XGBClassifier 具有98% 的训练准确率和 88% 的验证准确率。SVC 具有90% 的训练准确率和 86% 的验证准确率。XGB 分类器具有最高的准确率,因此最适合该模型。 评估模型在三个机器学习模型中,XGB 分类器表现最佳。现在我们将创建一个混淆矩阵并打印预测结果。 输出 array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]) 预测 0 表示 False,1 表示 True。 输出 ![]() 输出 precision recall f1-score support 0 0.82 0.79 0.80 458 1 0.78 0.80 0.79 412 accuracy 0.80 870 macro avg 0.80 0.80 0.80 870 weighted avg 0.80 0.80 0.80 870 下一话题Python 中的朴素贝叶斯算法 |
我们请求您订阅我们的新闻通讯以获取最新更新。