14案例实战:泰坦尼克获救预测(线性回归、逻辑回归、随机森林、Kfold交叉验证、Bagging类型集成算法)

唐宇迪《python数据分析与机器学习实战》学习笔记
14案例实战:泰坦尼克获救预测

目的:将之前学过的机器学习算法应用在实际场景中,这里使用的是泰坦尼克号获救数据

一、数据观察与预处理

数据如下:1列为编号,2列为是否存活标签),然后分别为船舱等级、姓名、性别、年龄、船上多少个亲人(SibSp)、船上你的老人+孩子多少个(Parch)、船票编号(Ticket)、船票价格(Fare)、船舱位(Cabin缺失多)、上船码头(Embarked)
在这里插入图片描述

1.1 数据导入

数据导入,并统计一下每个特征:发现age有缺失值。(备注:现在传入的数据,为训练数据集

import pandas
titanic = pandas.read_csv('titanic_train.csv')
print(titanic.describe())

在这里插入图片描述

1.2 缺失值填充

这里利用平均年龄对缺失值进行填充:

titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median())
print(titanic.describe())

在这里插入图片描述

1.3 字符量映射为数值量

print (titanic['Sex'].unique()) #看一下这列有几种可能性,这里两种
titanic.loc[titanic['Sex']== 'male','Sex']=0     #男士映射为0
titanic.loc[titanic['Sex']=='female','Sex']=1   #女士映射为1

[‘male’ ‘female’]

print (titanic['Embarked'].unique())
titanic['Embarked'] = titanic['Embarked'].fillna('S')  #众数填充
titanic.loc[titanic['Embarked']== 'S','Embarked']=0
titanic.loc[titanic['Embarked']=='C','Embarked']=1
titanic.loc[titanic['Embarked']=='Q','Embarked']=2

[‘S’ ‘C’ ‘Q’ nan]

二、模型训练及预测

下面我们分别用线性模型逻辑回归随机森林这三种机器学习算法模型来分析这个案例,就是分析生存率

2.1 .线性回归模型

首次使用线性回归算法进行分类,数据交叉验证分割为3份,每份轮流作验证集,其他作训练集

from sklearn.linear_model import LinearRegression  
#导入线性回归
from sklearn.model_selection import KFold
#交叉验证,把训练数据集分成三份,1份验证2份训练模型,最后取平均值

predictors = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
#要给我的分类器哪些特征

alg = LinearRegression()
# kf = KFold(titanic.shape[0], n_folds=3, random_state=1) 写法错误已被弃用 
kf = KFold(n_splits=3,shuffle=False, random_state=1)#shuffle每次划分时是否洗牌 random_state随机种子数

predictions = []   #装预测结果
#for train,test in kf 写法错误已被弃用 
for train, test in  kf.split(titanic): #3份轮流当测试和验证
    #得到训练集的特征与标签
    train_predictors = (titanic[predictors].iloc[train,:])#特征,用iloc选出作为训练集标签的行
    train_target = titanic['Survived'].iloc[train]  #标签
    alg.fit(train_predictors,train_target) #建模
    #传入验证集的特征值,进行预测
    test_predictions = alg.predict(titanic[predictors].iloc[test,:])
    #每次加入结果(一大堆概率值),共三次,组成拥有3个数组的数组数据。
    predictions.append(test_predictions)

接着算出线性回归准确率,将刚才得到的预测值中的3个数组合并,然后以0.5为分界值将结果映射,计算准确率

import numpy as np
#这些预测在三个独立的numpy数组中。把它们连接成一个。
predictions = np.concatenate(predictions,axis=0) 

# 映射成分类结果,计算准确率
predictions[predictions > .5] = 1  
predictions[predictions <= .5
  • 7
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值