本文以泰坦尼克数据集(Titanic.csv)为例,利用Python,通过构建多元线性回归模型,对未知乘客的年龄数据进行预测。
需要用到的库:
import
读取Titanic数据集,查看数据预览及数据类型:
tiedani = pd.read_csv('Titanic.csv')
tiedani.head()
tiedani.dtypes
查看各变量的缺失比例:
tiedani.isnull().sum(axis=0)/tiedani.shape[0]
剔除无意义的变量:
我们认为乘客ID、乘客姓名、票务信息、港口登船信息、隔间信息对预测乘客年龄是没有帮助的,故剔除这些无意义的变量。
tiedani.drop(labels = ['PassengerId','Name','Ticket','Cabin','Embarked'],
axis = 1,
inplace = True
)
哑变量转换:
上图中的,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()
由上图可知,新生成的数据具有冗余性,为消除冗余,对数据做以下修正:
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检验的结果可知,模型是显著的:
从t检验的结果来看,Parch、Fare、Sex_female没有通过显著性试验:
绘制Parch、Fare、Sex_female与Age数据之间的散点图:
sns.pairplot(no_missing[['Parch','Fare','Sex_female','Age']])
由上图可知,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()
由上图可知,新的多元线性回归模型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')
由PP图和QQ图可知,图形中的散点基本都围绕再斜线附近,故可以判断新模型model2的残差服从正态分布,也就是说新模型model2是合理的。
预测未知年龄
通过模型model2对Titanic未知乘客的年龄数据进行预测:
pred_Age = model2.predict(exog=missing[['Survived','SibSp','Pclass_1','Pclass_2']])
missing.loc[:,'Age'] = pred_Age
最后,将预测结果插补到原始数据中:
tiedani.loc[:,'Age'] = pd.concat([no_missing.Age,pred_Age],axis = 0)
欢迎加微信交流:ranbow484
点击返回项目列表:
杨秋实:项目经历汇总(⬇️⬇️⬇️)zhuanlan.zhihu.com