机器学习:线性回归

什么是线性回归?

线性回归是一种监督学习算法,用于预测一个连续的数值目标变量。它通过一条直线(在单变量情况下)或超平面(在多变量情况下)来建模自变量与因变量之间的关系。

单变量线性回归

  • 模型形式y = β0 + β1x
    • y:因变量(预测值)
    • x:自变量(特征)
    • β0:截距项
    • β1:斜率系数
  • 目标是最小化预测值与实际值之间的误差,通常使用均方误差(MSE)作为损失函数。

多变量线性回归

  • 模型形式y = β0 + β1x1 + β2x2 + ... + βnxn
    • xn:自变量(特征)
    • 其他符号同上。

线性回归的参数调优方法

1. 梯度下降

概述:
梯度下降是一种迭代优化算法,通过逐步调整参数来最小化损失函数。

步骤:

  • 初始化参数: 设置初始的回归系数β₀和β₁。
  • 计算损失函数: 使用均方误差(MSE)衡量预测值与实际值之间的差异。
  • 计算梯度: 分别对β₀和β₁求损失函数关于它们的偏导数,得到当前参数下的梯度。
  • 更新参数: 按照梯度下降的方向调整参数值,即减去学习率乘以梯度。
  • 重复迭代: 重复上述步骤,直到达到预设的迭代次数或损失函数收敛。

代码实现:

def gradient_descent(X, y, beta, learning_rate, iterations):
    m = len(y)
    for _ in range(iterations):
        # 计算预测值
        y_pred = np.dot(X, beta)
        # 计算误差
        error = y_pred - y
        # 梯度计算
        gradient_0 = (1/m) * np.dot(error.T, X[:, 0])
        gradient_1 = (1/m) * np.dot(error.T, X[:, 1])
        # 参数更新
        beta[0] -= learning_rate * gradient_0
        beta[1] -= learning_rate * gradient_1
    return beta

2. 正规方程(Normal Equation)

概述:
正规方程通过直接求解损失函数的导数为零的条件,找到最优参数。

步骤:

  • 构建设计矩阵X: 包含所有特征。
  • 计算参数向量β: 使用公式β = (XᵀX)⁻¹Xᵀy求得。

代码实现:

def normal_equation(X, y):
    # 计算正规方程
    theta = np.linalg.inv(np.dot(X.T, X)).dot(np.dot(X.T, y))
    return theta

3. K折交叉验证(K-fold Cross Validation)

概述:
通过将数据集划分为多个子集,轮流使用其中一个作为验证集,其余的作为训练集,评估模型性能。

步骤:

  • 划分数据集: 将数据集分成k个子集。
  • 迭代评估: 在每个子集上进行一次评估,其他子集用于训练。
  • 计算平均性能: 综合所有折叠的评估结果,得到最终的模型性能指标。

代码实现:

from sklearn.model_selection import KFold

def cross_validation(X, y, model, k):
    kf = KFold(n_splits=k)
    scores = []
    for train_index, test_index in kf.split(X):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]
        model.fit(X_train, y_train)
        score = model.score(X_test, y_test)
        scores.append(score)
    return np.mean(scores), np.std(scores)

4. 正则化(Regularization)

概述:
加入惩罚项限制参数大小,防止过拟合。

  • L1正则化(Lasso): 使用绝对值的和作为惩罚项。
  • L2正则化(Ridge): 使用平方和作为惩罚项。

步骤:

  • 构建损失函数: 在原损失函数中加入正则化的惩罚项,比例由λ控制。
  • 优化参数: 通过梯度下降或其他方法最小化新损失函数。

代码实现:

def regularized_gradient_descent(X, y, beta, learning_rate, iterations, lambd):
    m = len(y)
    for _ in range(iterations):
        # 计算预测值
        y_pred = np.dot(X, beta)
        error = y_pred - y
        # 正则化项的梯度
        gradient_0 = (1/m) * np.dot(error.T, X[:, 0]) + lambd * beta[0]
        gradient_1 = (1/m) * np.dot(error.T, X[:, 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小源学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值