下面是一个Python示例代码,用于实现多元线性回归,并添加正则化项:

import numpy as np

# 生成数据集
np.random.seed(0)
m = 100
n = 5
X = np.random.randn(m, n)
theta_true = np.random.randn(n, 1)
y = X.dot(theta_true) + np.random.randn(m, 1) * 0.5

# 定义正则化项的权重
lambda_reg = 0.5

# 定义代价函数和梯度函数
def cost_function(X, y, theta, lambda_reg):
    m = len(y)
    J = np.sum((X.dot(theta) - y) ** 2) / (2 * m) + lambda_reg * np.sum(theta[1:] ** 2) / (2 * m)
    grad = X.T.dot(X.dot(theta) - y) / m + lambda_reg * np.vstack((np.array([[0]]), theta[1:])) / m
    return J, grad

# 初始化theta
theta = np.random.randn(n, 1)

# 梯度下降算法
alpha = 0.1
num_iters = 1000
for i in range(num_iters):
    J, grad = cost_function(X, y, theta, lambda_reg)
    theta -= alpha * grad

# 打印结果
print("True parameters:")
print(theta_true)
print("Learned parameters:")
print(theta)

在上面的代码中,我们首先生成一个大小为(100,5)的随机数据集。然后,我们定义了正则化项的权重lambda_reg,以及代价函数和梯度函数。最后,我们使用梯度下降算法来学习theta,并打印出结果。

请注意,我们在代价函数和梯度函数中添加了一个正则化项,它使用theta的平方和(除去第一个元素)来惩罚模型的复杂度。这有助于防止过度拟合。在梯度下降步骤中,我们还将正则化项的梯度添加到原始梯度中。

你可以尝试使用不同的lambda_reg值来看看它们如何影响学习结果。较大的lambda_reg值将更强烈地惩罚theta的平方和,从而导致更简单的模型

编程多元线性回归并增加正则化项

原文地址: https://www.cveoy.top/t/topic/coS4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录