基于pytorch的部分鸢尾花数据集多项分类

import torch
import torch.nn as nn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import torch.nn.functional as F
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
from sklearn.model_selection import train_test_split

data = pd.read_csv(r'D:/pycharmworkspace/ISLR-master/iris.csv')
#将数据Species列由字母转换成数字
data['Species']=pd.factorize(data.Species)[0]
#X不要第零列,不要最后一列 第一个:代表全部的行 第二个:代表列
X = data.iloc[:,1:-1].values
#Y只要特定一列
Y = data.Species.values
train_x,test_x,train_y,test_y=train_test_split(X,Y)
#将数据转换成Tensor LongTensor等价于int64
train_x = torch.from_numpy(train_x).type(torch.float32)
train_y = torch.from_numpy(train_y).type(torch.int64)
test_x = torch.from_numpy(test_x).type(torch.float32)
test_y = torch.from_numpy(test_y).type(torch.LongTensor)

#数据只有150行故batch也要小一点
batch = 8
no_of_batches = len(data)//batch
epochs = 1000

#TensorDataset()可以对tensor进行打包即合并
trai
  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
PyTorch是一个基于Python的开源机器学习库,它提供了丰富的工具和函数来简化深度学习模型的开发和训练过程。下面是使用PyTorch实现鸢尾花分类的一般步骤: 1. 导入必要的库和模块: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset ``` 2. 准备数据集: 首先,你需要准备鸢尾花数据集。可以使用`torchvision.datasets`中的`datasets`模块来加载常见的数据集,或者自己创建一个继承自`torch.utils.data.Dataset`的数据集类。 3. 创建模型: 定义一个继承自`torch.nn.Module`的模型类,并在其中定义模型的结构。可以使用`torch.nn`中的各种层(如全连接层、卷积层等)来构建模型。 4. 定义损失函数和优化器: 选择适当的损失函数(如交叉熵损失)和优化器(如随机梯度下降SGD)来训练模型。 5. 训练模型: 使用训练数据对模型进行训练。通过迭代训练数据集中的样本,计算损失并反向传播更新模型参数。 6. 模型评估: 使用测试数据对训练好的模型进行评估,计算模型在测试集上的准确率或其他指标。 下面是一个简单的示例代码,演示了如何使用PyTorch实现鸢尾花分类: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 准备数据集 iris = load_iris() X = iris.data y = iris.target # 数据预处理 scaler = StandardScaler() X = scaler.fit_transform(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义数据集类 class IrisDataset(Dataset): def __init__(self, X, y): self.X = torch.tensor(X, dtype=torch.float32) self.y = torch.tensor(y, dtype=torch.long) def __len__(self): return len(self.X) def __getitem__(self, idx): return self.X[idx], self.y[idx] # 创建模型类 class IrisClassifier(nn.Module): def __init__(self): super(IrisClassifier, self).__init__() self.fc1 = nn.Linear(4, 16) self.fc2 = nn.Linear(16, 3) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return x # 创建数据加载器 train_dataset = IrisDataset(X_train, y_train) train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True) # 创建模型和优化器 model = IrisClassifier() criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # 训练模型 num_epochs = 100 for epoch in range(num_epochs): for inputs, labels in train_loader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() # 模型评估 test_dataset = IrisDataset(X_test, y_test) test_loader = DataLoader(test_dataset, batch_size=16, shuffle=False) correct = 0 total = 0 with torch.no_grad(): for inputs, labels in test_loader: outputs = model(inputs) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() accuracy = correct / total print(f"Accuracy: {accuracy}") ``` 这是一个简单的示例,你可以根据需要进行修改和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值