2泰坦尼克号生还预测 四种不同方法

1.泰坦尼克号生还预测 准备工作

泰坦尼克号生还预测是一个非常典型的联系项目。数据集是公开数据集。

1.1 环境准备

numpy=1.14.5

pandas=0.22.0

sklearn=0.19.2

seaborn=0.7.1

matplotlib=2.1.2

keras=2.1.6

1.2数据读取

(1)提前准备好titanic_dataset.csv文件,

        准备好特征xtrain和标签ytrain数据

import numpy as np
import pandas as pd
feature=pd.read_csv('titanic_dataset.csv')
y_train=feature['Survived']
x_train=feature.drop('Survived',axis=1)

print(x_train.shape)
print(feature.head())

(2)通过shape属性可以查看xtrain数据的维度

通过featurn.head()可以查看前五条数据

 

 (3)通过describe()方法可以得到,包括均值,中值,方差,最大最小等统计描述

         通过info()方法得到,

print(feature.describe())
print(feature.info())

 通过info()方法得到,每列的统计特性,特别是可以看出前四个属性不同于其他都是1309个值,说明这四个属性是有nan缺失值的,下一步对不同类型的缺失值进行处理。

 1.3缺失值处理

(1)使用x_train.isnull().sum统计缺失值,结果如下如,说明前面4列均有缺失,但是要具体问题具体分析

 (1)Age字段,操作方法如下:

从sns可视化age数据可以看出来,age是服从正态分布,因此可以使用中值进行替换。

#使用seaborn进行可视化处理
import seaborn as sns

#print(sns.distplot.__doc__)
#Age直接去掉缺失值
sns.distplot(x_train['Age'].dropna(),hist=True,kde=True)
#以中值替换
x_train['Age'].replace(np.nan,np.nanmedian(x_train['Age']),
       inplace=True)

(2)Cabin字段:缺失值比较多,直接去掉
x_train.drop("Cabin",axis=1,inplace=True)

(3)Embarked字段:由于Embarked表示乘船的港口,是字符型,缺失值比较少,填补
#可以填最多.
#由countplot函数 可以得到可以得到 最多的是‘s’因此 空缺项填s

#sns.countplot(x='Embarked',data=x_train)

x_train['Embarked'].replace(np.nan,'S',
       inplace=True)
(4)Fare字段 只有一个缺失值,查看分布可知,没有什么规律,
'''
1)查询是哪条数据的票价信息欠缺,查看数据
2)查询信息Pclass=3,Embarked=“s”的数据,并返回DataFrame对象
3)讲缺失信息填为查询到信息的中值
'''

(5)sex字段 进行替换  male--1   female--0

x_train.drop("Cabin",axis=1,inplace=True)

#处理Embarked字段:由于Embarked表示乘船的港口,是字符型,缺失值比较少,填补
#可以填最多.
#由countplot函数 可以得到可以得到 最多的是‘s’因此 空缺项填s

#sns.countplot(x='Embarked',data=x_train)

x_train['Embarked'].replace(np.nan,'S',
       inplace=True)

#处理Fare只有一个缺失值,查看分布可知,没有什么规律,
'''
(1)查询是哪条数据的票价信息欠缺,查看数据
(2)查询信息Pclass=3,Embarked=“s”的数据,并返回DataFrame对象
(3)讲缺失信息填为查询到信息的中值
'''
print(x_train.isnull().sum())

#sns.countplot(x='Fare',data=x_train)

print(x_train[np.isnan(x_train['Fare'])])
pclass3_fares=x_train.query('Pclass==3 & Embarked=="S"')

pclass3_fares=pclass3_fares['Fare'].replace(np.nan,0)

median_fare=np.median(pclass3_fares)
print(median_fare)

x_train.loc[x_train['PassengerId']==1044,'Fare']=median_fare
#print(x_train.isnull().sum())
#结果可知没有缺失值

#对于sex字段 进行替换  male--1   female--0
x_train['Sex'].replace(['male','female'],[1,0],inplace=True)
#print(x_train.head())

下图是对Embarked的统计,可以看出"s"港口上船的人最多,此时缺失值填写“S”。

 1.4 训练数据和预测数据

#数据清洗与分割
print(x_train.shape)
x_train=pd.get_dummies(x_train)#类似于one hot编码
print(x_train.shape)

#数据清洗  训练:测试=8:2 shuffle=True表示进行清洗数据
from sklearn.model_selection import train_test_split
#print(train_test_split.__doc__)

train_x,test_x,train_y,test_y=train_test_split(x_train,y_train,
                                               train_size=0.8,
                                                random_state=42,
                                                shuffle=True)

print("train_x,test_x,train_y,test_y,shape is:\n{}\n{}\n{}\n{}\n"
      .format(train_x.shape,test_x.shape,train_y.shape,test_y.shape)

2. 决策树模型

2.1创建决策树模型

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import metrics

#创建模型
model=DecisionTreeClassifier()
model.fit(train_x,train_y)

2.2 预测与计算精度

#预测结果
#预测训练集
train_pre=model.predict(train_x)
test_pre=model.predict(test_x)

#计算预测精度
train_acc=accuracy_score(train_y,train_pre)
test_acc=accuracy_score(test_y,test_pre)
print('train_acc:%f\n,test_acc:%f'%(train_acc,test_acc))

最后得到:

 2.3  ROC

#计算ROC
y_score_dt=model.predict_proba(test_x)

fp,tp,thresholds=metrics.roc_curve(test_y,y_score_dt[:,1])
print(fp,tp)
auc_score=metrics.roc_auc_score(test_y,y_score_dt[:,1])
print(auc_score)

 

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v1shuimo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值