Titanic : Machine Learning from Disaster

这篇博客详细介绍了利用机器学习分析泰坦尼克号乘客生存情况,重点在于堆叠模型的实践。作者首先探讨了问题背景,接着进行特征工程和数据清洗,然后使用随机森林、AdaBoost、SVM等模型生成一阶预测。通过出折外预测和特征重要性分析,最后用XGBoost进行二阶学习,生成最终的预测结果和提交文件。
摘要由CSDN通过智能技术生成

Titanic: Machine Learning from Disaster

RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。 1912年4月15日,泰坦尼亚号在首次航行中,与冰山相撞后沉没,在2224名乘客和船员中造成1502人死亡。 这场耸人听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。

造成这样的生命损失的原因之一是乘客和船员没有足够的救生艇。 虽然在沉船事件幸存有一些运气,但有些群体比其他人更有可能生存,如妇女,儿童和上层阶级。

在这个挑战中,我们要求完成对可能生存的人的分析。 特别是,我们要求你应用机器学习的工具来预测哪些乘客幸存下来的悲剧。

Practice Skills

  1. Binary classification

  2. Python basics


1. Introduction

该笔记是总结了组合基础学习模型的方法,特别是称为Stacking的集合的变体。 简而言之,堆叠基本分类器用作第一级预测,然后在第二级使用另一个模型对第一级的输出来进行预测。

'''
加载调用数据库
'''
%matplotlib inline
import pandas as pd
import numpy as np
import re
import sklearn
import xgboost as xgb
import seaborn as sns
import matplotlib.pyplot as plt

import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.tools as tls

import warnings
warnings.filterwarnings('ignore')

'''
#得到5个基本模型作为stacking进行预测
'''
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, ExtraTreesClassifier
from sklearn.svm import SVC
from sklearn.cross_validation import KFold;

2. Feature Exploration, Engineering and Cleaning

现在我们将进行一般的工作, 首先是分析手头的数据,进行特征工程以及数字编码任何分类特征。

'''
加载训练和测试数据集
'''
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

'''
存储乘客的ID号
'''
PassengerId = test['PassengerId']
train.head(3)

2.1 Feature Engineering

特征工程的目的是清除相近特征和分类标签属性,将所有的特征转化为数字形式,然后可以直接输入机器学习模型,接下来在开始训练模型之前,我们需要对特征相关性做可视化分析.

full_data = [train, test]

'''
(1)加入我们自己的特征
(2)给出名字的长度
'''
train['Name_length'] = train['Name'].apply(len)
test['Name_length'] = test['Name'].apply(len)

'''
特征表示乘客在Titanic是否有救生艇
'''
train['Has_Cabin'] = train["Cabin"].apply(lambda x: 0 if type(x) == float else 1)
test['Has_Cabin'] = test["Cabin"].apply(lambda x: 0 if type(x) == float else 1)

'''
创造新的家庭成员特征作为SibSp和Parch的组合
'''
for dataset in full_data:
    dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1

'''
从新的特征FamilySize,创造新特征(是否一个人)
'''
for dataset in full_data:
    dataset['IsAlone'] = 0
    dataset.loc[dataset['FamilySize'] == 1, 'IsAlone'] = 1

'''
消除登船地点缺失的数据,并用频率高的代替
'''
for dataset in full_data:
    dataset['Embarked'] = dataset['Embarked'].fillna('S')


'''
去除费用特征缺失数据,并且以他们中位数代替,创建新的特征(费用类别)
'''
for dataset in full_data:
    dataset['Fare'] = dataset['Fare'].fillna(train['Fare'].median())
train['CategoricalFare'] = pd.qcut(train['Fare'], 4)


'''
创建新的年龄分类特征
'''
for dataset in full_data:
    age_avg = dataset['Age'].mean()
    age_std = dataset['Age'].std()
    age_null_count = dataset['Age'].isnull().sum()
    age_null_random_list = np.random.randint(age_avg - age_std, age_avg + age_std, size=age_null_count)
    dataset['Age'][np.isnan(dataset['Age'])] = age_null_random_list
    dataset['Age'] = dataset['Age'].astype(int)
train['CategoricalAge'] = pd.cut(train['Age'], 5)

'''
定义消除乘客名字中的特殊字符
'''
def get_title(name):
    title_search = re.search(' ([A-Za-z]+)\.', name)
    # If the title exists, extract and return it.
    if title_search:
        return title_search.group(1)
    return ""

'''
创建新的名字特征,包含乘客名字主要信息
'''
for dataset in full_data:
    dataset['Title'] = dataset['Name'].apply(get_title)


'''
将所有非常见的标题分组成一个单独的“稀有”组
'''
for dataset in full_data:
    dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col','Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')

    dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')
    dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')
    dataset['Title'] = dataset['Title'].replac
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值