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

在Python中导入CSV数据生成机器学习用张量的最佳方法是什么?

最佳实现方案

针对你1000行4列的小体量CSV数据,结合PyTorch建模的需求,直接用pandas+PyTorch原生工具链即可,无需引入额外复杂组件,具体步骤如下:

1. 依赖安装

首先安装需要的基础库:
pip install pandas numpy scikit-learn torch

2. CSV数据导入与预处理

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler, LabelEncoder

# 读取CSV文件,首行会自动识别为字段名
df = pd.read_csv("你的数据文件路径.csv")
# 可选:检查数据格式是否正确
# print(df.head())

# 处理缺失值(根据你的数据情况二选一即可)
df = df.dropna() # 直接删除含缺失值的行
# df = df.fillna(df.mean(numeric_only=True)) # 用列均值填充数值型缺失值

# 拆分特征列和标签列,这里假设前3列为特征,最后1列为预测目标,可根据你的实际字段调整
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values

# 若为分类任务、标签是字符串类型,需要转为数值编码
# le = LabelEncoder()
# y = le.fit_transform(y)

# 特征归一化,避免不同特征量级差异影响模型效果
scaler = StandardScaler()
X = scaler.fit_transform(X)

3. 转换为PyTorch可用的数据集格式

import torch
from torch.utils.data import TensorDataset, DataLoader, random_split

# 转为PyTorch张量,dtype根据任务类型调整:
# 回归任务标签用torch.float32,分类任务标签用torch.long
X_tensor = torch.tensor(X, dtype=torch.float32)
y_tensor = torch.tensor(y, dtype=torch.float32) # 分类任务改为dtype=torch.long

# 封装为数据集
full_dataset = TensorDataset(X_tensor, y_tensor)
# 按8:2拆分训练集和测试集
train_size = int(0.8 * len(full_dataset))
test_size = len(full_dataset) - train_size
train_dataset, test_dataset = random_split(full_dataset, [train_size, test_size])

# 创建数据加载器,小体量数据batch_size可设为16/32
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

4. 简易神经网络构建与训练示例

import torch.nn as nn
import torch.nn.functional as F

class SimpleNN(nn.Module):
    # input_dim为特征数量,这里是3;output_dim为输出维度,回归任务设1,分类任务设类别数
    def __init__(self, input_dim=3, hidden_dim=16, output_dim=1):
        super().__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.fc2 = nn.Linear(hidden_dim, hidden_dim)
        self.output = nn.Linear(hidden_dim, output_dim)
    
    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        return self.output(x)

# 初始化模型、损失函数、优化器
model = SimpleNN()
criterion = nn.MSELoss() # 分类任务替换为nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练循环示例
epochs = 50
for epoch in range(epochs):
    model.train()
    train_loss = 0
    for batch_X, batch_y in train_loader:
        optimizer.zero_grad()
        pred = model(batch_X)
        loss = criterion(pred, batch_y.unsqueeze(1)) # 分类任务不需要unsqueeze
        loss.backward()
        optimizer.step()
        train_loss += loss.item()
    # 可选:每轮打印训练损失
    # print(f"Epoch {epoch+1}/{epochs}, Train Loss: {train_loss/len(train_loader):.4f}")

注意事项

  • 若你的CSV字段顺序和默认的前3列特征、最后1列标签不一致,调整iloc的索引范围即可
  • 分类任务下,模型的output_dim要和你的类别数量保持一致,损失函数同步替换为交叉熵损失
  • 训练后的模型做预测时,输入的特征需要先用之前拟合好的scaler做归一化变换,再转张量输入模型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:09