Titanic 数据集是从 kaggle下载的,下载地址:https://www.kaggle.com/c/titanic/data

数据一共又3个文件,分别是:train.csv,test.csv,gender_submission.csv

先把需要视同的库导入:

import os
import datetime
import operator
import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Imputer, scale
import matplotlib.pyplot as plt
 np.random.seed(19260817) # 设置一下种子,看一下博客园有没有能看懂的

不管是做机器学习,还是深度学习,还是其他的先确定是 分类问题还是回归问题,当然这两个可以互相转换的,然后拿到数据第一步肯定是先观察数据,数据是否又缺失,乱码等。

这个看一下就知道是否存活,存活是1,否则 0 ,那么就是分类

1,观察下数据

先观察一下数据,使用pandas读取数据:

DataFrame.head(n=5):head 方法默认取5行数据,你可以自己随便传参数,我只去10行观察下看下

    pd_train = pd.read_csv('./data/titanic/train.csv')
pd_test = pd.read_csv('./data/titanic/test.csv')
pd_gender = pd.read_csv('./data/titanic/gender_submission.csv')
print(pd_train.shape, pd_test.shape)
print(pd_train.head(10))

根据观察可以看到,数据有数值类型,也有字符类型,数值类型我们称作连续变量,字符类型我们称作分类变量,连续变量是不用转换的,而分类变量是需要转成连续变量的,否则,无法运算。
还可以看到有些数据是缺失的,这部分缺失值我们也需要处理,填充或者删除

2,特征工程

  根据第一步观察到的结果,我们对数据做处理。

  1)将性别 Sex 列,做数值转换处理,代码如下:

    # 性别 将性别字段Sex中的值 female用0,male用1代替,类型 int
pd_train['Sex'] = pd_train['Sex'].map({'female': 0, 'male': 1}).astype(int)
pd_test['Sex'] = pd_test['Sex'].map({'female': 0, 'male': 1}).astype(int)

  2) 将分类变量转换位连续变量。我们使用 sklearn 库下面的 LabelEncoder() 来处理

    # 将类型变量转换位连续变量
for f in pd_train.columns:
if pd_train[f].dtype == 'object':
label = LabelEncoder()
label.fit(list(pd_train[f].values))
pd_train[f] = label.transform(list(pd_train[f].values)) for f in pd_test.columns:
if pd_test[f].dtype == 'object':
label = LabelEncoder()
label.fit(list(pd_test[f].values))
pd_test[f] = label.transform(list(pd_test[f].values))

  3)统计缺失的列那些,观察缺失值有多少,再决定是删除,还是填充,如果某列值的缺失严重,那就没必要填充了,直接删除。

       我们采用填充的方式,使用 Imputer类来处理缺失值,这个类提供了估算缺失值的基本策略,使用缺失值所在的行/列中的平均值、中位数或者众数来填充。这个类也支持不同的缺失值编码。

   # 统计缺失的列
na_train = pd_train.isnull().sum().sort_values(ascending=False)
print(na_train) # 使用均值填充缺失值
train_data= pd_train.values
imput = Imputer(missing_values="NaN", strategy="mean", axis=0)
imput = imput.fit(train_data)
train_data = imput.fit_transform(train_data) # 使用均值填充缺失值
test_data= pd_test.values
imput = Imputer(missing_values="NaN", strategy="mean", axis=0)
imput = imput.fit(test_data)
test_data = imput.fit_transform(test_data)

  

3,训练

  经过对特征的处理,我们可以训练模型可,我使用了三个模型分别是,LogisticRegression,RandomForest,XGBClassifier

  监督学习的模型都一样,必须拟合(fit)两个矩阵(数组), 训练样本的矩阵 X,大小为 [n_samples, n_features],和 训练样本目标值(标签)的数组 Y,大小为 [n_samples]:

  1)LogisticRegression :逻辑回归,虽然名字叫回归,但是个分类模型

def train_logreistic():
"""
逻辑回归
"""
X_train, X_test, y_train, y_test = load_data() model = LogisticRegression(penalty='l2')
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
rfc_rate, rmse = calc_accuracy(y_pred, y_test)
total = total_survival(y_pred) print("LogisticRegression acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format( rfc_rate, rmse, total))
return rfc_rate, rmse, total

  2)RandomForest:随机森林,基于树的模型,通过在分类器构造过程中引入随机性来创建一组不同的分类器。

def train_randomForster():

    X_train, X_test, y_train, y_test = load_data()
model = RandomForestClassifier(n_estimators=300,max_depth=12,random_state=7)
model.fit(X_train,y_train)
y_pred = model.predict(X_test)
rfc_rate, rmse = calc_accuracy(y_pred, y_test)
total = total_survival(y_pred)
print("RandomForestClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(rfc_rate, rmse, total))
return rfc_rate, rmse, total

  3)XGBClassifier :大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上,kaggle 比赛的神器

def train_XGBoost():

    X_train, X_test, y_train, y_test = load_data()
