下面是详细讲解“Python实现随机梯度下降法”的完整攻略。
随机梯度下降法
随机梯度下降法(Stochastic Gradient Descent,SGD)是一种常用的优化算法,用于训练机器学习模型。该算法的核心思想是通过迭代更新模型,使得损失函数最小化。
下面是一个Python实现随机梯度下降法的示例:
import numpy as np
def sgd(X, y, alpha, epochs):
m, n = X.shape
theta = np.zeros(n)
for epoch in range(epochs):
for i in range(m):
h = np.dot(X[i], theta)
error = h - y[i]
gradient = X[i] * error
theta = theta - alpha * gradient
return theta
上述代码中,首先导入了numpy库,用于进行数值计算。
然后,定义了一个sgd函数,该函数接受三个参数X、y和alpha,分别表示特征矩阵、标签和学习率,以及一个参数epochs,表示迭代次数,返回最优参数theta。
接着,初始化变量m和n,分别表示特征矩阵的行数和列数。
然后,初始化变量theta,表示模型参数。
接着,使用两个for循环迭代更新模型参数。
在内层循环中,首先计算预测值h。
然后,计算误差error。
接着,计梯度gradient。
最后,更新模型参数theta。
最后,返回最优参数theta。
示例
下面是一个使用随机梯度下降法训练线性回归模型的Python示例:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
np.random.seed(0)
m = 100
X = 2 * np.random.rand(m, 1)
y = 4 + 3 * X + np.random.randn(m, 1)
# 添加偏置项
X_b = np.c_[np.ones((m, 1)), X]
# 使用随机梯度下降法训练模型
theta = sgd(X_b, y.ravel(), 0.1, 1000)
# 绘制数据点和拟合直线
plt.scatter(X, y)
plt.plot(X, X_b.dot(theta), color='red')
plt.show()
上述代码中,首先使用numpy库生成100个随机数据点。
然后,使用numpy库添加偏置项。
接着,调用sgd函数使用随机梯下法训练模型。
最后,使用matplotlib库绘制数据点和拟合直线。
下面是一个使用随机梯度下降法训练逻辑回归模型的Python示例:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
np.random.seed(0)
m = 100
X = 2 * np.random.rand(m, 2) - 1
y = (X[:, 0] + X[:, 1] > 0).astype(int)
# 添加偏置项
X_b = np.c_[np.ones((m, 1)), X]
# 使用随梯度下降法训练模型
theta = sgd(X_b, y, 0.1, 1000)
# 绘制数据点和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y)
x0, x1 = np.meshgrid(
np.linspace(-1, 1, 100).reshape(-1, 1),
np.linspace(-1,1, 100).reshape(-1, 1),
)
_new = np.c_[x0.ravel(), x1.ravel()]
X_new_b = np.c_[np.ones((len(X_new), 1)), X_new]
y_predict = X_new_b.dot(theta)
zz = y_predict.reshape(x0)
plt.contourf(x0, x1, zz, cmap=plt.cm.brg, alpha=0.2)
plt.show()
上述代码中,首先使用numpy库生成100个随机数据点。
然后使用numpy库添加偏置项。
接着,调用sgd函数使用随机梯度下降法训练模型。
最后,使用matplotlib库绘制数据点和决策边界。
总结
随机梯度下降法是一种常用的优化算法,用于训练机器学习模型Python中可以使用numpy库进行数值计算,使用for循迭代更新型参数。在实现过程中,需要计算预测值、误差和梯度,然后更新模型参数。最后,使用matplotlib库绘数据点和拟合曲线或决策边界。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现随机梯度下降法 - Python技术站