当前位置:实例文章 » 其他实例» [文章]〖码银送书第三期〗《Python机器学习:基于PyTorch和Scikit-Learn》

〖码银送书第三期〗《Python机器学习:基于PyTorch和Scikit-Learn》

发布人:shili8 发布时间:2024-11-18 04:11 阅读次数:0

**码银送书第三期:Python机器学习**

在前两期的文章中,我们已经介绍了Python编程语言的基本知识和数据分析方面的内容。今天,我们将进入Python机器学习领域,使用PyTorch和Scikit-Learn两个流行的库来实现机器学习模型。

**什么是机器学习?**

机器学习是一种人工智能技术,它允许计算机通过数据自我学习和改进其性能。机器学习算法可以从数据中学习到模式、关系和规律,从而能够预测未来的结果或做出决策。

**PyTorch简介**

PyTorch是Facebook开发的一种动态计算图库,主要用于神经网络的快速 prototyping 和研究。它提供了一个简单易用的API,使得用户可以轻松地定义和训练深度学习模型。

**Scikit-Learn简介**

Scikit-Learn是Python的一个机器学习库,它提供了一系列的算法和工具,包括分类、回归、聚类等多种类型的算法。它也支持PyTorch作为其底层计算引擎。

**案例:手写数字识别**

我们将使用MNIST数据集来训练一个简单的手写数字识别模型。MNIST是最常用的手写数字识别数据集,包含60,000个训练样本和10,000个测试样本,每个样本都是28x28的图像。

### PyTorch实现

import torchimport torch.nn as nnimport torchvisionimport torchvision.transforms as transforms# 设定超参数batch_size =64learning_rate =0.01num_epochs =10# 加载数据集transform = transforms.Compose([transforms.ToTensor()])
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)

# 设定数据加载器train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)

# 定义神经网络模型class Net(nn.Module):
 def __init__(self):
 super(Net, self).__init__()
 self.fc1 = nn.Linear(28*28,128) # input layer -> (28x28) images -> fully connected layer (fc) with128 units self.relu = nn.ReLU()
 self.dropout = nn.Dropout(p=0.2)
 self.fc2 = nn.Linear(128,10)

 def forward(self, x):
 x = torch.flatten(x,1) # flatten the input data x = self.relu(self.fc1(x)) # activation function for hidden layer x = self.dropout(x)
 x = self.fc2(x)
 return x# 实例化模型model = Net()

# 设定损失函数和优化器criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

# 训练模型for epoch in range(num_epochs):
 for i, data in enumerate(train_loader):
 inputs, labels = data optimizer.zero_grad()
 outputs = model(inputs)
 loss = criterion(outputs, labels)
 loss.backward()
 optimizer.step()

 print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))

# 测试模型model.eval()
test_loss =0correct =0with torch.no_grad():
 for data in test_loader:
 inputs, labels = data outputs = model(inputs)
 loss = criterion(outputs, labels)
 test_loss += loss.item()
 _, predicted = torch.max(outputs,1)
 correct += (predicted == labels).sum().item()

accuracy = correct / len(test_dataset)
print('Test Loss: {:.4f}, Accuracy: {:.2f}%'.format(test_loss/len(test_loader), accuracy*100))


### Scikit-Learn实现
from sklearn.datasets import load_mnistfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score# 加载数据集mnist = load_mnist()
X, y = mnist.data, mnist.target# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 实例化模型model = LogisticRegression(max_iter=10000)

# 训练模型model.fit(X_train, y_train)

# 预测结果y_pred = model.predict(X_test)

#评估模型accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: {:.2f}%'.format(accuracy*100))


以上是使用PyTorch和Scikit-Learn两个库来实现手写数字识别模型的案例。通过这些示例,我们可以看到两种库都能够轻松地定义和训练深度学习模型,并且能够获得较高的准确率。

**总结**

在本文中,我们介绍了Python机器学习领域,使用PyTorch和Scikit-Learn两个流行的库来实现机器学习模型。我们通过案例展示了如何使用这些库来训练手写数字识别模型,并且能够获得较高的准确率。

**参考**

* PyTorch官方文档: Scikit-Learn官方文档:

其他信息

其他资源

Top