Kaggle实战入门:泰坦尼克号生还预测(进阶版)

这篇具有很好参考价值的文章主要介绍了Kaggle实战入门:泰坦尼克号生还预测(进阶版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kaggle实战入门:泰坦尼克号生还预测(基础版)对机器学习的全流程进行了总体介绍。本文继续以泰坦尼克号生还预测为例,对机器学习中的特征工程、模型构建进行深入解读。

数据集及代码下载

1. 加载数据

由于针对训练数据集、测试数据集均要做空值填充、编码转换、离散化、归一化等处理,因此可以加载训练数据集、测试数据集对其统一进行处理。

train_file = r'datasets/train.csv'
test_file  = r'datasets/test.csv'
data = pd.read_csv(train_file,index_col='PassengerId')
data_sub = pd.read_csv(test_file,index_col='PassengerId') 
data_copy = data.copy()
del data_copy['Survived']
data_all = pd.concat([data_copy,data_sub]) #数据合并
data_all.info() #查看数据情况

输出

<class ‘pandas.core.frame.DataFrame’>
Int64Index: 1309 entries, 1 to 1309
Data columns (total 10 columns):
Pclass 1309 non-null int64
Name 1309 non-null object
Sex 1309 non-null object
Age 1046 non-null float64
SibSp 1309 non-null int64
Parch 1309 non-null int64
Ticket 1309 non-null object
Fare 1308 non-null float64
Cabin 295 non-null object
Embarked 1307 non-null object
dtypes: float64(2), int64(3), object(5)
memory usage: 112.5+ KB

2. 特征工程

(1)填充空值

需要填充空值的字段包括:AgeFareEmbarked 三个字段,其中使用众数填充Embarked``Age的空值 ,使用均值填充Fare``Age的空值。

由于Name里有Mr,Mrs,Miss等称谓,可使用称谓对应的年龄的均值来填充Age的空值。

#填充Fare与Embark空值
Embarked_mode = data_all.Embarked.mode()[0] #计算众数
data_all.Embarked=data_all.Embarked.fillna(Embarked_mode) #众数填充
Fare_mean = data_all[data_all.Pclass == 3].Fare.mean() #计算均值
data_all.Fare=data_all.Fare.fillna(Fare_mean) #均值填充

#根据Title填充Age空值
def get_title(name):
    title_search = re.search("([A-Za-z]+)\.",name)
    if title_search:
        return title_search.group(1)
    return ""
data_all['Title'] = data_all.Name.apply(get_title)
for title in data_all[data_all.Age.isnull()].Title.unique():
    title_age_mean = data_all[data_all.Title == title].Age.mean()
    data_all.loc[data_all.Age.isnull()*data_all.Title == title,'Age'] = title_age_mean

(2)Age空值离散化

#年龄离散化
bins=[0,14,30,45,60,80]
cats=pd.cut(data_all.Age.as_matrix(),bins) 
data_all.Age=cats.codes

(3)Fare归一化

使用StandardScaler方法对Fare归一化处理

scaler=StandardScaler()
data_all.Fare=scaler.fit_transform(data_all.Fare.values.reshape(-1,1)) 

(4)形成新属性FamilySize

data_all['FamilySize'] = data_all.Parch + data_all.SibSp

(5)One-Hot Encoding

针对Embarked(‘S’, ‘C’, 'Q’三个取值)、Pclass(1,2,3三个取值)字段,若简单的将其映射为数值 0 , 1 , 2 0,1,2 0,1,2,训练时模型会认为该属性的数据具有线性特征。

机器学习中,一般将离散型特征(标称属性、序数属性)的每个取值都看成一种状态,若该特征中有 N N N个不相同的取值,可通过One-Hot Encoding(独热编码),将其转换为 N N N个状态,只有一个状态位值为 1 1 1,其他状态位都是 0 0 0,即将其转换为 N N N个二元特征。使得模型具有较强的非线性能力。

对于SexPclassEmbarked属性使用pd.get_dummies方法,将其转换为One-hot向量,如将Embarked转换为 [ 1 , 0 , 0 ] , [ 0 , 1 , 0 ] , [ 0 , 0 , 1 ] [1,0,0],[0,1,0],[0,0,1] [1,0,0],[0,1,0],[0,0,1]

对于Cabin,将其展开为两个属性:数据中Cabin值为空的Cabin_null取值为1,Cabin_nnull取值为0;Cabin值不为空的Cabin_null取值为1,Cabin_nnull取值为0。

Sex_dummies = pd.get_dummies(data_all.Sex, prefix= 'Sex')
Pclass_dummies = pd.get_dummies(data_all.Pclass,prefix= 'Pclass')
Embarked_dummies = pd.get_dummies(data_all.Embarked,prefix= 'Embarked')

data_all['Cabin_null'] = np.array(data_all.Cabin.isnull()).astype(np.int32)
data_all['Cabin_nnull'] = np.array(data_all.Cabin.notnull()).astype(np.int32)

各个特征(属性)的处理总结如下

属性名 处理方式
Pclass 形成One-Hot向量
Name 未处理
Sex 形成One-Hot向量
Age 根据称谓填充空值后,离散化
SibSp 形成新属性FamilySize
Parch
Ticket 未处理
Fare 归一化
Cabin 形成One-Hot向量
Embarked 形成One-Hot向量

构建训练数据:

data_all = pd.concat([data_all, Sex_dummies, Pclass_dummies,Embarked_dummies], axis=1)

feature = [ 'Age','Fare','FamilySize','Cabin_null','Cabin_nnull','Sex_female','Sex_male','Pclass_1','Pclass_2','Pclass_3','Embarked_C','Embarked_Q','Embarked_S']

X = data_all.loc[data.index][feature] 
y = data.Survived

3. 模型训练

(1)组合分类器

组合分类器将多个不同类型的分类器(例如逻辑回归,SVM,随机森林)的预测结果进行组合,将多数分类器输出的结果作为最终的预测结果(hard voting classifier)。如果所有的分类器都能够预测类别的概率(拥有predict_proba方法),可将平均概率最高的结果作为最终的预测结果(soft voting classifier)通常比hard voting classifier效果好。

(2)参数优化

机器学习中的一项主要工作是参数优化(俗称“调参”)。sklearn提供了GridSearchCV方法,它网格式的自动遍历提供的参数组合,通过交叉验证确定最优化结果的参数(可通过best_params_属性查看)。

本文使用的分类器包括:随机森林、支持向量机、GBDT和神经网络。

from sklearn.model_selection import GridSearchCV, StratifiedKFold
kfold = StratifiedKFold(n_splits=10)

clf_RF = RF()
rf_param_grid = {"max_depth": [None],
              "max_features": [1, 3, 10],
              "min_samples_split": [2, 3, 10],
              "min_samples_leaf": [1, 3, 10],
              "bootstrap": [False],
              "n_estimators" :[100,300,500],
              "criterion": ["gini"]}
gsRF = GridSearchCV(clf_RF,param_grid = rf_param_grid, cv=kfold,scoring="accuracy", n_jobs= 4, verbose = 1)
gsRF.fit(X,y)
rf_best = gsRF.best_estimator_

clf_SVC = SVC(probability=True)
svc_param_grid = {'kernel': ['rbf'], 
                  'gamma': [ 0.001, 0.01, 0.1, 1],
                  'C': [1, 10, 50, 100,200,300, 1000]}
gsSVC = GridSearchCV(clf_SVC,param_grid = svc_param_grid, cv=kfold, scoring="accuracy", n_jobs= 4, verbose = 1)
gsSVC.fit(X,y)
svm_best = gsSVC.best_estimator_

clf_GB = GB()
gb_param_grid = {'loss' : ['deviance'],
              'n_estimators' : [100,300,500],
              'learning_rate': [0.1, 0.05, 0.01],
              'max_depth': [4, 8],
              'min_samples_leaf': [100,150],
              'max_features': [0.3, 0.1]}
gsGB = GridSearchCV(clf_GB,param_grid = gb_param_grid, cv=kfold, scoring="accuracy", n_jobs= 4, verbose = 1)
gsGB.fit(X,y)
gb_best = gsGB.best_estimator_

clf_MLP = MLP()
mlp_param_grid = {'hidden_layer_sizes' : [100,200,300,400,500],
              'activation' : ['relu'],
              'solver' : ['adam'],
              'learning_rate_init': [0.01, 0.001],
              'max_iter': [5000]}
gsMLP = GridSearchCV(clf_MLP,param_grid = mlp_param_grid, cv=kfold, scoring="accuracy", n_jobs= 4, verbose = 1)
gsMLP.fit(X,y)
mlp_best = gsMLP.best_estimator_

votingC = VotingClassifier(estimators=[('clf_GB', gb_best),  ('clf_RF', rf_best),('clf_SVC', svm_best),
('clf_MLP',mlp_best)],voting='soft', n_jobs=4)

votingC = votingC.fit(X, y)

4. 模型部署

使用predict方法预测,将生成的结果文件在Kaggle页面点击Submit Predictions进行提交,Kaggle会给出准确率和排名。文章来源地址https://www.toymoban.com/news/detail-786946.html

X_sub = data_all.loc[data_sub.index][feature]  #提取测试数据特征
y_sub = votingC.predict(X_sub) #使用模型预测数据标签
result = pd.DataFrame({'PassengerId':data_sub.index,'Survived':y_sub})
result.to_csv(r'D:\[DataSet]\1_Titanic\submission.csv', index=False) 

到了这里,关于Kaggle实战入门:泰坦尼克号生还预测(进阶版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 速通——决策树(泰坦尼克号乘客生存预测案例)

    一、决策树 1、概述         树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果 2、建立过程         1. 特征选择:选取有较强分类能力的特征。         2. 决策树生成:根据选择的特征生成决策树。  

    2024年01月21日
    浏览(49)
  • 泰坦尼克号可视化数据分析报告

    上一节已经用用逻辑回归算法预测泰坦尼克号人员存活情况,但是不了解什么样的人容易存活;因此,用数据分析方法继续探究数据背后隐藏的秘密,并用数据可视化方法展示出来。 目录 提出问题 理解数据 采集数据 导入数据 查看数据 数据清洗 数据处理 幸存率与家庭类别

    2024年02月11日
    浏览(57)
  • 深度学习项目:泰坦尼克号生存预测【附完整源码】

    数据处理 建立模型 训练模型 评估模型 模型预测 保存模型 数据文件: 2.1 泰塔尼克号数据 数据描述: RMS 泰坦尼克号的沉没是历史上最为人熟知的海难事件之一。 1912 年 4 月 15 日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造

    2024年02月09日
    浏览(52)
  • 基于用Hive泰坦尼克号乘客信息存储与分析

    实现以下任务: 创建数据库taitan 创建乘客信息表 导入数据到表中 统计获救与死亡情况 统计舱位分布情况 统计港口登船人数分布情况 统计性别与生存率的关系 统计客舱等级与生存率的关系 统计登船港口与生存率的关系 1.创建一个内/外部表,指定数据的存放路径。 (1)创建

    2024年02月06日
    浏览(53)
  • 极简sklearn-使用决策树预测泰坦尼克号幸存者

    泰坦尼克号幸存者数据集是kaggle竞赛中入门级的数据集,今天我们就来用决策树来预测下哪些人会成为幸存者。 数据集下载地址: https://download.csdn.net/download/ting4937/87630361  数据集中包含两个csv文件,data为训练用数据,test为测试集。 首先我们通过pandas来读取并查看数据 数据如

    2024年02月04日
    浏览(81)
  • 深度学习之构建MPL神经网络——泰坦尼克号乘客的生存分析

          大家好,我是带我去滑雪!       本期使用泰坦尼克号数据集,该数据集的响应变量为乘客是生存还是死亡(survived,其中1表示生存,0表示死亡),特征变量有乘客舱位等级(pclass)、乘客姓名(name)、乘客性别(sex,其中male为男性,female为女性)、乘客年龄(ag

    2024年02月05日
    浏览(47)
  • 用决策树或随机森林解决泰坦尼克号乘客生存预测(内附数据集百度网盘)

     实现该模型的训练要用到的主要算法和实现思路是   首先的首先当然是导包啦   然后就是读取文件里面的数据进来了 数据集下载:百度网盘 链接:https://pan.baidu.com/s/1slaouE4Es37U8u0U-kDJnw 提取码:ss5o   接着是进行对数据进行基本的处理了,以下是作者的处理方法: 第一步是

    2024年02月15日
    浏览(49)
  • 泰坦尼克号沉船数据分析与可视化、数据建模与分类预测【Python | 机器学习-Sklearn】

    前言:泰坦尼克号,不只是卡梅隆导演的经典电影,它是一个真实存在的悲剧,也是电影的故事背景与题材。作为一个IT人,分析事实还得看数据,了解到泰坦尼克号沉船幸存者多为老人、小孩和妇女,而牺牲者多为年轻的男士,这样的历史数据,让我感受到了人性之美与善

    2024年02月02日
    浏览(54)
  • 【从零开始学Kaggle竞赛】泰坦尼克之灾

    注册kaggle账号后,进入titanic竞赛界面 https://www.kaggle.com/competitions/titanic 进入后界面如下 Overview部分为竞赛整体介绍,包括竞赛介绍以及结果评估。 Data部分为数据集介绍,介绍使用的数据集。 Code部分为提交的代码 泰坦尼克号的沉没是历史上最臭名昭著的沉船事故之一。 19

    2024年02月13日
    浏览(92)
  • 泰坦尼克沉船存活率(机器学习,Python)

    目录 1,实验要求: 2,报告内容 引言 数据处理 导入数据 查看数据集信息 数据清洗  特征工程 特征提取 特征选择 生还率预测说明 模型构建 建立训练数据集和测试数据集  选择不同的机器学习算法 训练模型,评估模型  方案实施 生存预测 参数调优 结论 改进方法 详细描

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包