逻辑回归python录取几率_python逻辑回归算法预测泰坦尼克号生存率

一、明确目标

数据分析的目的取决于项目需求,脱离了实际项目需求的数据分析就是无源之水,所以第一步就是明确分析的目标是什么。

本次项目是著名的泰坦尼克号沉船事件,这里想知道影响沉船生存率的因素是什么,并且预测乘客的的生存率。

二、分析思路和方法

在统计学领域,数据分析分为描述性数据分析、探索性数据分析、验证性数据分析;本次项目属于探索性和验证性,所以主要用到相关分析和回归分析,但是也会用到描述统计分析,分析思路如下面的思维导图:

三、理解数据

3.1采集数据

从官网了解项目需求,下载数据,了解变量的意思

3.2导入数据

将下载的数据导入python,这里的数据集train用于模型的训练和测试,test用于预测结果。查看数据的行列数,train比test多一列,即survived生存这一列,这是需要我们通过机器学习,预测的结果。

#导入数据处理包

import pandas as pd

import numpy as np

#导入下载好的数据集

train=pd.read_csv(r'F:\houzi\train.csv')

test=pd.read_csv(r'F:\houzi\test.csv')

print('训练数据集:',train.shape,'测试数据集:',test.shape)

训练数据集: (891, 12) 测试数据集: (418, 11)

train和test的字段一致,所以可以用append将两个数据集合并,一起清洗,提高效率。

合并两个数据集的时候,test数据集少一列,ignore_index=true表示忽略用NAN填充。

3.3查看数据信息

用info()查看数据类型和缺失情况。

如上图,有四个字段有缺失值

float64数值型数据Age缺失1309-1046=263,缺失率为263/1309=20%,Fare缺失1个数据;

object类型数据Cabin缺失1309-295=1014,缺失率为77%,Embarked缺失2条

知道缺失值信息,为后面数据清洗明确方向。

四、清洗数据

4.1处理缺失数据

4.1.1 数值型数据Age,Fare缺失值处理,一般用均值填充

full['Age']=full['Age'].fillna(full['Age'].mean())

full['Fare']=full['Fare'].fillna(full['Fare'].mean())

4.1.2 object型数据缺失值处理

Cabin,Embarked为分类型数据,一般用众数填充

Cabin的缺失率为77%,缺失值比较多,众数未知unknown,用U表示;

#缺失值比较多,填充为U,表示未知

full['Cabin']=full['Cabin'].fillna('U')

Embarked只有2条缺失,用value_counts得出每个值出现的次数,找出众数

查看填充完缺失值的数据集信息,填充成功。

4.2特征工程

数据预处理的工作完成,接下来就是选取用于数据分析,机器学习的数据特征,也就是自变量。选出和分析需求,也就是生存率survived相关性大的数据特征训练模型

4.2.1提取特征

对特征进行分类,每一类数据提取方式不同,如下图

将本项目的特征进行分类

分类数据:Cabin,Embarked,Pclass,Sex,Parch,SibSp

字符串数据:Name,Ticket

数值数据:Age,Fare,PassengerId

分类数据特征提取

直接类别的特征:

Cabin,Embarked,Pclass,Sex,Parch,SibSp

(1)Sex

原始数据有两个分类:female,male,为了方便训练模型,用map函数将其映射为数值0,1,map函数可以对Series的每个数据引用自定义的函数。

#定义一个字典,将性别的值映射为数值

sex_mapDict={'male':1,

'female':0}

full['Sex']=full['Sex'].map(sex_mapDict)

(2)Embarked登入港口

用value_counts查看Embarked有3个分类C,S,Q,这里用one_hot编码将分类数据转换为二元特征的数值数据,原始数据中C,S,Q都在同一列,这里转换为C,S,Q各占一列,某一位乘客的登入口为C,则该C列的值为1,S,Q列下的值为0;如下用pandas中的get_dummies方法:

将转换后的数据合并到原数据中,应用函数concat,表连接的方法还有join和merge

#将虚拟变量EmbarkedDf添加到full

full=pd.concat([full,EmbarkedDf],axis=1)

full.drop('Embarked',axis=1,inplace=True)

(3)Pclass船舱等级

也是分类数据,处理方法和Embarked一致

(4)Cabin船舱号

Cabin的数据需要进行整理,统一用船舱号的首字母代替,然后再用get_dummies进行one_hot编码,这里用到了匿名函数lambda,不需要定义函数,对函数命名,lambda后面是变量,冒号:后面是函数的返回值,这里的lambda函数表示返回a的第一个元素,再结合map函数,表示对full['Cabin']的每一个元素应用该匿名函数。

(5)Parch,SibSp

用来衡量乘客的家庭大小,家庭大小会影响乘客生还率,创建衡量家庭规模的变量familysize

familysize=同代亲属数Parch+不同代亲属数SibSp+1乘客本人

Parch:兄弟姐妹数和配偶书,即同代直系亲属数量

SibSp:父母数和子女数,即不同代直系亲属数量

,制定一个衡量家庭大小的标准:

当familysize=1时,为小家庭

2

familysize>=5,为大家庭

字符串数据特征提取

字符串数据:Name,Ticket

(1)Name

每一个名字中都有称谓Mr,Mrs,Miss,可以用split分割字符串提取这些称谓,提取之后进行统计,结果显示称谓分类太多,不便于分析,西方人对头衔分为officer,Royalty,Master,Mr,Mis,Miss六种,用map函数进行映射完成转换。再用get_dummies实现one-hot编码将字符串特征转换为数值特征便于分析,将转化好的数据集合并到full中取代原来的Name列。

数值数据特征提取

Age,Fare的数值可以直接作为特征。

4.2.2特征选取

前面提取的特征相互之间有什么关系,这些特征与生存Survived有什么关系,我们要选取与Survived相关性大的特征。

用dataframe的corr方法获取full中所有元素之间的相关系数,相关系数的绝对值越接近1,表示两者之间的相关性越大。

我们重点关注各元素与Survived之间的相关性,可以提取出与Survived相关性大的特征,Title,Pclass,Fare,Cabin,Embarked,FamilyDf,Age,Sex,组成建模、训练、预测的数据集full_x。

五、构建模型

5.1拆分训练数据和测试数据

训练数据用于训练模型,测试数据用于评估模型的准确性,最后将预测数据带入训练好的模型中预测最终的结果。

首先用train_test_split方法从上面提取的两个样本数据集中拆分出训练数据和测试数据。

5.2建立、训练模型

用sklearn的liner_model的逻辑回归算法构建模型,用fit函数和拆分好的训练数据训练模型。

六、评估模型

6.1评估模型

用模型model的score方法,将模型预测出的结果test_y和预留的test_y对比,查看模型的正确率。

模型的正确率为0.87,表示模型拟合的很好,可以用该模型进行预测。

6.2预测结果

用预测数据特征pre_x和模型的predict方法预测生存数据pre_y,将结果转换成整数型数据。

将预测出来的结果整理成kaggle要求的格式,其中包括PassengerId和Survived两个字段,准备好结果之后写到excel表格里面,将预测结果提交给sklearn官网,就可以看自己的排名了。

排名结果为

这只是一个开始,后面还需要不断学习优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值