You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyTorch仅通过性别、年龄、体重预测整数测试分数

PyTorch实现基于年龄、体重、性别的测试分数回归(整数输出)

1. 数据预处理

先处理分类特征(性别),将字符串转换为数值编码(比如"male"设为1,"female"设为0),再把所有数据转为PyTorch张量,用Dataset和DataLoader实现批量加载:

import torch
from torch.utils.data import Dataset, DataLoader
import pandas as pd

class ScoreDataset(Dataset):
    def __init__(self, csv_file):
        self.data = pd.read_csv(csv_file)
        # 性别编码
        self.data['gender'] = self.data['gender'].map({'male': 1, 'female': 0})
        # 提取特征与标签
        self.features = self.data[['age', 'weight', 'gender']].values
        self.labels = self.data['test score'].values
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        feature = torch.tensor(self.features[idx], dtype=torch.float32)
        label = torch.tensor(self.labels[idx], dtype=torch.float32)
        return feature, label

# 加载训练数据
train_dataset = ScoreDataset('train_data.csv')
train_loader = DataLoader(train_dataset, batch_size=2, shuffle=True)

2. 定义回归模型

和图像分类不同,回归任务无需最后一层的分类激活函数(如Softmax),用简单全连接层即可,输出维度为1(对应单个测试分数):

class ScorePredictor(torch.nn.Module):
    def __init__(self):
        super().__init__()
        # 输入特征数为3(年龄、体重、性别)
        self.fc1 = torch.nn.Linear(3, 16)
        self.fc2 = torch.nn.Linear(16, 8)
        self.fc3 = torch.nn.Linear(8, 1)
    
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        x = self.fc3(x)  # 最后一层无激活,输出连续值
        return x

model = ScorePredictor()

3. 训练流程

回归任务常用均方误差损失(MSELoss),优化器选Adam或SGD均可:

criterion = torch.nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

epochs = 100
for epoch in range(epochs):
    running_loss = 0.0
    for features, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(features)
        # 调整标签形状与输出匹配
        loss = criterion(outputs, labels.unsqueeze(1))
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    
    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{epochs}], Loss: {running_loss/len(train_loader):.4f}')

4. 输出整数结果

模型输出是连续浮点值,通过torch.round()取整或直接转换为Python整数即可得到整数形式的预测结果:

# 测试示例:年龄22、体重75、男性
test_feature = torch.tensor([22, 75, 1], dtype=torch.float32)
model.eval()
with torch.no_grad():
    output = model(test_feature.unsqueeze(0))
    # 取整后转成整数
    int_score = int(torch.round(output).item())
print(f"预测测试分数:{int_score}")

如果测试分数有固定整数区间(如0-100),也可以把任务当作分类处理,但回归+取整的方式更直接适配你的需求。

内容的提问来源于stack exchange,提问作者kabakaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:33:23