📅  最后修改于: 2023-12-03 15:27:18.406000             🧑  作者: Mango
在数据科学和机器学习中,我们通常需要建立一个数理模型来描述某个现象或问题。对于线性模型而言,我们需要确定公式中的系数。接下来,我们将介绍一些方法来确定公式的系数。
最小二乘法是一种常用的确定线性模型系数的方法。它通过寻找使残差平方和最小的系数来确定模型。即,我们寻找一组系数,能够使预测值与真实值之间的误差最小。
import numpy as np
# 构建数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# 构建矩阵
X = np.vstack([x, np.ones(len(x))]).T
# 最小二乘法
b, a = np.linalg.lstsq(X, y, rcond=None)[0]
# 输出结果
print(f"y = {a} + {b}x")
输出结果如下所示:
y = 2.2 + 0.3x
梯度下降法是一种常用的优化方法,可以用于确定模型中的系数。我们通过迭代,逐步调整模型系数,使得损失函数的值最小化。
# 代价函数
def cost_function(X, y, theta):
m = len(y)
J = np.sum((X @ theta - y) ** 2) / (2 * m)
return J
# 梯度下降函数
def gradient_descent(X, y, theta, alpha, iterations):
m = len(y)
J_history = np.zeros(iterations) # 记录代价函数值
for i in range(iterations):
theta = theta - alpha * (X.T @ (X @ theta - y) / m)
J_history[i] = cost_function(X, y, theta)
return theta, J_history
# 构建数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# 构建矩阵
X = np.vstack([x, np.ones(len(x))]).T
# 初始化参数
theta = np.zeros(2)
# 梯度下降法
theta, J_history = gradient_descent(X, y, theta, alpha=0.01, iterations=1000)
# 输出结果
print(f"y = {theta[1]} + {theta[0]}x")
输出结果如下所示:
y = 1.797194012053529 + 0.4166444682848178x
正则化是一种常用的防止过拟合的方法。在确定模型系数时,我们将正则化项加入到代价函数中,以降低模型复杂度。常用的正则化方法有L1正则化和L2正则化。
# L2正则化
def cost_function_l2(X, y, theta, regularization=0.01):
m = len(y)
J = (np.sum((X @ theta - y) ** 2) + regularization * np.sum(theta[1:]**2)) / (2 * m)
return J
# L1正则化
def cost_function_l1(X, y, theta, regularization=0.01):
m = len(y)
J = (np.sum((X @ theta - y) ** 2) + regularization * np.sum(np.abs(theta[1:]))) / (2 * m)
return J
在使用上述方法时,我们可以通过调节参数,如最小二乘法中的rcond、梯度下降法中的alpha和iterations、正则化方法中的regularization来调整模型系数的确定过程。