机器学习之线性回归

线性回归的函数表示

线性回归就是用线性方程去拟合一组数据, x 的最高阶是1, 用方程可以表示为:

hθ(x)=θ0+θ1x1++θnxn

我们令 x0=1 则上式可以改写为:

h(x)=i=0nθixi=θTx

代价函数

既然是拟合的模型, 则肯定会存在不符合该模型的点, 第 i 个点的真实值与模型预测的值之间的差称为误差:

e=h(x(i))y(i)

假设总共有 m 个数据点, 则我们定义代价函数为:

J(θ)=12i=1m(h(x(i))y(i))2

我们的目的是使总的误差最小, 只需求得使 J(θ) 最小的 θ 即可。

代价函数的概率解释

那代价函数为什么是这个形式的呢? 我们可以假定目标变量具有如下的形式

y(i)=θTx(i)+ϵ(i)

其中 ϵi 是服从 N(0,σ2) 的且满足iid的随机噪声, 其概率密度可写作为:

p(ϵ(i))=12πσexp((ϵ(i))22σ2)

也即:

p(y(i)|x(i);θ)=12πσexp((y(i)θTx(i))22σ2)

因为参数 θ 未知, 我们寻求使满足 (xi,yi) 可能性最高的 θ 值估计:

L(θ)=i=1mp(y(i)|x(i);θ)=i=1m12πσexp((y(i)θTx(i))22σ2)

为了计算上的方便, 使两边取对数, 则有:

l(θ)=logL(θ)=logi=1m12πσexp((y(i)θTx(i))22σ2)=i=1mlog12πσexp((y(i)θTx(i))22σ2)=mlog12πσ1σ212i=1m(y(i)θTx(i))2

从上面式子的结果可以看出, 我们只须令

12i=1m(y(i)θTx(i))2

取最小值即可. 这便是为什么在线性回归中使用均方误差作为性能度量的一个解释。

求最优参数 θ

由于代价函数 J(θ) 是凸函数, 存在全局最优解.
下面介绍两种方法:

梯度下降

由于梯度是函数下降最快的方向, 因此我们可以重复对 J(θ) 做梯度下降使其收敛到全局最小.
更新 θ 的步骤为:

θj:=θjαθjJ(θ)

其中 α 是学习率.假设现在我们只有一个样本 (x,y) 来看看如何求:

θjJ(θ)=θj12(h(θ)y)2=(h(x)y)θj(h(x)y)=(h(x)y)θj(θ0x0+θ1x1++θjxj++θnxny)=(h(x)y)xj

根据以上导出的式子可以看出, 对于只有一个数据点的情形, 参数 θ 的更新规则为:

θj:=θj+α(yh(x))xj

那么考虑所有的 m 个数据点之后的更新式子为:

θj:=θj+α1mi=1m(y(i)h(x(i)))x(i)j

随机梯度下降

我们从上面更新 θ 的式子中可以看出, 每更新一个一个参数 θj , 我们都要进行m个样本的求和, 这样如果样本数非常大的话, 是非常消耗计算资源的. 为了避免上述问题, 我们可以只应用一个样本数据对参数进行更新.

θj:=θj+α(yih(xi))xij

注意我们不保证随机梯度下降一定能收敛到全局最小, 但在实践中, 其收敛结果是足够接近最优 θ 的.

正规方程

J(θ) 写成向量形式可以表示为:

J(θ) =12i=1m(h(x(i))y(i))2=12(Xθy⃗ )T(Xθy⃗ )

由于 J(θ) 有全局最优解, 我们令其导数为0可以直接求解最优参数.

θJ(θ)=θ(12(Xθy)T(Xθy))=θ(12(θTXTyT)(Xθy))=θ(12(θTXTXθθTXTyyTXθ+yTy))=12(2XTXθXTy(yTX)T)=XTXθxTy

从而有

θ=(XTX)1XTy

注意这一步的求解需要满足一个隐含的条件: XTX 是满秩的或是正定的。

岭回归

如果 XTX 不满秩,可以在代价函数上计入正则化项:

J(θ)=12(Xθy⃗ )T(Xθy⃗ )+λ2θ2

对该代价函数求导:

θJ(θ)=XTXθXTy+λθ

令其为0可得:

θ=(XTX+λI)1XTy

梯度下降法与正规方程的优劣比较

只要在训练样本的特征数 n<10000 的情况下, 都可以考虑使用正规方程, 因为它不需要选择学习率 α , 不需要一步一步的进行迭代. 而当 n>10000 时, 计算 (XTX)1 耗费的时间就不容忽视了, 其时间复杂度为 O(n3) , 此时推荐使用梯度下降法进行参数求解.

局部加权线性回归

线性回归可能存在的一个问题是欠拟合,因为它求的是具有最小均方误差的无偏估计,有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。

我们为每个样本点赋予不同的权重,则代价函数可表示为:

J(θ)=12i=1mw(i)(h(x(i))y(i))2

其中样本权重定义为:

w(i)=exp((x(i)x)22τ2)

参数 τ 控制着权重随 预测值 x 与样本 x(i) 的距离衰减速率。

最后求得参数为:

θ=(XTWX)1XTWy

可以看到每次预测 x 的回归值,都要重新计算权系数矩阵 W,也就是说使用局部加权回归时需要储存训练样本,而线性回归则不需要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性回归机器学习中的一种基本算法,梯度下降法是线性回归中常用的优化算法。下面是线性回归梯度下降法的实现步骤: 1.读取数据集,包括自变量和因变量。 2.初始化相关参数,包括学习率、迭代次数、截距和斜率等。 3.定义计算代价函数,常用的代价函数是均方误差(MSE)。 4.梯度下降,通过不断迭代更新截距和斜率,使得代价函数最小化。 5.执行梯度下降算法,得到最优的截距和斜率。 下面是Python代码实现: ```python import numpy as np # 读取数据集 def load_data(file_path): data = np.loadtxt(file_path, delimiter=',') x_data = data[:, :-1] y_data = data[:, -1] return x_data, y_data # 初始化相关参数 def init_params(): b = 0 k = 0 learning_rate = 0.01 num_iterations = 1000 return b, k, learning_rate, num_iterations # 定义计算代价函数 def compute_cost(b, k, x_data, y_data): total_error = 0 for i in range(len(x_data)): total_error += (y_data[i] - (k * x_data[i] + b)) ** 2 cost = total_error / float(len(x_data)) return cost # 梯度下降 def gradient_descent(b, k, x_data, y_data, learning_rate, num_iterations): m = float(len(x_data)) for i in range(num_iterations): b_gradient = 0 k_gradient = 0 for j in range(len(x_data)): b_gradient += (1/m) * ((k * x_data[j] + b) - y_data[j]) k_gradient += (1/m) * ((k * x_data[j] + b) - y_data[j]) * x_data[j] b = b - (learning_rate * b_gradient) k = k - (learning_rate * k_gradient) return b, k # 执行梯度下降算法 def linear_regression(file_path): x_data, y_data = load_data(file_path) b, k, learning_rate, num_iterations = init_params() print("Starting parameters: b = {0}, k = {1}, cost = {2}".format(b, k, compute_cost(b, k, x_data, y_data))) b, k = gradient_descent(b, k, x_data, y_data, learning_rate, num_iterations) print("After {0} iterations: b = {1}, k = {2}, cost = {3}".format(num_iterations, b, k, compute_cost(b, k, x_data, y_data))) # 调用线性回归函数 linear_regression('data.csv') ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值