homework4——二分类

部署运行你感兴趣的模型镜像

使用Titanic数据集,label是 ‘Survived’

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

# 二分类
# data: https://www.kaggle.com/c/titanic/data

# 定义数据类
class TitanicData(Dataset):
    def __init__(self, filepath):
        # 读data
        xy = pd.read_csv(filepath, sep=',')  # pd.read_csv自动处理标题行  直接在这里str转float会出错,所以在后面分开处理
        self.len = xy.shape[0]
        # features选择Pclass,SibSp,Parch和Fare
        self.x_data = torch.tensor(xy[['Pclass', 'SibSp', 'Parch', 'Fare']].values, dtype=torch.float32)
        # 标签
        self.y_data = torch.tensor(xy[['Survived']].values, dtype=torch.float32)

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

    def __len__(self):
        return self.len


titanic = TitanicData("./datasets/titanic/train.csv")

# 加载数据
dataloader = DataLoader(dataset=titanic, batch_size=32, shuffle=True)


# classifier
class TianicModel(torch.nn.Module):
    def __init__(self):
        super(TianicModel, self).__init__()
        self.linear1 = torch.nn.Linear(4, 2)
        self.linear2 = torch.nn.Linear(2, 1)
        self.relu = torch.nn.ReLU()
        self.sigmoid = torch.nn.Sigmoid()

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

# loss和optimizer
criterion = torch.nn.BCELoss(reduction='mean')
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

loss = []

for epoch in range(100):
    for i, (inputs, label) in enumerate(dataloader):
        # forward
        y_pred = model(inputs)
        l = criterion(y_pred, label)
        # backward
        optimizer.zero_grad()
        l.backward()
        # update
        optimizer.step()
    print(f"epoch: {epoch},\tloss: {l.item()}")
    loss.append(l.item())


# 画图
loss = np.array(loss)
plt.plot(range(100), loss)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
plt.close()


#
# # 预测所有女乘客的存活情况
# df = pd.read_csv("./datasets/titanic/test.csv")
# # 提取所有女乘客的信息
# excel = df.loc[df['Sex'] == 'female', :]
# excel = excel[['PassengerId', 'Pclass', 'SibSp', 'Parch', 'Fare']]
# # 提取features
# test = torch.tensor(excel[['Pclass', 'SibSp', 'Parch', 'Fare']].values, dtype=torch.float32)
# # predict
# with torch.no_grad():
#     y_pred = model(test)
# y_pred = y_pred.round()  # 二分类,将概率转为0或1
# # 将tensor转换为Series时,要保证是一维张量
# y_pred = y_pred.numpy().flatten()
# # 生成新的csv
# New =excel['PassengerId'].to_frame()   # 转成DataFrame
# New['Survived'] = y_pred
# New.to_csv("./datasets/titanic/gender.csv", index=False)

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值