zoukankan      html  css  js  c++  java
  • 泰坦尼克号生存者预测

    该项目主要包含以下四个步骤步骤

    1.数据理解

    2.数据预处理

    3.数据建模

    数据集可以在kaggle网站下载,也可以到博主的网盘下载

    背景介绍

    根据titanic乘客的信息预测其是否能存活

    titanic数据集的样本共有11个特征,分别为

    PassengerId:乘客的编号
    Pclass:船舱的等级
    Name:姓名 
    Sex:性别
    Age:年龄
    SibSp:非直系亲属的数量
    Parch:直系亲属的数量
    Ticket:船票号码
    Fare:船票价格
    Cabin:船舱位置
    Embarked:登船的入口

    在训练集中共891位旅客,其中幸存的旅客占38.38%

    Jupyter Notebook代码如下

    import pandas as pd
    import numpy as np
    from sklearn import tree
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import GridSearchCV
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    import graphviz
    import csv
    #读取训练数据
    data = pd.read_csv('train.csv') 
    #查看data的信息,可以看到data的列名、各列的非空项数量、各列的数据类型
    data.info() 
    #查看data的前5行
    data.head() 

    #数据预处理函数
    def data_preprocess(data, type):
        #删除缺失值过多的列,和观察判断来说和预测的y没有关系的列
        data.drop(["Cabin","Name","Ticket"],inplace=True,axis=1)
        #处理缺失值,对缺失值较多的列进行填补,有一些特征只确实一两个值,可以采取直接删除记录的方法
        data["Age"] = data["Age"].fillna(data["Age"].mean())
        if type == 'train':
            data = data.dropna() 
        #将二分类变量转换为数值型变量
        data["Sex"] = (data["Sex"]== "male").astype("int")
        #将三分类变量转换为数值型变量
        labels = data["Embarked"].unique().tolist()
        data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x)) 
        return data
    #数据预处理
    data = data_preprocess(data, 'train') 
    #划分特征与标签
    Xdata = data.iloc[:,data.columns != "Survived"] 
    Ydata = data.iloc[:,data.columns == "Survived"] 
    #划分训练集与测试集
    from sklearn.model_selection import train_test_split
    Xtrain, Xtest, Ytrain, Ytest = train_test_split(Xdata,Ydata,test_size=0.2)
    #修正测试集和训练集的索引
    for i in [Xtrain, Xtest, Ytrain, Ytest]:
        i.index = range(i.shape[0]) 
    #使用不同深度的决策树进行训练和测试
    train_scores = []
    test_scores = [] 
    clfs = []
    max_depth = 20
    for i in range(1,max_depth+1):
        clf = DecisionTreeClassifier(random_state=20
                                     ,max_depth=i
                                     ,criterion="entropy"
                                    )
        clf = clf.fit(Xtrain, Ytrain) 
        train_scores.append(clf.score(Xtrain,Ytrain))
        test_scores.append(clf.score(Xtest,Ytest))
        clfs.append(clf) 
    print(max(test_scores))
    plt.plot(range(1,max_depth+1),train_scores,color="red",label="train")
    plt.plot(range(1,max_depth+1),test_scores,color="blue",label="test")
    plt.xticks(range(1,max_depth+1))
    plt.legend() 
    plt.show() 

    #选择在测试集上表现最好的决策树,
    n = test_scores.index(max(test_scores))  
    clf = clfs[n] #测试一下这棵最好的决策树
    score = clf.score(Xtest, Ytest)  
    print(score) 
    #用全部数据训练最好的那棵树
    clf = clf.fit(Xdata, Ydata) 
    #读取参赛数据并进行数据预处理
    data = pd.read_csv('test.csv') 
    data = data_preprocess(data, 'test') 
    data["Fare"] = data["Fare"].fillna(data["Fare"].mean())  #填充缺失值  
    #对参赛样本进行预测
    result = clf.predict(data) 
    #将结果写入csv文件
    csvfile = open("result.csv","w",newline = "")     
    writer = csv.writer(csvfile) 
    data = np.array([list(range(892,1310)),list(result)])
    writer.writerow(['PassengerId','Survived']) 
    writer.writerows(data.T)  
    csvfile.close() 
    print('finish')   

    Kaggle排名

  • 相关阅读:
    codeforces C. Fixing Typos 解题报告
    codeforces B. The Fibonacci Segment 解题报告
    codeforces B. Color the Fence 解题报告
    codeforces B. Petya and Staircases 解题报告
    codeforces A. Sereja and Bottles 解题报告
    codeforces B. Levko and Permutation 解题报告
    codeforces B.Fence 解题报告
    tmp
    API 设计 POSIX File API
    分布式跟踪的一个流行标准是OpenTracing API,该标准的一个流行实现是Jaeger项目。
  • 原文地址:https://www.cnblogs.com/bill-h/p/13281182.html
Copyright © 2011-2022 走看看