python预测分析_Python--模型预测分析

项目背景

电影《泰坦尼克号》改编自一个真实故事。1912年4月15日,这艘号称“永不沉没”的泰坦尼克号在首航期间,撞上冰山后沉没,船上的2224名乘客和机组人员,其中只有772人存活下来,生还率只有32%。 这一耸人听闻的悲剧震撼了国际社会!

2.提出问题

泰坦尼克号生存率预测 :具有什么特征的人在泰坦尼克号中更容易存活?

3. 采集数据:

数据来源于kaggle网站Titanic项目: kaggle.com/c/titanic

4.特征工程Dima:02 手把手教你做特征工程​zhuanlan.zhihu.comzhihu-card-default.svg特征工程到底是什么?​www.zhihu.comv2-9899d4e79c1f82cf804cac1bf4c6db71_ipico.jpg

特征工程(feature engineering)是指从原始数据中提取特征并将其转换为适合机器学习模型的格式。坊间有一个大家公认的看法,“数据和特征决定了数据挖掘项目的上限,而算法只是尽可能地逼近这个上限”。特征处理是特征工程的核心部分,sklearn提供了较为完整的特征处理方法,包括数据预处理,特征选择,特征降维等。

经典特征工程包括探索性数据分析、特征理解、特征增强、特征构建和特征选择5个步骤,为进一步解释数据并进行预测性分析做准备。

4.1 探索性数据分析

探索性数据分析(EDA,exploratory data analysis)对数据集进行基本的描述性统计(大小、形状),并进行可视化操作,以便更好地理解数据的性质。

4.1.1 导入数据

#1导入包&数据集

#2 查看数据集差异

train.csv比test.csv多了一列Survived,即是否生存,这正是我们要解决的问题:本文即是通过对train.csv的机器学习,来预测test.csv的Survived水平。test.csv的特征与训练数据train.csv的特征一致时才能直接应用训练模型进行预测,所以要将二者合并起来一起清洗,这样保证了后面test.csv的特征数据可直接带入进行预测。

#合并训练集和测试集&查看合并结果

4.1.2 描述性统计

函数.head(),默认查看 前五行数据;

数据集字段说明如下

full.describe(),只能查看数据类型的描述统计信息,对于非数据类型的数据不显示

由上可知没有异常数据

4.2特征理解——识别数据

当拿到一个新的数据集时,识别数据基本工作流程:

函数.info(),查看每一列的数据类型,和数据总数

a )数据类型如下:

数据类型:Age、Fare、Parch、PassengerId、Pclass、SibSp、Survived;

字串类型:Cabin、Embarked、Name、Sex、Ticket

b) 数据总共有1309行,Survived是标签,用作机器学习预测,无需处理。数据类型:年龄(Age)、船舱号(Cabin)里面有缺失数据:年龄(Age)里面数据总数是1046条,缺失了263,缺失率20%;

船票价格(Fare)里面数据总数是1308条,缺失了1条数据字符串列;

登船港口(Embarked)里面数据总数是1307,只缺失了2条数据,缺失较少;

船舱号(Cabin)里面数据总数是295,缺失了1014,缺失率77.5%,缺失较大。

4.3. 特征增强——清洗数据

4.3.1选择子集:无

4.3.2列名重命名 :无

4.3.3处理缺失值

缺失值是数值类型:Age、Fare,用平均值取代

缺失值是分类数据:Cabin、Embarked,用最常见的类别(众数)取代

查看填充是否OK

4.3.4处理异常值 : 无

5. 特征抽取(特征构建)

特征提取的对象是原始数据(raw data),它的目的是自动地构建新的特征,将原始特征转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征。特征抽取的目的是将多维的或相关的特征降低到低维,以提取主要信息或生成与目标相关性更高的信息。

5.1数据分类

1数值类型:直接使用; 年龄(Age)、船票价格(Fare)、同代亲属数(SibSp)、不同代亲属数(Parch);

2 时间序列:转化为单独年、月、日; 项目数据集中无时间字段

3分类数据:用数值代替类别,通过One-hot编码形成dummy variables。有直接分类:登船港口(Embarked)、船舱等级(Pclass)、性别(Sex)