model = xgb.XGBClassifier(max_delta_step=6, learning_rate=0.1, n_estimators=100, objective="binary:logistic",silent=True)
eval_data = [(X_test, y_test)]
model.fit(X_train, y_train, eval_set=eval_data, early_stopping_rounds=30)
y_pred = model.predict(X_test)
rfc_rate, rmse = calc_accuracy(y_pred, y_test)
total = total_survival(y_pred) print("XGBClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(rfc_rate, rmse, total))
return rfc_rate, rmse, total

4,预测

  model.predict(X_test) 都在里面写了,我就不说了。

  三个模型最后的结果:

  

def train():

    lg_rate, lg_rmse, lg_total = train_logreistic()
rf_rate, rf_rmse, rf_total = train_randomForster()
xg_rate, xg_rmse, xg_total = train_XGBoost() print("LogisticRegression acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format( lg_rate, lg_rmse, lg_total))
print("RandomForestClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(rf_rate, rf_rmse, rf_total))
print("XGBClassifier acc_rate:{0:.4f},RMS:{1:.4f},存活:{2}".format(xg_rate, xg_rmse, xg_total))
XGBClassifier acc_rate:80.4469,RMS:0.4422,存活:56
LogisticRegression acc_rate:74.8603,RMS:0.5014,存活:60
RandomForestClassifier acc_rate:82.6816,RMS:0.4162,存活:54
XGBClassifier acc_rate:80.4469,RMS:0.4422,存活:56

好了,至于怎么调参,网格搜索我就不写了,简单的分析就完成了。。

参考:

1) http://xgboost.readthedocs.io/en/latest/

2) http://scikit-learn.org/stable/

3) https://www.kaggle.com/

源码地址:https://github.com/jarvisqi/machine_learning/blob/master/ml_xgboost/titanic.py

【机器学习】SKlearn + XGBoost 预测 Titanic 乘客幸存的更多相关文章

  1. 【机器学习学习】SKlearn + XGBoost 预测 Titanic 乘客幸存

    Titanic 数据集是从 kaggle下载的,下载地址:https://www.kaggle.com/c/titanic/data 数据一共又3个文件,分别是:train.csv,test.csv, ...

  2. python机器学习-sklearn挖掘乳腺癌细胞(三)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  3. python机器学习-sklearn挖掘乳腺癌细胞(一)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  4. python机器学习-sklearn挖掘乳腺癌细胞(五)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  5. python机器学习-sklearn挖掘乳腺癌细胞(四)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  6. python机器学习-sklearn挖掘乳腺癌细胞(二)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  7. 机器学习之路: python 决策树分类DecisionTreeClassifier 预测泰坦尼克号乘客是否幸存

    使用python3 学习了决策树分类器的api 涉及到 特征的提取,数据类型保留,分类类型抽取出来新的类型 需要网上下载数据集,我把他们下载到了本地, 可以到我的git下载代码和数据集: https: ...

  8. 基于titanic数据集预测titanic号旅客生还率

    数据清洗及可视化 实验内容 数据清洗是数据分析中非常重要的一部分,也最繁琐,做好这一步需要大量的经验和耐心.这门课程中,我将和大家一起,一步步完成这项工作.大家可以从这门课程中学习数据清洗的基本思路以 ...

  9. chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况

    单一标准的决策树:会根每维特征对预测结果的影响程度进行排序,进而决定不同特征从上至下构建分类节点的顺序.Random Forest Classifier:使用相同的训练样本同时搭建多个独立的分类模型, ...

随机推荐

  1. JMeter java.net.SocketException:Operationnotsupported:connect解决方案

    java.net.SocketException: Operation not supported: connect解决方案   by:授客 QQ:1033553122 测试环境 apache-jme ...

  2. Android为TV端助力 eclipse出现感叹号的解决办法

    当eclipse导入项目出现红叉但无提示错误时,去看:1>菜单路径----Window/Show View/Console2>菜单路径----Window/Show View/Error ...

  3. XBanner的简单使用轮播

    导入依赖 implementation 'jp.wasabeef:glide-transformations:3.0.1' implementation 'com.xhb:xbanner:1.2.2' ...

  4. (办公)rom包

    所谓ROM包,通俗点来讲,也就是手机上的系统安装包.使用过智能手机的朋友可能都有过这样的遗憾,自己所用的官方系统虽然能够满足绝大部分的需求,但总有一些细节不是很合自己的心愿……比如说,内置的输入法不好 ...

  5. 2017.9.16~17,热烈庆祝共创力罗老师《敏捷MINI体验式实战培训》在某大型企业成功举办!

    2017.9.16~17日,深圳市共创力企业管理咨询有限公司为某上市企业提供了为期两天的内训服务.该次内训的主题为<敏捷MINI体验式实践培训>,为期两天.此次培训由共创力资深讲师Geor ...

  6. C#-构造函数中base

    base 是调用基类的有参数构造函数  因为在子类不能直接继承父类的构造函数   实例 using System; using System.Collections.Generic; using Sy ...

  7. 前后端分离djangorestframework——解析渲染组件

    解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程,本质就是对请求体中的数据进行解析 Accept是告诉对方我能解析什么样的数据,通常也可以表示我想要什么样的数 ...

  8. 探索SQL Server元数据(二)

    背景 上一篇中,我介绍了SQL Server 允许访问数据库的元数据,为什么有元数据,如何使用元数据.这一篇中我会介绍如何进一步找到各种有价值的信息.以触发器为例,因为它们往往一起很多问题. 那么如何 ...

  9. sqlserver中分区函数 partition by与 group by 区别 删除关键字段重复列

    partition  by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录, partition  by ...

  10. ELK 处理 Percona 审计日志(填坑)

    前提 1.有强烈的审计需求. 2.能允许10%-15%左右的性能损失. 3.有强烈的对数据库操作实时查看需求(一般都是为了领导要求). Logstash 比较坑的配置   1 2 3 4 5 6 7 ...