线性回归csv数据集_基于多元线性回归模型预测Titanic未知乘客年龄数据

本文以泰坦尼克数据集(Titanic.csv)为例,利用Python,通过构建多元线性回归模型,对未知乘客的年龄数据进行预测。

需要用到的库:

import 

读取Titanic数据集,查看数据预览及数据类型:

tiedani = pd.read_csv('Titanic.csv')
tiedani.head()
tiedani.dtypes

b03fdab195fa3114a7921ed4d82b29e6.png
Titanic前5行数据预览

f1dc383baf4c832a68a30741abf91212.png
Titanic不同维度数据类型

查看各变量的缺失比例:

tiedani.isnull().sum(axis=0)/tiedani.shape[0]

e7372451068c1578c2f293ff872bb371.png
不同维度数据的缺失比例

剔除无意义的变量:

我们认为乘客ID、乘客姓名、票务信息、港口登船信息、隔间信息对预测乘客年龄是没有帮助的,故剔除这些无意义的变量。

tiedani.drop(labels = ['PassengerId','Name','Ticket','Cabin','Embarked'],
             axis = 1,
             inplace = True
             )

7a3101df6a9aeb3f38f6e81dc557cf02.png
剔除无意义的数据后的数据概览

哑变量转换:

上图中的,Pclass变量为离散型变量,Sex变量为字符型变量,不能直接参与线性回归模型运算,需要对其做哑变量转换。利用pandas包中的get_dummies()函数,即可获取特定对象的哑变量。

tiedani.Pclass = tiedani.Pclass.astype(str)
dummies = pd.get_dummies(data = tiedani[['Pclass','Sex']])
new_tiedani = pd.concat([tiedani,dummies],axis = 1)
#new_tiedani.head()

6f1a18911f2a60ec0b5009549330c2b6.png
构造哑变量之后的数据预览

由上图可知,新生成的数据具有冗余性,为消除冗余,对数据做以下修正:

new_tiedani.drop(labels = ['Pclass','Sex','Pclass_3','Sex_male'],
                 axis = 1,
                 inplace = True
                )

将数据拆分为训练集和测试集:

missing = new_tiedani.loc[tiedani.Age.isnull(),]
no_missing = new_tiedani.loc[~tiedani.Age.isnull(),]

构造多元线性回归模型:

基于训练集数据集构造预测年龄Age的多元线性回归模型model,并对模型和系数分别做F检验和t检验。

Class = sm.formula.ols(formula='Age ~ Survived+SibSp+Parch+Fare+Pclass_1+Pclass_2+Sex_female', data=no_missing)
model = Class.fit()
model.summary()

根据F检验的结果可知,模型是显著的:

861b3247fd39a24a817ce5b67c924a27.png
F检验结果

从t检验的结果来看,Parch、Fare、Sex_female没有通过显著性试验:

2ffb106387cf132820967534f01c0c90.png
t检验结果

绘制Parch、Fare、Sex_female与Age数据之间的散点图:

sns.pairplot(no_missing[['Parch','Fare','Sex_female','Age']])

0a94b02c6c2eb2f10efd6738a945f9c4.png
Parch、Fare、Sex_female与乘客年龄之间的散点图

由上图可知,Parch、Fare、Sex_female与乘客年龄均不存在明显的线性趋势,故将Parch、Fare、Sex_female等变量从模型中剔除,得到新的多元线性回归模型model2:

Class2 = sm.formula.ols(formula='Age ~ Survived+SibSp+Pclass_1+Pclass_2',data=no_missing)
model2 = Class2.fit()
model2.summary()

ac267ea7e994dd69d18aa62938dbd102.png
新的多元线性回归模型的F检验结果

4ff5362e4796beab30f2eb5303a7e69e.png
新的多元线性回归模型的t检验结果

由上图可知,新的多元线性回归模型model2的模型和统计量均通过了显著性试验。最后,利用可视化的PP图和QQ图,验证新模型的残差是否服从正态分布的假设:

pp_qq_plot = sm.ProbPlot(model2.resid)
pp_qq_plot.ppplot(line='45')
plt.title('PP')
pp_qq_plot.qqplot(line='q')
plt.title('QQ')

f2e1f4d97ec987c3e1e5205d500fa905.png
PP图

a71163a73bd6719a842ed79308bd7bda.png
QQ图

由PP图和QQ图可知,图形中的散点基本都围绕再斜线附近,故可以判断新模型model2的残差服从正态分布,也就是说新模型model2是合理的。

预测未知年龄

通过模型model2对Titanic未知乘客的年龄数据进行预测:

pred_Age = model2.predict(exog=missing[['Survived','SibSp','Pclass_1','Pclass_2']])
missing.loc[:,'Age'] = pred_Age

bbcece9355dc09a32495d00143105a16.png
Titanic乘客未知年龄预测结果(部分)

最后,将预测结果插补到原始数据中:

tiedani.loc[:,'Age'] = pd.concat([no_missing.Age,pred_Age],axis = 0)

欢迎加微信交流:ranbow484

点击返回项目列表:

杨秋实:项目经历汇总(⬇️⬇️⬇️)​zhuanlan.zhihu.com
dc8be13bb1ab3d2f32318034e81a5892.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值