Titanic分析&预测(二)

IDE: Jupyter Notebook + Python 3
目标:根据已有数据集中的年龄、性别等属性和存活与否,建立回归模型,并利用测试集提供的数据,进行存活预测。这次实验参考的是一个投票数最多的kernel,采用的是集成学习(Ensemble Learning)的思想。

集成学习(ensemble learning)会构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。 (摘自《机器学习》周志华)

从周老师对集成学习的解释可以大概看出构建集成学习模型的步骤:

⚪先构建多个学习器,可以是不同类型,如决策树和神经网络。
⚪将以上的学习器进行结合,就是能够体现“集成”这一思想的关键。

由于单一的学习器在给定数据集之下会体现不同的性能,泛化能力也有强有弱。为了增强模型的泛化能力,将以某种方式将同一数据集下训练的多个学习器结合起来,从而获得比单一学习器更好的性能。常见的结合策略有平均法、投票法和学习法(Stacking)。

本次实验需要用到的包:

import numpy as np
import pandas as pd
import re
import seaborn as sns
import xgboost as xgb
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

from sklearn.ensemble import (RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, ExtraTreesClassifier)
from sklearn.svm import SVC 
from sklearn.model_selection import KFold

加载数据集,显示数据集的信息。(图略)

# 加载数据集
train = pd.read_csv('D:\Dataset\Titanic_ensembling\\train.csv')
test = pd.read_csv('D:\Dataset\Titanic_ensembling\\test.csv')
PassengerId = test['PassengerId']

先做数据处理,包括缺失值和类型转换
缺失值处理

full_data = [train, test]
for dataset in full_data:
    # embarked和Fare缺失值处理
    dataset['Embarked'] = dataset['Embarked'].fillna('S')
    dataset['Fare'] = dataset['Fare'].fillna(train['Fare'].median())
    # 年龄缺失值处理
    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)

特征工程,对数值型和类别型的数据进行分析,发现新的特征。
**a.**Sex属性根据性别不同将数据值改为数值,0(female)/1(male)

for dataset in full_data:
    # Mapping Sex
    dataset['Sex'] = dataset['Sex'].map( {
  'female': 0, 'male': 1} ).astype(int)

**b.**Cabin属性根据有无Cabin创建‘Has_Ccabin’特征,0(无Cabin)/1(有Cabin)

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)

**c.**Embarked属性根据港口不同将数据值改为数值,0(S)/1(C)/2(Q)

for dataset in full_data:
    # Mapping Embarked
    dataset['Embarked'] = dataset['Embarked'].map( {
  'S'
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值