泰坦尼克号生存率预测

本文分析泰坦尼克号乘客数据,利用机器学习构建模型预测生存率。通过年龄、性别、客舱等级和家庭成员数量等信息进行可视化分析,揭示相关性。数据预处理包括填充缺失值,非数值特征转换。采用逻辑回归模型,预测准确率达到79%,证明模型合理但受数据空白影响存在偏差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 提出问题

泰坦尼克号共2224个人,沉船后只有772人存活,生存率仅有32%。尝试建立机器学习模型,通过分析乘客的个人信息,预测个人的存活率,并用测试数据评测模型的预测准确率。

2. 数据处理

首先从网络上下载泰坦尼克号的训练数据与测试数据v。利用pd.read_csv将数据导入。

import pandas as pd
import numpy as np
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import time 
import warnings
import matplotlib as mpl
data_train=pd.read_csv("C:/Users/28555/Desktop/train.csv")
data_test=pd.read_csv("C:/Users/28555/Desktop/test.csv")

3. 存活率可视化的实现

乘客的可用信息包括性别,年龄,客舱等,而我们的可视化分析主要就分析这三个方面,代码如下:

data_train_age = data_train[data_train['Age'].notnull()]
plt.figure(figsize=(8,3))
data_train_age['Age'].hist(bins=70)
plt.xlabel('Age')
plt.ylabel('Num')
plt.show()
bins = [0,6, 12, 20,39,59,100]
group_names = ['infant', 'child', 'teen',"prime","middle","old"]
data_train['categories'] = pd.cut(data_train['Age'], bins, labels = group_names)
mpl.rcParams['font.family']='DFKai-SB' # 修改了全局变量
plt.style.use('grayscale')
s_pclass= data_train['Survived'].groupby(data_train['categories'])
s_pclass = s_pclass.value_counts().unstack()
fig = s_pclass.plot(kind='bar',stacked = True, colormap='tab20c',title='mortality rate of age',fontsize=20)
fig.axes.title.set_size(20)
plt.show()
mpl.rcParams['font.family']='DFKai-SB' # 修改了全局变量
plt.style.use('grayscale')
s_pclass= data_train['Survived'].groupby(data_train['Pclass'])
s_pclass = s_pclass.value_counts().unstack()
s_sex = data_train['Survived'].groupby(data_train['Sex'])
s_sex = s_sex.value_counts().unstack()
fig = s_sex.plot(kind='bar',stacked = True, colormap='tab20c',title=' mortality rate of sex',fontsize=20)
plt.show()
fig = s_pclass.plot(kind='bar',stacked = True, colormap='tab20c',title='mortality rate of pclass',fontsize=20)
fig.axes.title.set_size(20)
fig,ax = plt.subplots(1,2, figsize = (9,4))
sns.violinplot("Pclass","Age",hue="Survived",data=data_train_age,split=True,ax=ax[0])
ax[0].set_title('Pclass and Age vs Survived')
ax[0].set_yticks(range(0,110,10))
sns.violinplot("Sex","Age",hue="Survived",data=data_train_age,split=True,ax=ax[1])
ax[1].set_
泰坦尼克号生存率预测是一个经典的数据科学项目,主要涉及到机器学习和数据可视化。在进行生存率预测之前,我们需要对原始数据进行一系列预处理步骤,以便提取有用信息并准备训练模型。以下是一些关键的预处理步骤: 1. **加载数据**: 使用pandas库中的`read_csv()`函数从CSV文件(如titanic.csv)导入数据。 ```python import pandas as pd data = pd.read_csv("titanic.csv") ``` 2. **数据探索**: - 查看基本信息(列名、缺失值、数据类型等) - 分析各特征之间的关系 - 探索异常值和重复值 ```python print(data.head()) data.info() ``` 3. **处理缺失值**: - 缺失值处理可能有几种策略,比如删除含有缺失值的行(dropna),填充平均值、中位数或使用其他特征的均值/中位数(fillna),使用插值法(imputation),或者其他特定于特征的方法。 ```python # 删除含有缺失值的行 data.dropna(inplace=True) # 或者选择合适的方式填充缺失值 ``` 4. **数据转换**: - 类别变量(如Embarked、Sex)通常需要编码成数值形式(例如独热编码或哑编码) - 数值变量可能需要标准化或归一化,特别是那些具有不同尺度的变量 ```python from sklearn.preprocessing import LabelEncoder, StandardScaler le = LabelEncoder() # 对类别变量编码 data['Sex'] = le.fit_transform(data['Sex']) data['Embarked'] = le.fit_transform(data['Embarked']) # 标准化数值变量 scaler = StandardScaler() data[['Age', 'Fare']] = scaler.fit_transform(data[['Age', 'Fare']]) ``` 5. **创建特征**: - 可能根据领域知识创建新的特征,例如乘客家庭大小(Parch + SibSp) ```python data['FamilySize'] = data['SibSp'] + data['Parch'] ``` 6. **特征工程**: - 删除无关或低效的特征 - 特征选择:如果特征很多,可以通过相关性分析、卡方检验等方法筛选重要特征 7. **划分数据集**: - 将数据分为训练集和测试集,常见的比例是80%训练,20%测试 ```python from sklearn.model_selection import train_test_split X = data.drop('Survived', axis=1) y = data['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 8. **数据可视化**: 制作散点图、柱状图、箱线图等,帮助理解特征与生存率的关系。 完成这些预处理后,数据就准备好用于构建预测模型了。接下来你可以开始训练分类器,比如逻辑回归、决策树、随机森林或深度学习模型。如果你有具体的问题或想深入了解某个步骤,请告诉我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值