2024-11-18 学习人工智能的Day28 线性回归
线性回归
线性回归是统计学和机器学习中的一种基本预测模型,用于分析和建模目标变量(连续型数据)与一个或多个自变量(解释变量)之间的关系。
线性回归概述
线性回归模型假设目标变量 y
与自变量 X
之间存在线性关系。这种关系可以用以下公式表示:
y
=
β
0
+
β
1
X
1
+
β
2
X
2
+
…
+
β
n
X
n
+
ϵ
y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_n X_n + \epsilon
y=β0+β1X1+β2X2+…+βnXn+ϵ
其中:
y
是目标变量。X_1, X_2, \ldots, X_n
是自变量。- β_0, β_1,β_n 是回归系数,需要通过数据估计。
- ε 是误差项,表示模型无法解释的随机变异。
线性回归类型
- 简单线性回归:只有一个自变量和一个因变量。
- 多元线性回归:包含两个或更多自变量。
损失函数
线性回归通常使用最小二乘法来估计模型参数,即最小化实际观测值和模型预测值之间的平方差之和。损失函数定义为:
MSE
=
1
n
∑
i
=
1
n
(
y
i
−
y
^
i
)
2
\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
MSE=n1i=1∑n(yi−y^i)2
其中:
n
是样本数量。y_i
是第i
个观测值。- y_i是模型预测值。
参数估计
最小二乘法通过求解以下方程来估计参数:
∂
MSE
∂
β
j
=
0
\frac{\partial \text{MSE}}{\partial \beta_j} = 0
∂βj∂MSE=0
这通常通过矩阵运算实现:
β
^
=
(
X
T
X
)
−
1
X
T
y
\hat{\beta} = (X^T X)^{-1} X^T y
β^=(XTX)−1XTy
其中:
X
是设计矩阵,包含自变量的值。y
是目标变量的向量。- β 是估计的参数向量。
梯度下降法
梯度下降是一种优化算法,用于最小化损失函数。在每次迭代中,参数按照梯度的反方向更新:
β
(
t
+
1
)
=
β
(
t
)
−
α
∇
β
MSE
(
β
(
t
)
)
\beta^{(t+1)} = \beta^{(t)} - \alpha \nabla_\beta \text{MSE}(\beta^{(t)})
β(t+1)=β(t)−α∇βMSE(β(t))
其中:
- α是学习率。
- β 是损失函数相对于参数的梯度。
正则化
为了防止过拟合,线性回归模型可以加入正则化项,如岭回归(L2正则化)和Lasso回归(L1正则化):
-
岭回归:
Loss = MSE + λ ∑ j = 1 n β j 2 \text{Loss} = \text{MSE} + \lambda \sum_{j=1}^{n} \beta_j^2 Loss=MSE+λj=1∑nβj2 -
Lasso回归:
Loss = MSE + λ ∑ j = 1 n ∣ β j ∣ \text{Loss} = \text{MSE} + \lambda \sum_{j=1}^{n} |\beta_j| Loss=MSE+λj=1∑n∣βj∣
其中 λ 是正则化强度参数。
应用
线性回归广泛应用于各种预测任务,如房价预测、股票价格分析、销售预测等。尽管线性回归模型简单,但它提供了对数据关系的基本理解,并且可以作为更复杂模型的基准。
线性回归模型的实现和应用通常依赖于统计软件或机器学习库,如Python的scikit-learn库,它提供了简单而强大的接口来训练和评估线性回归模型。
最后介绍一下sklearn库中的接口
import numpy as np
import matplotlib.pyplot as plt
w = np.linspace(-10,20,100)
# print(w)
def loss(w):
return (w-3.5)**2-4.5*w+10
def dloss(w):
return 2*(w-3.5)-4.5
plt.plot(w,loss(w)) # 当该直线与x轴相交,表示损失为0,拟合曲线与所有已知点重合,
# 且该曲线无法出现小于0的值,因为该曲线是由均方误差算的
# 梯度下降
# 学习率
learning_rate = 0.01
# 初始化一个w值
np.random.seed(1)
w = np.random.randint(-10,20) # 随机给一个w值:-5
e = loss(w) # 初始化的w为-5时的loss值
x = [w]
y = [e]
# 用循环来多级下降
for i in range(100):
w = w-learning_rate*dloss(w)
e = loss(w)
x.append(w)
y.append(e)
# 单次下降
# # 第一次梯度下降
# w = w-learning_rate*dloss(w)
# e = loss(w)
# x.append(w)
# y.append(e)
# # 第二次梯度下降
# w = w-learning_rate*dloss(w)
# e = loss(w)
# x.append(w)
# y.append(e)
# # 第三次
# w = w-learning_rate*dloss(w)
# e = loss(w)
# x.append(w)
# y.append(e)
plt.scatter(x,y)
plt.show()
原文地址:https://blog.csdn.net/ctrey_/article/details/143864341
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!