山东大学机器学习(实验三内容)——正则化

1. 描述

在这个练习中,你将实现正则化的线性回归和正则化的逻辑回归。

2. 数据

首先,下载data3.zip和从压缩文件中提取文件。这个数据包包含两组数据,一组用于线性回归(ex3Linx.dat和ex3Liny.dat),另一个用于逻辑回归(x3Logx.dat和ex3Logy.dat)。还包含一个名为"map_feature"的辅助函数。将用于逻辑回归。确保这个函数的m文件位于您计划编写代码的相同工作目录中。

3. 正则化线性回归

本练习第一部分着重于正规线性回归和正规方程。加载数据文件"ex3Linx.dat"和"ex3Liny.dat"。在你的程序中,这对应你要开始的变量x和y。注意,在这个数据中,输入"x"是一个单独的特征,因此你可以将y作为x的函数绘制在二维图上(你可以自己尝试):从这个图上可以看出来,拟合直线可能过于简单。相反,我们将尝试对数据拟合一个高阶多项式,以捕捉更多点的变化。
  我们试试五阶多项式。我们的假设是
(1)hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4+θ5x5 h _ { \theta } ( x ) = \theta _ { 0 } + \theta _ { 1 } x + \theta _ { 2 } x ^ { 2 } + \theta _ { 3 } x ^ { 3 } + \theta _ { 4 } x ^ { 4 } + \theta _ { 5 } x ^ { 5 } \tag{1} hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4+θ5x5(1)
这意味着有六个特征的假设,因为x0,x1,…,x5x_0,x_1,\dots,x_5x0,x1,,x5是我们回归的所以特征。注意,即使我们得到了一个多项式拟合,我们仍有一个线性回归的问题因为每个特征的假设都是线性的。
  由于我们将一个5阶多项式拟合到一个只有7个点的数据集,因此很可能出现过拟合。为了防止这种情况,我们将在模型中使用正则化。回想一下正则化问题,目标是最小化关于θ\thetaθ的代价函数
(2)J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2] J ( \theta ) = \frac { 1 } { 2 m } \left[ \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } + \lambda \sum _ { j = 1 } ^ { n } \theta _ { j } ^ { 2 } \right] \tag{2} J(θ)=2m1[i=1m(hθ(x(i))y(i))2+λj=1nθj2](2)

其中λ\lambdaλ是正则化参数。正则化参数λ\lambdaλ是控制在你的拟合参数。随着拟合参数的增大,对成本函数的惩罚也会增大,这个点球是依赖于参数的平方以及λ\lambdaλ的大小。同时,求和后λ\lambdaλ不包括θ02\theta_0^2θ02
  现在,我们将使用正规方程找到模型的最佳参数。回想一下正则化线性回归的正规方程解是
θ=(XTX+λ[01⋱1])−1XTy⃗ \theta = ( X ^ { T } X + \lambda \left[ \begin{array} { c c c c } { 0 } & { } & { } \\ { } & { 1 } & { } \\ { } & { } & { \ddots } & { } \\ { } & { } & { } & { 1 } \end{array} \right] ) ^ { - 1 } X ^ { T } \vec { y } θ=(XTX+λ011)1XTy

### 关于正则化线性回归正则化逻辑回归实验指导 在实现正则化线性回归正则化逻辑回归的过程中,通常会涉及以下几个核心部分: #### 数据准备 为了完成这些实验,首先需要下载 `ex5Data.zip` 并解压其中的内容[^1]。该压缩包包含了两组数据集:一组适用于线性回归的任务,而另一组则是为逻辑回归设计的数据。 #### 特征处理 对于逻辑回归任务,可能还需要使用到名为“映射特征.m”的辅助函数来扩展原始输入特征的空间。这一步骤有助于提高模型拟合复杂模式的能力。如果是在 Python 中实现,则可以通过 NumPy 或 Pandas 来构建类似的多项式特征矩阵。 #### 正则化线性回归实现 以下是基于 Python 的正则化线性回归的一个简单实现示例: ```python import numpy as np def compute_cost(X, y, theta, lambda_): m = len(y) h = X @ theta regularization_term = (lambda_ / (2 * m)) * np.sum(theta[1:] ** 2) cost = (1/(2*m)) * np.sum((h-y)**2) + regularization_term return cost def gradient_descent(X, y, theta, alpha, num_iters, lambda_): m = len(y) J_history = [] for _ in range(num_iters): error = X @ theta - y grad_theta = (X.T @ error) / m reg_term = (lambda_ / m) * theta reg_term[0] = 0 # 不对截距项应用正则化 theta -= alpha * (grad_theta + reg_term) J_history.append(compute_cost(X, y, theta, lambda_)) return theta, J_history ``` 上述代码实现了带有 L2 正则化的梯度下降方法,并通过调整参数 `lambda_` 控制正则化的强度。 #### 正则化逻辑回归实现 下面是针对正则化逻辑回归的部分代码片段: ```python from scipy.optimize import minimize def sigmoid(z): return 1 / (1 + np.exp(-z)) def log_reg_cost_function(theta, X, y, lambda_): m = len(y) h = sigmoid(X @ theta) base_cost = (-1/m) * (y.T @ np.log(h) + (1-y).T @ np.log(1-h)) reg_term = (lambda_ / (2 * m)) * np.sum(theta[1:]**2) return base_cost + reg_term def optimize_logistic_regression(X, y, initial_theta, lambda_): result = minimize( fun=log_reg_cost_function, x0=initial_theta, args=(X, y, lambda_), method='BFGS', options={'disp': True} ) return result.x ``` 这段代码定义了一个优化目标函数以及调用 SciPy 库中的最小化器来进行求解最优参数的过程。 #### 偏置计算补充说明 另外,在某些情况下可能会涉及到偏置(bias)的额外计算公式[^3]。虽然这里主要讨论的是正则化问题,但如果遇到特定场景下的偏差修正需求时也可以参考相关内容进行适当修改。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值