无直接分类:船舱号(Cabin)、姓名(Name)、船票编号(Ticket)

5.2特征转换

(1)分类数据转换-(Sex):map函数(针对特征为两个分类)

(2)分类数据转换-(Embarked): one-hot编码(针对特征为两个分类以上)

Embarked显示的是乘客在那个港口登陆,而这又是类别数据,这时可用one-hot编码对这一列数据进行降维。即:给登陆港口C、S、Q分别建一列,如果是在该港口登陆则值为1,否则为0。这样每个乘客,即每一行,只会在三列中的一列为1,其余为0,这就实现了类别数据向数值型数据的额转化,且也实现了数据降维。

#第1步 :使用 pandas 中的 get_dummies函数产生one-hot编码

#第2步 :将第1步产生的 one-hot编码产生的虚拟变量(dummy variables)添加到到原数据集full

函数concat:contact具有合并数据的功能(axis=1表示按列合并),参考PANDAS 数据合并与重塑(concat篇),更多合并方法参考PANDAS 数据合并与重塑(join/merge篇)。

#第3步 :删除原数据集full中的Embarked列

(3)分类数据转换-(Pclass) one-hot编码(针对特征为两个分类以上) 同上

(4)分类数据转换-(Name):先拆分:split 后map替换 最后转换 :one-hot编码

乘客头衔每个名字当中都包含了具体的称谓或者说是头衔,将这部分信息提取出来后可以作为非常有用一个新变量,可以帮助我们进行预测。

先拆分:split 后map替换

最后转换 :one-hot编码

(5)分类数据转换-(Cabin)

每个元素的首字母进行填充(客舱号的类别值是首字母),然后用新的首字母进行one-hot编码生存特征数据CabinDF,最后更新到full中

(6)分类数据转换-(Ticket)

船票Ticket表示的是船票号,同 PassengerId 一样 只是一个ID记录 不需要进行特征转化

(7)分类数据转换-(SibSp&Parch)SibSp:表示船上兄弟姐妹数和配偶数量,理解为同代直系亲属数量;

Parch:表示船上父母数和子女数,理解为不同代直系亲属数量;

据此,这两个数据可用来衡量乘客的家庭大小,而家庭的大小规模可能会影响乘客的生还几率,因此可创建衡量家庭规模的变量familySize。familySize应等于:同代直系亲属数量SibSp+不同代直系亲属数量Parch+乘客本人

小家庭Family_Single:家庭人数=1

中等家庭Family_Small: 2<=家庭人数<=4

大家庭Family_Large: 家庭人数>=5

第1步创建家庭大小分类

第2步合并虚拟变量(dummy variables)所在的familyDf和 full 列表

6. 特征选择

特征选择过程一般如下:1 选取尽可能多的特征,必要时先进行降维 ;2 对特征进行选择,保留最具有代表性的特征,这个过程的进行要同时观察模型准确率的变化。

第一步 :相关系数法:计算各个特征直接的相关系数

第二步 :查看Survived与各个数据的相关性

第三步 :选择模型入参参数

根据各个特征参数之前的正负相关性强弱,选择如下参数入模型:头衔(据集titleDf)、客舱等级(pclassDf)、家庭大小(familyDf)、船票价格(Fare)、船舱号(cabinDf)、登船港口(embarkedDf)、性别(Sex)为特 。

7.数据建模(Model Data)

用训练数据和某个机器学习算法得到机器学习模型,用测试数据评估模型

7.1 构建数据集测试数据test.csv中没有Survived列,不能用于评估模型,该Survived数据即为项目预测目的,为了区分后面使用机器学习模型对其生存进行预测,将该组数据集叫做预测数据集,记为pred,也就是预测英文单词predict的缩写;

训练数据集train.csv,作为原始数据集(记为source),从这个原始数据集中拆分出训练数据集(记为train:用于模型训练)和测试数据集(记为test:用于模型评估)

7.2建立训练数据集和测试数据集

7.3构建训练模型

7.4 评估模型

模型的正确率为79.8%,表明拟合的很好,正确率比较高,可以使用来预测。

8. 模型预测

预测结果格式转化