深度学习titanic(初学)Kaggle刘二作业第八课

b站刘二视频,地址:

《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili

代码 (数据可私信或评论获取)

import torch
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from torch.utils.data import DataLoader
from torch.utils.data import Dataset

#-------------------------------------------step1  prepare data----------------------------------------

class Data(Dataset):
    def __init__(self, filepath):
        xy = pd.read_csv(filepath)
        self.len = xy.shape[0]
        feature = ["Pclass", "Sex", "SibSp", "Parch", "Fare"] #选取用的特征

        self.x_data = torch.from_numpy(np.array(pd.get_dummies(xy[feature])))
        self.y_data = torch.from_numpy(np.array(xy["Survived"]))

    def __getitem__(self, item):
        return self.x_data[item], self.y_data[item]

    def __len__(self):
        return self.len

dataset = Data('train.csv')
dataloder = DataLoader(dataset=dataset, batch_size=32, shuffle=True)

#------------------------------------------setp2 design model--------------------------------------------

class Modle(torch.nn.Module):
    def __init__(self):
        super(Modle, self).__init__()
        self.linear1 = torch.nn.Linear(6, 3)
        self.linear2 = torch.nn.Linear(3, 1)
        self.sigmoid = torch.nn.Sigmoid()

    def forward(self, x):
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        return x

    def predict(self, x):#对test进行预测
        with torch.no_grad():
            x = self.forward(x)
            y = []

            for i in x:
                if i > 0.5:
                    y.append(1)
                else:
                    y.append(0)
            return y

modle = Modle()

#---------------------------------------step3    constuct loss and optimizer-----------------------------

criteration = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.SGD(modle.parameters(), lr=0.01)

#---------------------------------------step4 traning cycle------------------------------------------

if __name__ == '__main__':

    loss_lst = []
    for epoch in range(1000):
        sum = 0
        for i, data in enumerate(dataloder, 0):
            inputs, labels = data
            inputs = inputs.float()
            labels = labels.float()

            y_pred = modle(inputs)
            y_pred = y_pred.squeeze(-1)#前向输出结果是[[12],[34],[35],[23],[11]]这种,需要将这个二维矩阵转换成一行[12,34,35,23,11]
            #print(y_pred.size(), labels.size())
            loss = criteration(y_pred, labels)
            sum += loss.item()

            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

        loss_lst.append(sum / dataloder.batch_size)

    #可视化
    num_lst = [i for i in range(len(loss_lst))]
    plt.plot(num_lst, loss_lst)
    plt.xlabel('epoch')
    plt.ylabel('loss')
    plt.show()

    #测试集
    test_data = pd.read_csv('test.csv')
    feature = ["Pclass", "Sex", "SibSp", "Parch", "Fare"]  # 选取用的特征

    test = torch.from_numpy(np.array(pd.get_dummies(test_data[feature])))
    y = modle.predict(test.float())
    outputs = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': y})
    outputs.to_csv('predict_titanic', index=False)  # index=False 代表不保存索引
    outputs.head()








 

输出结果

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
选题背景 Titanic生存概率预测是Kaggle平台上的经典竞赛项目,泰坦尼克号成员存活的数据集非常适合新手开始作为机器学习项目和Kaggle竞赛的练手。我们将在该项目中探索具备何种特征的人在此次海滩中幸存的几率更高,并通过改建机器学习模型和深度学习模型来预测乘客的生存率。Titanic项目的描述如下所示: 泰坦尼克号的沉没是历史上最声明远扬的航海事件 1912年4月15日,在她的处女航中,被广泛认为的“沉没” RMS泰坦尼克号与冰山相撞后沉没。 不幸的是,船上没有足够的救生艇供所有人使用,导致2224名乘客和机组人员中的1502人死亡 虽然幸存有一些运气,但似乎有些人比其他人更有可能生存 在这一挑战中,我们要求您建立一个预测模型来回答以下问题:“什么样的人更有可能生存?” 您可以使用乘客数据(即姓名,年龄,性别,社会经济舱等)来进行预测 开发环境 操作系统:Macos Python版本:3.7.4 Anaconda版本:4.9.2 tensorflow版本:2.1.0 keras版本:1.1.0 1 数据源集数据处理 1.1 数据源 数据集来自Kaggle网站提供的数据集,Kaggle提供的乘员数据分为两个部分: 训练集(train.csv) 测试集(test.csv) 训练集将用于构建我们的机器学习/深度学习模型。并且在训练集中对于每位乘客我们会有表示该乘客是否存活的label,也就是survival字段。在训练集中会给出每一位乘客的特征,我们需要从这些乘客的特征当中学得一些知识,或者可以使用特征工程来创建新的特征来帮助模型的构建 测试集数据将用来评判我们模型的表现。因此对于测试集中的每一位乘客没有代表该乘客是否存活的label,我们的模型需要根据每一位乘客的特征值来输出相应的label,真实的label将由kaggle网站保留
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值