我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

对这个泰坦尼克数据集已经反复分析了好多次了,在本文中就根据这个数据集的其中一个版本,做个xgboost的预测。其实,用什么模型来预测,都会有数据结果。不同的就是:预测的精准度的问题。可谓是条条大路通罗马,款款预测有结果。

苏南大叔:机器学习,如何使用xgboost预测泰坦尼克数据集结果? - 泰坦尼克号数据-xgboost
机器学习,如何使用xgboost预测泰坦尼克数据集结果?(图1-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:python@3.12.3pandas@2.2.2numpy@1.26.4xlrd@2.0.1openpyxl@3.1.2scikit-learn@1.5.0xgboost@2.0.3

前置文章

本文的正确理解,建立在对泰坦尼克数据集字段的正确理解上。所以,参考文章:

应该知道:网络上的泰坦尼克数据集有很多个版本,每个版本的字段写法都不一样。具体的数据情况,也不一样。所以,加载使用这些数据集的方式方法也不一样。

拿到数据之后,要根据每个数据集的具体情况和目标需求,对数据集进行一定的加工处理。参考文章:

苏南大叔使用xgboost对鸢尾花数据集进行预测的文章,可以参考:

数据初步处理

本文使用的泰塔尼克数据集来自斯坦福大学的公开版本,加载地址是:

这个斯坦福的数据集版本,字段比较少,并且没有空值,没有重复值。

import pandas as pd
df = pd.read_csv("titanic.csv")
print(df.count())

输出:

Survived                   887
Pclass                     887
Name                       887
Sex                        887
Age                        887
Siblings/Spouses Aboard    887
Parents/Children Aboard    887
Fare                       887
dtype: int64

关于数据处理的部分,每个人都有自己的不同理解。参考代码:

df = df.drop_duplicates()
df = df.drop('Name', axis=1)
df = pd.get_dummies(df, columns=['Pclass', 'Sex'], drop_first=True)
print(df.count())

输出:

Survived                   887
Age                        887
Siblings/Spouses Aboard    887
Parents/Children Aboard    887
Fare                       887
Pclass_2                   887
Pclass_3                   887
Sex_male                   887
dtype: int64

数据分割

【首要目标】就是:分割目标字段和特性字段。目标字段当然是Survived了,所以分割代码为:

target = df['Survived']
features = df.drop('Survived', axis=1)

这里的.drop方法,可以参考:

【其次目标】就是:分割训练集和测试集。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_true = train_test_split(features, target, test_size=0.25, random_state=42)

关于这个数据集分割的方法,可以参考:

模型预测

模型预测的代码很少,重复度也很高。每个模型大体上来说,就是换换模型的名称。

import xgboost as xgb
model = xgb.XGBClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

预测的准确率

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
s = accuracy_score(y_true, y_pred)
print("准确度  : ", s)

关于准确度和查准率的区分,可以参考:

F1评分

更加权威的模型评价方法是classification_report()

from sklearn.metrics import classification_report
n = classification_report(y_true, y_pred)
print(n)

输出:

              precision    recall  f1-score   support

           0       0.85      0.85      0.85       140
           1       0.74      0.74      0.74        82

    accuracy                           0.81       222
   macro avg       0.80      0.80      0.80       222
weighted avg       0.81      0.81      0.81       222

目标值阴性的数据条数为140,目标值阳性的数据条数为82。f1得分越高,表示这个模型越精准。所以,这个xgboost模型,对于当前数据集来说,效果还算不错。

参考文章:

字段重要性排序

feat_importances = pd.Series(model.feature_importances_, index=features.columns)
print(feat_importances.sort_values(ascending=False))

输出:

Sex_male                   0.532251
Pclass_3                   0.306623
Siblings/Spouses Aboard    0.056289
Parents/Children Aboard    0.030514
Fare                       0.028949
Age                        0.028162
Pclass_2                   0.017212
dtype: float32

这个结果表示的是:性别sex以及票等级pclass这两个字段比较重要。不过这个结论有待论证。

结束语

如果对于模型预测的结果不满意,可以调整训练集的样本。更多机器学习的文章,可以参考苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python