线性回归

线性回归#

让我们实现一个基本的线性回归模型作为学习 MLX 的起点。首先导入核心包并设置一些问题元数据

import mlx.core as mx

num_features = 100
num_examples = 1_000
num_iters = 10_000  # iterations of SGD
lr = 0.01  # learning rate for SGD

我们将通过以下方式生成一个合成数据集:

  1. 采样设计矩阵 X

  2. 采样一个真实参数向量 w_star

  3. 通过向 X @ w_star 添加高斯噪声来计算因变量值 y

# True parameters
w_star = mx.random.normal((num_features,))

# Input examples (design matrix)
X = mx.random.normal((num_examples, num_features))

# Noisy labels
eps = 1e-2 * mx.random.normal((num_examples,))
y = X @ w_star + eps

我们将使用 SGD 来寻找最优权重。首先,定义平方损失,并获取损失相对于参数的梯度函数。

def loss_fn(w):
    return 0.5 * mx.mean(mx.square(X @ w - y))

grad_fn = mx.grad(loss_fn)

通过随机初始化参数 w 来开始优化。然后重复更新参数 num_iters 次迭代。

w = 1e-2 * mx.random.normal((num_features,))

for _ in range(num_iters):
    grad = grad_fn(w)
    w = w - lr * grad
    mx.eval(w)

最后,计算学到的参数的损失,并验证它们是否接近真实参数。

loss = loss_fn(w)
error_norm = mx.sum(mx.square(w - w_star)).item() ** 0.5

print(
    f"Loss {loss.item():.5f}, |w-w*| = {error_norm:.5f}, "
)
# Should print something close to: Loss 0.00005, |w-w*| = 0.00364

线性回归逻辑回归 的完整示例可在 MLX GitHub 仓库中找到。