实现随机梯度下降

Beginner

This tutorial is from open-source community. Access the source code

简介

随机梯度下降(Stochastic Gradient Descent,SGD)是机器学习中一种常用的优化算法。它是梯度下降算法的一种变体,在每次迭代时使用随机选择的训练数据子集。这使得它在计算上效率很高,适合处理大型数据集。在本实验中,我们将逐步介绍如何使用 scikit-learn 在 Python 中实现 SGD。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到笔记本标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 82%。获得了学习者 100% 的好评率。

导入库

首先,我们需要为本实验导入必要的库,包括 scikit-learn。

import numpy as np
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

加载数据

接下来,我们将从 scikit-learn 中加载鸢尾花数据集。这个数据集是一个经典的机器学习数据集,由鸢尾花的测量数据及其物种标签组成。

iris = load_iris()
X = iris.data
y = iris.target

数据预处理

在应用随机梯度下降(SGD)之前,对数据进行预处理通常是有益的。在这种情况下,我们将使用 scikit-learn 的 StandardScaler 对特征进行标准化。

scaler = StandardScaler()
X = scaler.fit_transform(X)

划分数据

我们将把数据集划分为训练集和测试集。训练集将用于训练随机梯度下降(SGD)分类器,而测试集将用于评估其性能。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

训练分类器

现在我们可以使用 scikit-learn 的 SGDClassifier 类来创建并训练随机梯度下降(SGD)分类器。我们将使用“铰链”损失函数,它通常用于线性分类器。

clf = SGDClassifier(loss='hinge', random_state=42)
clf.fit(X_train, y_train)

进行预测

一旦分类器训练完成,我们就可以用它对新数据进行预测。在这里,我们将用它来预测测试集的目标类别。

y_pred = clf.predict(X_test)

评估性能

最后,我们将通过计算分类器在测试集上预测的准确率来评估其性能。

accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

总结

在本实验中,我们学习了如何使用 scikit-learn 实现随机梯度下降(SGD)。我们加载了鸢尾花数据集,对数据进行预处理,将其拆分为训练集和测试集,训练了一个 SGD 分类器,进行了预测,并评估了分类器的性能。SGD 是一种强大的优化算法,在机器学习中广泛用于解决大规模问题。