〖码银送书第三期〗《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官方文档: