Loading...
Navigation
Table of Contents

Kaggle Titanic实战Data

Referenes

1. 数据初探

PassengerId是乘客ID, Pclass是乘客等级(1/2/3等舱位), SibSp是堂兄弟/妹个数, Parch是父母与小孩个数, Ticket是船票信息, Fare是票价, Cabin是客舱编号, Embarked是登船港口

>>> import pandas as pd
>>> import numpy as np
>>> from pandas import Series,DataFrame
>>> train = pd.read_csv("train.csv")
>>> train.columns.values #查看列名list
array(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype=object)
>>> train.info() #查看每一列的名字, 数据类型等等
>>> train.describe() #查看每一列的均值方差等统计学指标
>>> train[["Sex", "Survived"]].groupby(['Sex'], as_index=False).mean()
    .sort_values(by='Survived', ascending=False)
#按照顺序查看不同性别的生存率
      Sex  Survived
0  female  0.742038
1    male  0.188908

2. 数据处理

数据清洗

数据清洗包含了数据填充, 文本替换等等; 注意, 这里新添加的特征都用小写名字命名, 如name

字符串匹配官方Solutions

数据填充 Age, EmbarkedFare列需要填充空值

#可以用中位数填充
train["Age"] = train["Age"].fillna(train["Age"].median())
#可以填充某个默认值
train["Embarked"] = train["Embarked"].fillna("S")

数据替换 Embarked, CabinName都需要把字符串变成整型

#使用地df.apply来进行替换
def getEmbark(Embarked):
    if Embarked == "S":
        return 1
    elif Embarked == "C":
        return 2
    else:
        return 3
train["embark"] = train["Embarked"].apply(getEmbark)
#使用map进行替换
train["Sex"] = train["Sex"].map( {"female": 1, "male": 0} ).astype(int)

其他技巧 可以添加新的特征family

train["familySize"] = train["SibSp"] + titanic["Parch"] + 1

最后得到的train是一个pd.DataFrame, 长这个样子, 其实中间很多特征都会被丢掉

注意后面用到的训练特征训练label都是DataFrame, 即train[features]train["Survived"].


3. 训练与预测

构造模型 这里简单初始化xgb的分类器

classifier =XGBClassifier(learning_rate=0.1, max_depth=2, silent=True, objective='binary:logistic')

交叉验证kfold: 利用sklean提供的grid_search来进行交叉验证选择参数.

#用到的特征列表
features = ["Pclass", "sex", "child", "fimalysize", "Fare", "embark", "cabin"]
#设置boosting迭代计算次数
param_test = {'n_estimators': list(range(30, 50, 2)),'max_depth': list(range(2, 7, 1))}
#开始定义模型
grid_search = GridSearchCV(estimator = classifier, param_grid = param_test, scoring='accuracy', cv=5)
#填入数据
grid_search.fit(train[features], train["Survived"])
#运行模型并输出日志!
grid_search.grid_scores_, grid_search.best_params_, grid_search.best_score_

预测并输出 参考sklearn里的GridSearchCV

test = pd.read_csv("test.csv")
#用predict方法预测, 模型会自动调用之前的最优参数
test["Survived"] = grid_search.predict(test[features])
#输出成csv文件
test.to_csv("submission.csv", columns=["PassengerId", "Survived"], index=False)

Last updated on Jan 11, 2019.