机器学习 - 随机梯度下降



梯度下降是一种流行的优化算法,用于最小化机器学习模型的成本函数。它的工作原理是迭代地调整模型参数,以最小化预测输出与实际输出之间的差异。该算法通过计算成本函数相对于模型参数的梯度,然后沿梯度的反方向调整参数来工作。

随机梯度下降是梯度下降的一种变体,它为每个训练样本更新参数,而不是在评估整个数据集后更新参数。这意味着 SGD 只使用单个训练样本计算成本函数的梯度,而不是使用整个数据集。这种方法允许算法更快收敛,并且需要更少的内存来存储数据。

随机梯度下降算法的工作原理

随机梯度下降通过从数据集中随机选择单个训练样本并使用它来更新模型参数来工作。此过程会重复进行固定数量的轮次,或者直到模型收敛到成本函数的最小值。

以下是随机梯度下降算法的工作原理:

  • 将模型参数初始化为随机值。

  • 对于每个轮次,随机打乱训练数据。

  • 对于每个训练样本:

    • 计算成本函数相对于模型参数的梯度。

    • 沿梯度的反方向更新模型参数。

  • 重复直到收敛

随机梯度下降和普通梯度下降之间的主要区别在于梯度的计算方式和模型参数的更新方式。在随机梯度下降中,使用单个训练样本计算梯度,而在梯度下降中,使用整个数据集计算梯度。

在 Python 中实现随机梯度下降

让我们来看一个如何在 Python 中实现随机梯度下降的例子。我们将使用 scikit-learn 库在 Iris 数据集上实现该算法,这是一个用于分类任务的流行数据集。在这个例子中,我们将使用它的两个特征(萼片宽度和萼片长度)来预测鸢尾花的种类:

示例

# Import required libraries
import sklearn

import numpy as np
from sklearn import datasets
from sklearn.linear_model import SGDClassifier

# Loading Iris flower dataset
iris = datasets.load_iris()
X_data, y_data = iris.data, iris.target

# Dividing the dataset into training and testing dataset
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Getting the Iris dataset with only the first two attributes
X, y = X_data[:,:2], y_data

# Split the dataset into a training and a testing set(20 percent)
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.20, random_state=1)

# Standarize the features
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

# create the linear model SGDclassifier
clfmodel_SGD = SGDClassifier(alpha=0.001, max_iter=200)

# Train the classifier using fit() function
clfmodel_SGD.fit(X_train, y_train)

# Evaluate the result
from sklearn import metrics
y_train_pred = clfmodel_SGD.predict(X_train)
print ("\nThe Accuracy of SGD classifier is:",
metrics.accuracy_score(y_train, y_train_pred)*100)

输出

运行此代码时,将产生以下输出:

The Accuracy of SGD classifier is: 77.5
广告